【问题标题】:How to parameterize/transliterate in Javascript?如何在 Javascript 中参数化/音译?
【发布时间】:2010-01-24 17:40:34
【问题描述】:

在 Ruby on Rails 中,您可以轻松地将“任何”文本转换为适用于子域/路径名的格式。

1) "I am nobody." -> "i-am-nobody"
2) "Grünkohl is a german word." -> "grunkohl-is-a-german-word"

我想在客户端执行此操作以获得高响应性(替代方案是通过 Ajax)。

最后一个示例称为音译(将元音变音和其他非拉丁字母转换为拉丁字母)。音译将是一个 nice2have 功能(在这种情况下,我可以回退到 Ajax 让 Iconv 来做)。

有人知道如何用 JavaScript 做到这一点吗?我当前的代码工作正常,但存在多个空格问题,Tête-à-tête 变成了Tte--tte,这很丑。

【问题讨论】:

  • 出于好奇,这与高响应性有什么关系?通常这是在服务器上完成一次 - 创建记录时。
  • 嗯,它是一个“建议的”名称,用户仍然可以更改。因此,当用户填写 时,应该填写第二个

标签: javascript ruby-on-rails internationalization


【解决方案1】:

当我需要这个时,我使用了 Django javascript 实现,它涵盖了大部分内容甚至更多内容:)

可以在这里找到: https://code.djangoproject.com/browser/django/trunk/django/contrib/admin/static/admin/js/urlify.js

【讨论】:

    【解决方案2】:

    urlify 用于 node.js npm 包 https://npmjs.org/package/parameterize

    【讨论】:

      【解决方案3】:

      这是一个 JS 将传递的短语俄语音译为英语以满足 URL 的需要。可以修改其数据以申请法语或任何其他语言。除字母和数字外的任何内容都替换为“-”,删除双精度和结尾“-”。

      function url(word, letterVersionOrder) {
              var letters = 'a b v g d e ["zh","j"] z i y k l m n o p r s t u f h c ch sh ["shh","shch"] ~ y ~ e yu ya ~ ["jo","e"]'.split(' ');
              var wordSeparator = '';
              word = word.toLowerCase();
              for (var i = 0; i < word.length; ++i) {
                  var charCode = word.charCodeAt(i);
                  var chars = (charCode >= 1072 ? letters[charCode - 1072] : word[i]);
                  if (chars.length < 3) {
                      wordSeparator += chars;
                  } else {
                      wordSeparator += eval(chars)[letterVersionOrder];
                  }
              }
              return(wordSeparator.
                      replace(/[^a-zA-Z0-9\-]/g, '-').
                      replace(/[-]{2,}/gim, '-').
                      replace(/^\-+/g, '').
                      replace(/\-+$/g, ''));
          }
      

      这是一个更快的缩小版:

      function url(w, v) { var tr = 'a b v g d e ["zh","j"] z i y k l m n o p r s t u f h c ch sh ["shh","shch"] ~ y ~ e yu ya ~ ["jo","e"]'.split(' '); var ww = ''; w = w.toLowerCase(); for (var i = 0; i < w.length; ++i) { var cc = w.charCodeAt(i); var ch = (cc >= 1072 ? tr[cc - 1072] : w[i]); if (ch.length < 3) {ww += ch;} else {ww += eval(ch)[v];} } return(ww.replace(/[^a-zA-Z0-9\-]/g, '-').replace(/[-]{2,}/gim, '-').replace(/^\-+/g, '').replace(/\-+$/g, ''));}
      

      来自here

      【讨论】:

      • 另外,对于某些多语言 URL 需求,您可能需要将 URL 音译回来。这几乎是不可能的,因为正向音译会丢失一些信息(例如,将 33 个俄语字母转换为 26 个英语)。这对于动态打开的页面也可能很耗时。解决方案是预先对每个 URL 元素进行音译,并将其作为该物质的字段存储在数据库中。因此,当您更改物质名称并将结果保存到类似 url_name 字段时,您会进行音译。
      猜你喜欢
      • 2017-05-29
      • 1970-01-01
      • 2011-05-10
      • 2023-02-21
      • 2015-08-21
      • 2018-05-06
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      相关资源
      最近更新 更多