嗨,我有一个简单的应用,用户可以在英语和波兰语之间选择要在我的应用中使用的语言。
当用户打开我的网站时,这是我想要的行为:
因为它是一个非常简单的应用程序,所以我使用jQuery进行翻译。
到目前为止,以下是我的解决方法:
JSFIDDLE:demo
//redirect
$(document).ready(function() {
var userLang = navigator.language || navigator.userLanguage;
if (userLang == "pl-pl") {
break;
} else {
userLang = "eng-gb"
}
}
});
// translation
// The default language is Polish
var lang = "pl-pl";
// Check for localStorage support
if ('localStorage' in window) {
var usrLang = localStorage.getItem('uiLang');
if (usrLang) {
lang = usrLang
}
}
var arrLang = {
"pl-pl": {
"Valentine": "Do Walentynek zostało już tylko",
},
"en-gb": {
"valentine": "Remaining days to Valentines!",
}
}
$(document).ready(function() {
$(".lang").each(function(index, element) {
$(this).text(arrLang[lang][$(this).attr("key")]);
});
$(".lang").each(function(index, element) {
$(this).text(arrLang[lang][$(this).attr("key")]);
});
// get/set the selected language
$(".translate").click(function() {
var lang = $(this).attr("id");
// update localStorage key
if ('localStorage' in window) {
localStorage.setItem('uiLang', lang);
}
$(".lang").each(function(index, element) {
$(this).text(arrLang[lang][$(this).attr("key")]);
});
});
});
<div class="translate">
<ul class="language">
<li class="eng translate" id="en-gb">EN</li>
<li class="pl translate" id="pl-pl">PL</li>
</ul>
</div>
<div class="rss-feed">
<p class="lang" key="valentine">Do Walentynek zostało już tylko
</p>
<span id="mybenfit-timer" class="lang" key="days">
</span>
</div>
很遗憾,我的解决方案无法正常工作。我的代码有什么问题?
答案 0 :(得分:1)
userLang
返回en-GB
,因此语言是两个小写字符,而国家/地区则是两个大写字符,因此if语句应该是if(userLang == 'pl-PL')
而不是if(userLang == 'pl-pl')
总是以您的方式返回false
但是您只需要正确的语言吗?您可以尝试使用此..并始终以两个小写字符使用该语言。.无需使用pl-pl
或en-GB
,可以使用pl
或en
//redirect
$(document).ready(function() {
var userLang = navigator.language || navigator.userLanguage;
console.log(userLang);
var userLang = userLang.split('-')[0];
console.log(userLang);
var userLang = (userLang !== "pl")? 'en' : 'pl';
console.log(userLang);
var arrLang = {
"pl": {
"Valentine": "Do Walentynek zostało już tylko",
},
"en": {
"valentine": "Remaining days to Valentines!",
}
}
console.log(arrLang[userLang].valentine);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
答案 1 :(得分:1)
尝试以下操作,希望对您有帮助
$(document).ready(function() {
// translation
// The default language is English
var userLang = navigator.language || navigator.userLanguage;
var lang = "pl-pl";
// If Browser Language == English then switch to the Polish language.
// since there en-GB en-US ...
if(userLang.split('-')[0] == 'en'){
lang = "pl-pl";
}
// Check for localStorage support
if('localStorage' in window){
var usrLang = localStorage.getItem('uiLang');
if( typeof(usrLang) === 'string' && usrLang !== 'undefined') {
lang = usrLang
}
}
var arrLang = {
"pl-pl": {
"valentine": "Do Walentynek zostało już tylko",
"days": " 10 dni"
},
"en-gb": {
"valentine": "Remaining days to Valentines!",
"days": " 10 days"
}
}
$(".lang").each(function(index, element) {
$(this).text(arrLang[lang][$(this).attr("key")]);
});
// get/set the selected language
$(".translate").click(function(e) {
e.stopPropagation();
var lang = $(this).attr("id");
// update localStorage key
if('localStorage' in window){
localStorage.setItem('uiLang', lang);
}
$(".lang").each(function(index, element) {
$(this).text(arrLang[lang][$(this).attr("key")]);
});
});
});
答案 2 :(得分:0)
属性名称区分大小写。
您在arrLang
中用波兰语表示的财产名称不同于英语。 pl-pl
是Valentine
,而en-gb
是valentine
。但是您的key="valentine"
在pl-pl
中查找不存在的后者。
将它们都小写。
var arrLang = {
"pl-pl": {
"valentine": "Do Walentynek zostało już tylko",
},
"en-gb": {
"valentine": "Remaining days to Valentines!",
}
}