我搜了搜资料,发现大多数是不同语言的js文件分开做,然后根据用户语言环境去加载对应的js文件。
但是我现在因为使用场景限制,最好是在一个js文件里完成。我现在打算支持3种语言(中文、日文、英文),而且输出文字的地方也比较多,可能有上百条,中间也经常要拼接变量。
更新:
我现在用的办法是参考“上大人”的回答,根据自己需要修改的结果:
let lang_type = 2; // 获取语言类型,可以是 0,1,2
// 储存多语种文本
let xz_lang = {
// 属性名写成方便理解的文字。我用的中文,如果考虑和外国人协作,可以写成英文。
// 在属性名前面加上下划线,和文本内容做出区别。
// 按照固定顺序排列(如:中日英)
// {}表示需要进行替换的部分
'_过滤作品类型的按钮': [
'排除指定类型的作品',
'タイプでフィルタリングする',
'Filter by works type'
],
'_tag搜索任务开始': [
'收藏数不低于{},向下抓取{}页',
'ブックマークの数は{}ページ以上で、{}ページがクロールされます。',
'The number of bookmarks is not less than {}, {} pages down to crawl.'
]
};
// 翻译程序
function translate(name) {
let content = xz_lang[name][lang_type];
if (arguments.length > 1) { // 把占位符 {} 替换成传递的参数
for (let i = 1; i < arguments.length; i++) {
content = content.replace('{}', arguments[i]);
}
}
return content;
}
// 测试
console.log(translate('_过滤作品类型的按钮'));
console.log(translate('_tag搜索任务开始',1000,1000));
这样满足了我的需求。仅供参考~
你的意思大概是想把所有文字都翻译,但由于语法结构问题变量的位置是未知的不知道怎么解决是吧?
思路的话其实你可以参考模板渲染的思路.
我打个比方