Есть ли способ получить текущий используемый язык в контроллере (без $translateProvider
)?
Не удалось найти что-либо в службе $translate
.
Есть ли способ получить текущий используемый язык в контроллере (без $translateProvider
)?
Не удалось найти что-либо в службе $translate
.
$translate.use()
- это геттер и сеттер.
См. эту демонстрацию, найденную в ссылках документов:
$translate.use()
- путь. Кроме того, когда выполняется асинхронный загрузчик, вы можете использовать $translate.proposedLanguage()
, который возвращает языковой ключ для языка, который в настоящее время загружен, но еще не загружен.
При использовании angular -translate-loader-static-files я заметил, что $translate.proposedLanguage()
возвратил undefined
при использовании языка по умолчанию, в то время как $translate.use()
всегда возвращал предлагаемый язык.
Поэтому я исправил его, используя:
var currentLang = $translate.proposedLanguage() || $translate.use();
Служба $translate
имеет метод preferredLanguage()
, который возвращает то, что вы хотите. Возврат этой функции - это строка языка, например 'en'.
Здесь я написал вам пример:
angular.module('traslateApp').controller('myController', ['$scope', '$translate', function($scope,$translate){
$scope.changeLanguage = function (langKey) {
$translate.use(langKey);
};
$scope.getCurrentLanguage = function () {
$translate.preferredLanguage();
};
}])
$translate.use()
похоже, не работает при начальной загрузке приложения, чтобы получить последний выбранный язык из хранилища: $translate.storage().get( $translate.storageKey() )
или просто
$translate.proposedLanguage();
Я думаю, что это лучший способ определить язык -
$window.navigator.language || $window.navigator.userLanguage