2015-06-05 2 views
0

Я использую angular-translate для отображения разных языков в своем приложении, но получаю сообщение об ошибке при попытке обновить данные перевода после успешного входа в систему или через другие вызовы веб-сервисов.

Примечание: я успешно вызываю $translateProvider.useLoader в моем «app.config» для установки данных перевода по умолчанию. Но мне нужно динамически обновлять эти данные в приложении после любого вызова веб-службы, поскольку данные языка зависят от зарегистрированной организации пользователя (или могут быть изменены в любое время).

Это код, который я пытался что дает мне $translateProvider ошибку без ссылок:

var ctrl = angular.module('app.ctrls', ['pascalprecht.translate']); 

ctrl.controller('LoginCtrl', ['$translate' 
          ,'$translateProvider' // << error! 
        , function($translate 
          , $translateProvider) { 
    ... 
    // call web service to refresh "translations" in $translateProvider 
}]); 

FYI, приложение представляет собой мобильное приложение с использованием структуры Ionic, которая основана на angularjs.

+0

Мое решение теперь заключается в том, чтобы сохранить любой загруженный файл LanguageData в локальном хранилище, а затем прочитать его, если он доступен, когда фаза конфигурации снова запускается. Проблема с этим обходным путем заключается в том, что пользователю необходимо убить или выйти из приложения на своем мобильном телефоне, чтобы фаза конфигурации была выполнена снова. В идеале я хотел бы, чтобы новые данные вступили в силу немедленно (или, по крайней мере, без необходимости убивать приложение). –

+0

SOLVED - в соответствии с ответом JB Nizet. Я призываю $ translate.refresh() всякий раз, когда вызов веб-службы возвращает индикатор, чтобы сказать, что данные языка изменились. Это вызывает $ translateProvider.useLoader(), который я установил в своем «app.config», что является удовлетворительным решением. Первоначально я пытался установить данные на основе полезной нагрузки из * любого * вызова веб-службы (если таковой был), но это сохраняет чистоту и простоту. –

ответ

0

Провайдеры могут использоваться только на этапе конфигурации. После запуска приложения доступны только сервисы (созданные поставщиками).

Но служба $translate имеет метод refresh().

+0

Спасибо JB Nizet, я так понял. Итак, как мне загрузить загруженный файл languageData JSON в $ translate, прежде чем применять refresh()? –

+0

Вы прочитали документацию refresh()? Что он говорит? В нем говорится, что он использует загрузчик для загрузки новых таблиц перевода. Погрузчики описывают ее: https://angular-translate.github.io/docs/#/guide/12_asynchronous-loading и пользовательские загрузчики (если они вам нужны) здесь: https://angular-translate.github.io/docs/#/guide/13_custom-loaders –

+0

Вы абсолютно правы JB Nizet! Я просто добавил вызов «$ translate.refresh()» в соответствующий момент после любого вызова веб-службы (например, после входа в систему или когда служба возвращает флаг, указывающий на новое обновление языка). Я прочитал эту документацию, но, похоже, это больше касается частичной загрузки данных и нескольких языков. После долгого дня я пропустил лес за деревьями. –

Смежные вопросы