Holen Sie sich die aktuelle Sprache mit Angular-Translate

85

Gibt es eine Möglichkeit, die aktuell verwendete Sprache in einem Controller (ohne $translateProvider) abzurufen?

Konnte nichts im $translateService finden.

jviotti
quelle
1
Wenn Sie es aus irgendeinem gottverlassenen Grund direkt in der Ansicht etwas global verwenden müssen, besteht die Methode mit dem geringsten Aufwand wahrscheinlich darin, den Sprachcode in Ihrem Übersetzungsanbieter (dh in der eigentlichen Übersetzungsdatei) zu definieren, z. B. { "LANG_CODE": "en" }den translateFilter in der Ansicht wie gewohnt, wie:<video controls poster="img/poster-{{ 'LANG_CODE' | translate }}.png"> […] </video>
Jari Keinänen
Warum nicht $ window.navigator
Aleksandr Golovatyi

Antworten:

155

$translate.use() ist ein Getter und Setter.

Diese Demo finden Sie in den Links der Dokumente:

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

charlietfl
quelle
Sollte ich diesen Dienst nur für diese einzelne Funktion verwenden, um die aktuelle Browsersprache zu erhalten? auch wenn ich nicht vorhabe Übersetzungen zu machen
ses
5
Dies gab mir nicht die aktuelle Sprache, sondern die Standardsprache. $ translate.proposedLanguage () gab mir die aktuell verwendete Sprache in einem Controller gemäß der Frage
Joan-Diego Rodriguez
41

$translate.use()ist der Weg zu gehen. Wenn ein asynchroner Loader ausgeführt wird, möchten Sie möglicherweise $translate.proposedLanguage()den Sprachschlüssel der Sprache zurückgeben, die gerade geladen, aber noch nicht vollständig geladen ist.

Pascal Precht
quelle
2
Ich habe versucht, die Sprache zu bestimmen, bevor die Übersetzungen geladen wurden, $translate.use()war aber nicht festgelegt. $translate.proposedLanguage()gab mir die richtige lang.
Ncabral
3
Ist es möglich, dies $translate.proposedLanguage()in app.config zu verwenden? Ich habe nur $ translateProvider und ich muss das Ergebnis dieser Funktion IN config finden, nicht später in Controller. Haben sie eine Idee ? Vielen Dank
maxime1992
2
+ fürproposedLanguage()
Herr Derb
37

Bei der Verwendung von Winkeln übersetzen-loader-static-Dateien , die ich habe bemerkt , dass $translate.proposedLanguage()zurückgegeben , undefinedwenn die Standardsprache verwenden , während $translate.use()immer die vorgeschlagene Sprache zurückgegeben.

Deshalb habe ich es behoben mit:

var currentLang = $translate.proposedLanguage() || $translate.use();
Joan-Diego Rodriguez
quelle
3
Nur so kann ich in allen Situationen die aktuelle Sprache abrufen.
Samuli Pahaoja
8

$translate.use()scheint beim ersten Laden der App nicht zu funktionieren, um die zuletzt ausgewählte Sprache aus dem Speicher zu holen: $translate.storage().get( $translate.storageKey() ) oder einfach $translate.proposedLanguage();

xac
quelle
8

Der $translateDienst hat eine Methode namenspreferredLanguage() , die zurückgibt, was Sie wollen. Die Rückgabe dieser Funktion ist die Zeichenfolge der Sprache wie 'en'.

Hier habe ich dir ein Beispiel geschrieben:

angular.module('traslateApp').controller('myController', ['$scope', '$translate', function($scope,$translate){
   $scope.changeLanguage = function (langKey) {
      $translate.use(langKey);
   };
   $scope.getCurrentLanguage = function () {
       $translate.preferredLanguage();
   };
}])
Iran Reyes
quelle
2
Dies würde Ihnen die "bevorzugte" Sprache geben, nicht unbedingt die "aktuelle" ausgewählte Sprache. Wenn Sie zwischen den Sprachen wechseln, ist dies meines Erachtens nicht der Fall.
Arcseldon
2
var currentLanguage = $ translate.use (); schaltet Änderung ein, gemäß Antwort von charlietfl
arcseldon
1

translate.currentLang wird verwendet, um die aktuell ausgewählte Sprache in i18n zu überprüfen

Jack
quelle
0

Ich denke, dies ist der bessere Weg, um die Sprache zu bestimmen -

$window.navigator.language || $window.navigator.userLanguage
Aleksandr Golovatyi
quelle
0

Vielleicht ist nicht verwandt, könnte aber nützlich sein. In angle2 + ist der Weg zum Zugriff auf die aktuelle Sprache

...
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
quelle