Uzyskaj aktualny język dzięki tłumaczeniu kątowemu

86

Czy jest sposób na pobranie aktualnie używanego języka w kontrolerze (bez $translateProvider)?

Nie udało się znaleźć niczego w $translateserwisie.

jviotti
źródło
1
Jeśli z jakiegoś zapomnianego powodu musisz użyć go bezpośrednio w widoku, nieco globalnie, prawdopodobnie metodą najmniejszego wysiłku jest zdefiniowanie kodu języka u dostawcy tłumaczenia (tj. W rzeczywistym pliku tłumaczenia), np. { "LANG_CODE": "en" }I użycie translatefiltru w widok jak zwykle, na przykład:<video controls poster="img/poster-{{ 'LANG_CODE' | translate }}.png"> […] </video>
Jari Keinänen
Dlaczego nie użyć $ window.navigator
Aleksandr Golovatyi

Odpowiedzi:

155

$translate.use() jest geterem i ustawiaczem.

Zobacz to demo znalezione w linkach do dokumentów:

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

charlietfl
źródło
Czy powinienem używać tej usługi tylko dla tej jednej funkcji, aby uzyskać aktualny język przeglądarki? nawet jeśli nie planuję robić tłumaczeń
ses
5
To nie dało mi obecnego języka, ale domyślny. $ translate.proposedLanguage () dał mi aktualnie używany język w kontrolerze zgodnie z pytaniem
Joan-Diego Rodriguez
41

$translate.use()jest droga do zrobienia. Ponadto, gdy wykonywany jest program ładujący asynchroniczny, możesz chcieć użyć, $translate.proposedLanguage()który zwraca klucz języka, który jest aktualnie załadowany, ale nie został jeszcze załadowany.

Pascal Precht
źródło
2
Próbowałem określić język przed załadowaniem tłumaczeń, ale $translate.use()nie został ustawiony. $translate.proposedLanguage()dał mi właściwy język.
ncabral
3
Czy można tego użyć $translate.proposedLanguage()w app.config? mam tylko $ translateProvider i muszę znaleźć wynik tej funkcji w config, a nie później w kontrolerze. Masz pomysł ?
Wielkie
2
+ zaproposedLanguage()
Herr Derb
38

Podczas korzystania z angular-translate-loader-static-files zauważyłem, że $translate.proposedLanguage()powracało to undefinedpodczas używania domyślnego języka, podczas gdy $translate.use()zawsze zwracało proponowany język.

Dlatego naprawiłem to za pomocą:

var currentLang = $translate.proposedLanguage() || $translate.use();
Joan-Diego Rodriguez
źródło
3
To jedyny sposób, w jaki mogę uzyskać aktualny język we wszystkich sytuacjach.
Samuli Pahaoja
8

$translate.use()wydaje się nie działać przy początkowym załadowaniu aplikacji, aby pobrać ostatnio wybrany język z pamięci: $translate.storage().get( $translate.storageKey() ) lub po prostu $translate.proposedLanguage();

xac
źródło
8

$translateUsługa ma metodę zwaną preferredLanguage()że zwrot tego, co chcesz. Zwrotem tej funkcji jest ciąg języka, np. „En”.

Tutaj napisałem ci przykład:

angular.module('traslateApp').controller('myController', ['$scope', '$translate', function($scope,$translate){
   $scope.changeLanguage = function (langKey) {
      $translate.use(langKey);
   };
   $scope.getCurrentLanguage = function () {
       $translate.preferredLanguage();
   };
}])
Iran Reyes
źródło
2
W ten sposób otrzymasz „preferowany” język, a nie koniecznie „bieżący” wybrany język. Jeśli przełączasz się między językami, rozumiem, że nie działa to podobnie.
arcseldon
2
var currentLanguage = $ translate.use (); nie włącza zmian, zgodnie z odpowiedzią charlietfl
arcseldon
1

translate.currentLang służy do sprawdzania aktualnie wybranego języka w i18n

Jacek
źródło
0

Myślę, że to lepszy sposób na określenie języka -

$window.navigator.language || $window.navigator.userLanguage
Aleksandr Golovatyi
źródło
0

Może nie jest powiązany, ale może być przydatny. W angular2 + sposobem na dostęp do aktualnego języka jest

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

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

  ngOnInit() {
   translate.use('it');
   const currentLang = this.translate.currentLang;
  }
 }
Emanuele Fricano
źródło