Как лучше всего организовать строки перевода в angular-translate?
Я использую angular-translate на довольно большом угловом проекте. Я разбиваю проект на несколько модулей, чтобы сделать его более управляемым, но я не могу разбить строки перевода на модуль.
например, у меня есть модули A и B, где B-подмодуль A. есть строки, относящиеся к HTML, покрытому модулем A, которые помещаются в '/json/localization/A/en.формат JSON'. Аналогично, есть строки, относящиеся к B, которые я помещаю в '/JSON / локализация / B / en.формат JSON'. Сначала я загружаю Б Ан.json в модуле B с использованием углового-translationprovider $translation. Затем я загружаю модуль a en.json, также используя $translationProvider. Проблема в том, что загрузка строк A переопределяет строки B, и они теряются.
используя angular-translate, есть ли способ загрузить строки на модуль без переопределения или родительский модуль должен загрузить все строки из одного en.в JSON?
вот пример (в coffeescript) о том, как я загружаю строки перевода:
my_module.config(['$translateProvider', ($translateProvider) ->
$translateProvider.useStaticFilesLoader
prefix: '/json/localization/A/'
suffix: '.json'
$translateProvider.preferredLanguage 'en'
])
1 ответов
angular-translate поддерживает асинхронную загрузку частичных языковых файлов. Все партиалы объединяются в один словарь на каждый язык. Официальную документацию можно найти здесь: http://angular-translate.github.io/docs/#/guide/12_asynchronous-loading
он поддерживает применение шаблона для шаблонов url, которые указывают на модульные языковые файлы:
$translateProvider.useLoader('$translatePartialLoader', {
urlTemplate: '/i18n/{part}/{lang}.json'
});
из ваших контроллеров вы можете добавлять языковые модули и обновлять привязки данных вот так:
angular.module('contact')
.controller('ContactCtrl',
function ($scope, $translatePartialLoader, $translate) {
$translatePartialLoader.addPart('contact');
$translate.refresh();
});
конечно, загрузка частичных также может быть покрыта в фазе разрешения маршрута
кроме того, вы также можете посмотреть на создание собственной функции пользовательского загрузчика. http://angular-translate.github.io/docs/#/guide/13_custom-loaders
Это обеспечивает всю гибкость вам нужно совместить необходимые модули языка в одном съемке. Е. Г. вы могли бы сделать что-то вроде этого:
app.factory('customLoader', function ($http, $q) {
// return loaderFn
return function (options) {
var deferred = $q.defer();
var data = {
'TEXT': 'Fooooo'
};
$http.get('nls/moduleA/en.json').success(function(moduleA){
angular.extend(data, moduleA);
$http.get('nls/moduleB/en.json').success(function(moduleB){
angular.extend(data, moduleB);
deferred.resolve(data);
});
});
return deferred.promise;
};
});