【发布时间】:2018-04-28 08:22:10
【问题描述】:
我已经阅读了几篇关于这个主题的文章和一些像this one 这样的 SO 问题,但没有什么真正适合我的情况。
所以基本上我正在创建简单的单页应用程序,几乎不涉及任何 javascript。我唯一需要 JS 的地方就是这个翻译。一般来说,在 JS 中创建一些脚本来翻译对我来说不是问题,所以我这样做了:
我正在将两个文件导入我的 index.html:
<script src="js/text.js"></script>
<script src="js/translator.js"></script>
在 text.js 我有一个常量对象,其中包含网站要显示的文本:
// Global constant "text" accessible in translator.js file
const text = {
PL: {
aboutHeading: "Kilka słów o mnie"
},
ENG: {
aboutHeading: "Few words about me"
}
};
在 translator.js 我有一个对象负责检查哪种语言并填充 div/标题/任何文本:
// global translator object
const translator = {
currentLanguage: '',
checkLanguage() {
switch (window.navigator.language) {
case 'pl':
case 'pl-PL': {
this.currentLanguage = 'pl';
break;
}
case 'en': {
this.currentLanguage = 'eng';
break;
}
default: {
this.currentLanguage = 'eng';
break;
}
}
//alert(this.currentLanguage);
//alert(window.navigator.language);
},
fillText(lang) {
if(lang === 'pl') {
document.getElementById('few-words-about-me-header').innerHTML = text.PL.aboutHeading;
alert('inserted pl');
}
if(lang === 'eng') {
document.getElementById('few-words-about-me-header').innerHTML = text.ENG.aboutHeading;
alert('inserted eng');
}
},
};
translator.checkLanguage();
translator.fillText(translator.currentLanguage);
document.getElementById('polish-flag').addEventListener('click', () => {
translator.fillText('pl');
});
document.getElementById('english-flag').addEventListener('click', () => {
translator.fillText('eng');
});
通常一切都按预期工作,我唯一担心的是我这里有两个全局变量,我不确定该怎么做。我觉得我可以用更高效、更漂亮的方式来完成这个翻译。
所以问题是 - 拥有这两个全局变量是否可以,我是否可以以更漂亮的方式实现与上述代码相同的效果?
【问题讨论】:
-
好吧,如果您要使用某种翻译脚本,那么您将不可避免地使用全局变量。减少你拥有的数量是很好的,但它们为零也并不总是可行的。话虽如此,如果您使脚本在页面加载时仅运行一次,则可以避免这种情况。不过,我可能不会担心。你最好去图书馆寻找像i18next这样的翻译,这样你就不必重新发明轮子了。