Я занимаюсь разработкой приложения Cordova-AngularJS.
Я выбрал следующий простой подход.
Воспользуйтесь услугой, чтобы сделать актуальный перевод:
angular.module('App.services.Localization', [])
.factory('__', ['$window', function(window){
var lang = navigator.language.split('-')[0];
console.log('lang: ' + lang);
//default language
var default_language = 'de';
return function(string) {
var lang_json = window['__' + lang];
var loc_str = "";
if(lang_json === undefined){
//use default lang
loc_str = window["__" + default_language][string];
}else{
loc_str = window["__" + lang][string];
}
return loc_str;
};
}]);
Я включил JSON-объект в глобальную область окна для каждого языка, который я поддерживаю в своем приложении. Например:
var __de = {
'Speisekarte' : 'Speisekarte',
'Löschen' : 'Löschen'
}
и
var __en = {
'Speisekarte' : 'Menu',
'Löschen' : 'Delete'
}
Вы можете легко использовать один JS-файл на язык для хранения соответствующих JSON-объектов.
Таким образом, сервис может получить доступ к объектам, таким как
window['__' + lang]
и вернуть переведенную строку.
Теперь все, что нужно сделать, это внедрить Сервис и его метод -getString в каждый контроллер, который нуждается в локализации статических строк. Вы также должны сделать ссылку на локальную область видимости var, чтобы использовать локализацию в Template-Files.
Строки, которые установлены внутри контроллера, и строки в файлах-шаблонах переводятся через
__("stringToBeTranslated");
Вот пример контроллера:
angular.module('App.controllers.Menu', [
'App.services.Localization'
])
.controller('MenuController', ['$scope', '__', function(scope, __) {
//...
//pass the Localization service __(string)-Method to the local scope to be used in Template-Files
scope.__ = __;
//...
}]);