Определение и применение текущего языка системы в приложении HTML 5 на Android

1

Я работаю над 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

Теги:
cordova
backbone.js

2 ответа

10
Лучший ответ

Попробуйте выбрать язык из строки пользовательского агента со следующим патчем, он должен работать:

    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);
  • 0
    Удивительно, что сделал свое дело. Спасибо :)
  • 0
    @BigO Можете ли вы принять ответ, если он сработал для вас?
Показать ещё 1 комментарий
1

Выбранный ответ, похоже, не работает с проектом Cordova-Crosswalk. На самом деле с Moto G2 и Cordova-Crosswalk в возвращается "99", потому что userAgent выглядит так:

Изображение 174551

Я бы рекомендовал использовать плагин Cordova Globalization или создать собственный простой плагин с Java-методом: Locale locale = Locale.getDefault();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню