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


86

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

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


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/


Должен ли я использовать эту службу только для этой единственной функции, чтобы получить текущий язык браузера? даже если я не планирую делать переводы
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();


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

Может быть, не связано, но может быть полезно. В 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;
  }
 }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.