Получите текущий язык с помощью angular-translate

86

Есть ли способ получить текущий используемый язык в контроллере (без $translateProvider)?

В $translateсервисе ничего не нашел .

Jviotti
источник
1
Если по какой-то богом забытой причине вам нужно использовать его прямо в представлении несколько глобально, вероятно, метод наименьших усилий - определить код языка в вашем провайдере перевода (т.е. в фактическом файле перевода), например, { "LANG_CODE": "en" }и использовать translateфильтр вид как обычно, например:<video controls poster="img/poster-{{ 'LANG_CODE' | translate }}.png"> […] </video>
Яри ​​Кейнянен
Почему бы не использовать $ window.navigator
Александр Головатый

Ответы:

155

$translate.use() является геттером и сеттером.

См. Эту демонстрацию в ссылках на документы:

http://jsfiddle.net/PascalPrecht/eUGWJ/7/

Charlietfl
источник
Должен ли я использовать эту службу только для этой единственной функции, чтобы получить текущий язык браузера? даже если я не планирую делать переводы
ses
5
Это дало мне не текущий язык, а язык по умолчанию. $ translate.proposedLanguage () предоставил мне текущий используемый язык в контроллере в соответствии с вопросом
Джоан-Диего Родригес
41

$translate.use()это путь. Кроме того, когда выполняется асинхронный загрузчик, вы можете использовать, $translate.proposedLanguage()который возвращает ключ языка для языка, который в настоящее время загружен, но еще не завершен.

Паскаль Прехт
источник
2
Я пытался определить язык до загрузки переводов, но $translate.use()не установил. $translate.proposedLanguage()дал мне правильный язык.
ncabral
3
Можно ли использовать это $translate.proposedLanguage()в app.config? У меня есть только $ translateProvider, и мне нужно найти результат этой функции В конфигурации, а не позже в контроллере. У тебя есть идея? Большое спасибо
maxime1992
2
+ дляproposedLanguage()
Herr Derb
38

При использовании angular-translate-loader-static-files я заметил, что он $translate.proposedLanguage()возвращается undefinedпри использовании языка по умолчанию, в то время как $translate.use()всегда возвращается предлагаемый язык.

Поэтому я исправил это, используя:

var currentLang = $translate.proposedLanguage() || $translate.use();
Жоан-Диего Родригес
источник
3
Это единственный способ получить текущий язык во всех ситуациях.
Самули Пахаоджа
8

$translate.use()похоже, не работает при начальной загрузке приложения, чтобы получить последний выбранный язык из хранилища: $translate.storage().get( $translate.storageKey() ) или просто $translate.proposedLanguage();

xac
источник
8

У $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();
   };
}])
Иран Рейес
источник
2
Это даст вам «предпочтительный» язык, не обязательно выбранный «текущий». Если вы переключаетесь между языками, я понимаю, что это не так.
arcseldon
2
var currentLanguage = $ translate.use (); включает изменения, согласно ответу charlietfl
arcseldon
1

translate.currentLang используется для проверки текущего выбранного языка в i18n

Джек
источник
0

Я думаю, что это лучший способ определить язык -

$window.navigator.language || $window.navigator.userLanguage
Александр Головатый
источник
0

Может быть, не связано, но может быть полезно. В angular2 + способ доступа к текущему языку

...
import { TranslateService } from '@ngx-translate/core';

export class MyComponent implements OnInit {
  constructor(private translate: TranslateService) {}

  ngOnInit() {
   translate.use('it');
   const currentLang = this.translate.currentLang;
  }
 }
Эмануэле Фрикано
источник