为模块化应用程序组织Javascript i18n文件

时间:2013-04-09 15:20:07

标签: javascript internationalization

我正在为一个相对较新的应用添加i18n支持。这是一个模块化应用程序。现在,我们只会有英语(可能还有猪拉丁语用于测试目的),但我想确保我们不会在脚下射击。我有两个组织翻译文件的想法:

  1. 一个大的全局翻​​译列表,其中包含在任何模块中使用的每个字符串。这将导致全局文件的一些争用。这个文件会更大,我想知道下载时间。

  2. 每个模块都有自己的翻译文件。这将导致在多个模块中发生的字符串的一些重复。如果我们将这些文件发送出去进行翻译,我们必须合并这些文件。

  3. 我们正在使用Javascript,还有Backbone.js,Require.js,Aura等,我们正计划使用i18next。

    哪种方式最好整理文件?或者还有其他一些方法我不知道。

2 个答案:

答案 0 :(得分:3)

通过为每个模块提供一个文件,您将重复自己。如果在十个模块中使用该字符串,则必须翻译十次“An Error Happened”。我的建议是将所有翻译聚合在一个结构如下的大JSON文件中:

{
  "common": {
    "welcome": "welcome",
    ...
  },
  "module1": { 
    "loaded": "module1 is loaded"
     ....
  }
}

您将在其自己的对象和对象中的公共字符串中包含特定于模块的翻译。

旁注:你可以从他的blog post中学习John Resig关于i18n的JavaScript。

答案 1 :(得分:0)

遇到了这个问题&以为我会对此提出另一种观点。

<强>背景

创建一个大型翻译文件是可以的,除非你是:

  1. 开发企业级网站/系统,并且;
  2. 在一个大团队中工作。
  3. 我一直在研究一个Angular应用程序超过一年,需要一个庞大的开发团队,并且是一个相当大的系统。

    当您的系统变得庞大并且您拥有一个庞大的团队时,单个语言文件不是是最佳选择,因为:

    1. 取决于技能组合&amp;你的开发人员的时间框架,在已经很大的语言文件中添加新的字符串会产生懒惰,以及'的思维方式哦,我只是将它放在这里的部分并稍后重构'。如果使用相同的思维模式尝试找到已存在的项目,则会导致不必要的重复。
    2. 在大型文件和大型团队记录中,如果两个人正在处理同一个文件并发生冲突,则冲突解决可能会导致错误并浪费时间。
    3. 如果您的框架/技术支持,较小的文件可以延迟加载。为什么要加载您可能不使用的子系统的语言文件?
    4. 摘要&amp;建议

      根据我的经验,我的建议如下:

      为您的项目做最好的事情,时间表和需求。如果您正在使用大型系统,从长远来看节省时间,请从单独的文件开始。从一开始就制定标准并坚持下去以节省时间。