根据浏览器语言重定向

时间:2019-01-17 22:03:47

标签: javascript jquery html html5

嗨,我有一个简单的应用,用户可以在英语和波兰语之间选择要在我的应用中使用的语言。

当用户打开我的网站时,这是我想要的行为:

  • 如果浏览器语言=英语,则切换到波兰语。
  • 如果浏览器语言=波兰语,则不执行任何操作。
  • 假设波兰语为默认语言。

因为它是一个非常简单的应用程序,所以我使用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>

很遗憾,我的解决方案无法正常工作。我的代码有什么问题?

3 个答案:

答案 0 :(得分:1)

  • userLang返回en-GB,因此语言是两个小写字符,而国家/地区则是两个大写字符,因此if语句应该是if(userLang == 'pl-PL')而不是if(userLang == 'pl-pl')总是以您的方式返回false

  • 但是您只需要正确的语言吗?您可以尝试使用此..并始终以两个小写字符使用该语言。.无需使用pl-plen-GB,可以使用plen

//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-plValentine,而en-gbvalentine。但是您的key="valentine"pl-pl中查找不存在的后者。

将它们都小写。

var arrLang = {
  "pl-pl": {
    "valentine": "Do Walentynek zostało już tylko",
  },
  "en-gb": {
    "valentine": "Remaining days to Valentines!",
  }
}