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.


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/


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.


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();

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();


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();
   };
}])

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


0

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

$window.navigator.language || $window.navigator.userLanguage

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;
  }
 }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.