Отримайте поточну мову за допомогою 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.