【问题标题】:How to handle complex strings in internalization (i18n)?如何处理内部化(i18n)中的复杂字符串?
【发布时间】:2018-05-08 19:03:39
【问题描述】:

让我们刺痛I want to by {number} apples。我们有和接口:

有条件支持的最佳方式是什么:

  • 整个短语应该是一个文本
  • apples 可以有复数形式

如何在您的 JavaScript 项目中解决这个问题?

【问题讨论】:

  • 这取决于你的网络框架...
  • 主要坑是在翻译短语里面有一个<select>标签。我想知道它在不同的框架中会是什么样子。
  • 那太宽泛了

标签: javascript internationalization


【解决方案1】:

您应该创建一个数据结构来存储所有这些短语并创建一个根据条件选择它们的函数(不是完美的解决方案,也不是完美的 javascript,但可能会给您一个想法):

var translations =
{
  "English":{
    "I want to by %n apples":[
      [0, "%n apples"],
      [1, "%n apple"],
      [2, "%n apples"]
    ]
  }
},
{
  "American":{
    "I want to by %n apples":[
      [0, "%n apples, dude"],
      [1, "%n apple, dude"],
      [2, "%n apples, dude"]
    ]
  }
};

var languageToUse = "American";
var stringToReplace = "I want to by %n apples";
var numberOfItems = 1;
var newEnding = translations[languageToUse][stringToReplace][numberOfItems];

var res = stringToReplace.replace("%n apples", newEnding);

// res = "I want to by %n apple, dude"

http://i18njs.com/ 有很好的示例如何做到这一点。

【讨论】:

  • 您的虚拟示例无法处理numberOfItems = 4。此外,还不清楚var translations 里面有<select> 应该是什么样子。
猜你喜欢
  • 2014-02-09
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 2020-07-07
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多