最佳实践JavaScript和多语言

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (32)

使用DOM操作的多语言网站的最佳做法是什么?我使用JavaScript构建网站的一些动态部分。我的第一个想法是使用一个包含文本字符串和语言代码的数组作为索引。这是一个好主意吗?

提问于
用户回答回答于

当我之前建立了多语言网站时(不是很大的网站,所以这可能不会太好),我保留了一系列“language”文件:

  • lang.en.js
  • lang.it.js
  • lang.fr.js

每个文件都声明一个对象,该对象基本上只是从关键字到语言短语的映射:

// lang.en.js
lang = {
    greeting : "Hello"
};

// lang.fr.js
lang = {
    greeting : "Bonjour"
};

动态加载其中一个文件,然后您需要做的就是引用地图中的密钥:

document.onload = function() {
    alert(lang.greeting);
};

当然,还有很多其他的方法可以做到这一点,还有很多方法可以更好地实现这种风格:将其全部封装到一个函数中,以便可以优雅地处理“字典”中缺少的短语,甚至可以完成整个事情使用OOP,让它管理包括文件在内的动态,它甚至可能为你绘制语言选择器等等。

var l = new Language('en');
l.get('greeting');
用户回答回答于

设计多语言支持时需要注意以下几点:

1 - 从数据中分离代码(即,不要将代码串直接硬编码到您的函数中)

2 - 创建格式化钩子函数来处理本地化差异。允许可格式化的字符串(“{0}”)优于连接(“欢迎使用”+值),原因很多:

  • 在某些语言中,一个数字格式为1.234.678,00而不是1,234,567.00
  • 多元化通常不如在单数结尾附加“s”那么简单
  • 语法规则是不同的,并且可能会影响事物的顺序,所以您应该允许在翻译挂钩之后附加动态数据:例如,“欢迎使用{0} ”在日语中变成“{0}他youkoso”(发生这种情况时几乎所有的语言,介意你)。

3 - 确保您可以在翻译挂钩运行实际格式化字符串,以便您可以重复使用键。

4 - 不要在任何情况下将数据库输出挂接到转换器实用程序。如果您有多语言数据,请在数据库中创建单独的表/行。我曾经见过人们经常会这样做(这通常适用于国家和州/省的形式)。

5 - 创建用于创建密钥的显式编码实践规则。格式化工具函数(看起来像translate(“hello world”))会将一个关键字作为参数,并且具有轻微变化的关键字会使维护非常烦人。例如,在以下示例中,最终可能会出现三个键: “输入你的名字”,“输入你的名字:”,“输入你的名字:”,选择一种格式(例如不用冒号,修剪),并捕捉代码评论中的不一致。阳性。

6 - 注意在翻译表中可能需要使用HTML标记(例如,如果您需要在句子中加粗一个单词,或者有脚注医学参考)。广泛测试。

7 - 有几种导入语言字符串的方法。理想情况下,您应该拥有多个版本的language.lang.js文件,使用服务器端代码在它们之间切换,并从HTML文件的底部引用文件。通过AJAX拉取文件也是一种选择,但可能会引入延迟。将language.js合并到你的主代码文件是不可取的,因为你失去了文件缓存的好处。

8 - 测试你的目标语言。这听起来很愚蠢,但我曾经看到过一次严重的错误,因为程序员没有麻烦检查密钥中是否存在“é”。

扫码关注云+社区