在基于模块的JavaScript体系结构中,语言翻译定义放在哪里?
目前我有这样的结构在基于模块的JavaScript体系结构中,语言翻译定义放在哪里?,javascript,ecmascript-6,translation,Javascript,Ecmascript 6,Translation,目前我有这样的结构 id: data[i].id, headers: ["Även åsnor", "försöker på engelska"], columns: { userName: data[i].firstName + " " + data[i].lastName, finishOn: data[i].finishOn !== null ? data[i].finishOn : "pågår..." } 我希望上面的结构可以像这样重新建模 id: d
id: data[i].id,
headers: ["Även åsnor", "försöker på engelska"],
columns: {
userName: data[i].firstName + " " + data[i].lastName,
finishOn: data[i].finishOn !== null
? data[i].finishOn
: "pågår..."
}
我希望上面的结构可以像这样重新建模
id: data[i].id,
headers: [Lang.userName, Lang.completedOn],
columns: {
userName: data[i].firstName + " " + data[i].lastName,
finishOn: data[i].finishOn !== null
? data[i].finishOn
: Lang.holdYourPonnies
}
然后,我可以将所有语言字段放在一个单独的模块中,并将它们保留在那里。我从来没有在JavaScript中这样做过,我对此感到担忧
- 对于导入它的每个模块,我是否需要一个单独的语言模块
- 或者我应该有一个单一的语言模块并多次导入它,每个需要语言的模块导入一次
- 或者有没有办法将其导入根模块,并使其对树中的每个人都可用
{
"FOO": "foo"
}
对
export default {
"FOO": "foo"
}
但模板文本可以用于JS文件中的多行字符串,这大大提高了可读性
大多数情况下,在某些时候,对变量的支持是必要的。通常需要一个简单的模板引擎。为了简单和性能,此处也可以使用模板文字:
export default {
FOO: "foo",
BAR: `multiline
bar`,
BAZ: (val) => `template baz: ${val}`
}
这可以通过简化的本地化API有效地处理:
import en from './en';
import se from './se';
export class L10n {
constructor() {
this.lang = 'en';
this.definitions = { en, se };
}
switch(lang) {
this.lang = lang;
}
get(token, ...templateVars) {
const val = this.definitions[this.lang][token];
if (typeof val === 'function')
return val(...templateVars);
else
return val;
}
}
export default new L10n;
并且可以这样使用:
l10n.get('FOO');
l10n.get('BAZ', 'baz value');
哦,这看起来是成熟的职业水平。令人惊叹的!我会等一两天让其他人做出贡献(也许其他人可以在实际情况中提供更多的见解)。但这肯定是+1的努力。如果我忘记接受,几天后提醒我,好吗?还有-你为什么选择彩虹所有颜色中的SE?!(没错,我来自斯德哥尔摩——只是好奇而已。运气好吗?)当然,我会提醒你的。这就是i18n/l10n通常由框架处理的方式。你也可以查一下。但就你所问的,毫无意义的ES6解决方案就是这么简单。是的,你可以说这是一个幸运的机会,我通常通过发音符号来区分斯堪的纳维亚语。嗯,好主意。如果你看到奥哈,你可以肯定这是可耻的。如果你看到的是Ä而不是Æ或Ö而不是Ø,你可以排除丹麦人和挪威人。另外,如果你看到Verrylloongwoorrds一行有一堆重复的字符,那肯定是芬兰语。疯狂的语言。很棒的女人。但你可能已经知道了对。有一些困难的时间区分丹麦,瑞典和挪威语的词组没有暗示的字母表,我想应该考虑学习他们,而不是在这一点上,哈。