时间:2020-04-09 22:28:11 | 栏目: | 点击:次
这里介绍一种使用场景,在一个js文件里完成。可以打算支持多种语言(中文、日文、英文等),而且输出文字的地方也比较多,可能有上百条,中间也经常要拼接变量。
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));
其实想把所有文字都翻译,但由于语法结构问题变量的位置是未知的,可以参考模板渲染的思路。var language = {
'hello': [
'hello,{val}!',
'{val},コン!'
]
};
var lang = 0; // 当前英文
function translate (msgVariable, data, msg) {
if (msg !== undefined) language[msgVariable].push(msg);
return language[msgVariable][lang].replace('{val}', data);
}
var data = '张三';
var msg = translate('hello', data, '你好,{val}!');
var hello = {
"cn" : "哈喽",
"jp" : "こんにちは",
"en" : "f**k you"
};
或者这样子,也是可以的:
//在页面初始化的时候判断当前的环境,然后直接设定key值就可以,比如说我现在是日语
var lang = "jp";
console.log(hello[lang]);
//拓展的话往对象里面加值就行了,比如说加韩文
var hello = {
"cn" : "哈喽",
"jp" : "こんにちは",
"en" : "f**k you",
"kr" : "为何不洗澡思密达"
};
lang = "kr";
console.log(hello[lang]);