Я работаю над HTML5-приложением, которое использует PhoneGap и Backbone JS.
Проблема в том, что язык изменился на Android-устройстве, поскольку настройки не попадают в мое приложение HTML 5, хотя я вижу, как он изменяется в независимом экземпляре браузера.
Чтобы поддерживать глобализацию приложения, я использую плагин i18n для выбора текущего языка для приложения. Мое приложение отлично работает с iOS. Однако, когда я пытаюсь это сделать на Android, язык, выбранный пользователем, не отображается. Например, если я выбираю французский язык как свой язык из системного параметра и пытаюсь понять, что является значением window.navigator.language, оно остается en как против fr, это отлично отражается на iOS. Только для вашей информации, как рекомендовано PhoneGap, на Android я звоню
'public class myApp extends DroidGap {
private String pageURl = "somepath";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl(pageUrl); // this will load my app main html page.
}
}'
Может кто-нибудь, пожалуйста, помогите мне разобраться, в чем проблема?
Спасибо большое O
Попробуйте выбрать язык из строки пользовательского агента со следующим патчем, он должен работать:
var lang;
if (navigator
&& navigator.userAgent
&& (lang = navigator.userAgent
.match(/android.*\W(\w\w)-(\w\w)\W/i))) {
lang = lang[1];
}
if (!lang && navigator) {
if (navigator.language) {
lang = navigator.language;
} else if (navigator.browserLanguage) {
lang = navigator.browserLanguage;
} else if (navigator.systemLanguage) {
lang = navigator.systemLanguage;
} else if (navigator.userLanguage) {
lang = navigator.userLanguage;
}
lang = lang.substr(0, 2);
}
console.log("current language is", lang);
Выбранный ответ, похоже, не работает с проектом Cordova-Crosswalk. На самом деле с Moto G2 и Cordova-Crosswalk в возвращается "99", потому что userAgent выглядит так:
Я бы рекомендовал использовать плагин Cordova Globalization или создать собственный простой плагин с Java-методом: Locale locale = Locale.getDefault();