Я пытаюсь использовать i18next , который работает нормально для большинства виджетов после последнего выпуска (что позволяет установить цель, по которой должен идти текст).
Однако я все еще не знаю, как перевести динамически сгенерированные вещи, такие как всплывающая таблица.
Кроме того, он работает очень хорошо.
Вот как это сделать:
lang : function (page) {
var update_language,
translate = function (page) {
page.find('.t').i18n();
},
set_lang = function (language) {
var set_icon;
switch (language) {
case "de-DE":
set_icon = "DE";
break;
case "fr-FR":
set_icon = "FR";
break;
default:
set_icon = "EN";
break;
}
$(".setIcon").parent(".ui-btn").find(".ui-icon")
.removeClass().addClass('ui-icon ui-shadow ui-icon-lang '+set_icon);
}
if (fauna.i18set === undefined) {
i18n.init({
lng: 'en-EN',
load: 'current',
detectLngQS: 'lang',
fallbackLng: false,
resGetPath: '../lang/__lng__/__ns__.json',
ns: 'gen',
debug: true,
// , useLocalStorage: true
// , localStorageExpirationTime: 86400000 // in ms, default 1 week
}, function () {
translate(page);
set_lang(i18n.lng());
});
fauna.i18set = true;
} else {
update_language = $.mobile.path.parseUrl( window.location.href )
.hash.replace( /.*lang=/, "" );
if (update_language !== "") {
i18n.setLng(update_language, function() {
translate(page);
set_lang(i18n.lng());
});
} else {
translate(page);
}
}
}
Поэтому я использую класс .t
для маркировки элементов для перевода (класс поиска работает быстрее, чем атрибуты данных).
Я звоню по вышеупомянутому на pagebeforeshow
, который также, кажется, справляется со всем хорошо.
Sidenote: только что заметил, что update_language
не будет работать, если pushstate отключен. Для этого нужно лучшее регулярное выражение.