Obtenez la langue actuelle avec angular-translate

86

Existe-t-il un moyen d'obtenir la langue actuellement utilisée dans un contrôleur (sans $translateProvider)?

Je n'ai rien trouvé dans le $translateservice.

jviotti
la source
1
Si, pour une raison quelconque, vous devez l'utiliser directement dans la vue un peu globalement, la méthode la moins efficace consiste probablement à définir le code de langue dans votre fournisseur de traduction (c'est-à-dire dans le fichier de traduction réel), par exemple { "LANG_CODE": "en" }et à utiliser le translatefiltre dans le voir comme d'habitude, comme:<video controls poster="img/poster-{{ 'LANG_CODE' | translate }}.png"> […] </video>
Jari Keinänen
Pourquoi ne pas utiliser $ window.navigator
Aleksandr Golovatyi

Réponses:

155

$translate.use() est un getter et un setter.

Voir cette démo trouvée dans les liens des documents:

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

charlietfl
la source
Dois-je utiliser ce service uniquement pour cette seule fonctionnalité afin d'obtenir la langue actuelle du navigateur? même si je ne prévois pas de faire des traductions
ses
5
Cela ne m'a pas donné la langue actuelle mais celle par défaut. $ translate.proposedLanguage () m'a donné la langue actuellement utilisée dans un contrôleur selon la question
Joan-Diego Rodriguez
41

$translate.use()est la voie à suivre. De plus, lorsqu'un chargeur asynchrone est exécuté, vous pouvez utiliser $translate.proposedLanguage()qui renvoie la clé de langue de la langue actuellement chargée mais pas encore chargée.

Pascal Precht
la source
2
J'essayais de déterminer la langue avant le chargement des traductions mais je n'ai $translate.use()pas été définie. $translate.proposedLanguage()m'a donné la langue correcte.
ncabral
3
Est-il possible de l'utiliser $translate.proposedLanguage()dans app.config? Je n'ai que $ translateProvider et je dois trouver le résultat de cette fonction dans la configuration, pas plus tard dans le contrôleur. Avez-vous une idée ? Merci beaucoup
maxime1992
2
+ pourproposedLanguage()
Herr Derb
38

Lors de l'utilisation de angular-translate-loader-static-files, j'ai remarqué que $translate.proposedLanguage()renvoyé undefinedlors de l'utilisation de la langue par défaut tout $translate.use()en retournant toujours la langue proposée.

Par conséquent, je l'ai corrigé en utilisant:

var currentLang = $translate.proposedLanguage() || $translate.use();
Joan-Diego Rodriguez
la source
3
C'est la seule façon pour moi d'obtenir la langue actuelle dans toutes les situations.
Samuli Pahaoja
8

$translate.use()semble ne pas fonctionner lors du chargement initial de l'application, pour obtenir la dernière langue sélectionnée à partir du stockage: $translate.storage().get( $translate.storageKey() ) ou tout simplement $translate.proposedLanguage();

xac
la source
8

Le $translateservice a une méthode appelée preferredLanguage()qui renvoie ce que vous voulez. Le retour de cette fonction est la chaîne de la langue, comme «en».

Ici, je vous ai écrit un exemple:

angular.module('traslateApp').controller('myController', ['$scope', '$translate', function($scope,$translate){
   $scope.changeLanguage = function (langKey) {
      $translate.use(langKey);
   };
   $scope.getCurrentLanguage = function () {
       $translate.preferredLanguage();
   };
}])
Iran Reyes
la source
2
Cela vous donnerait la langue "préférée", pas nécessairement la langue "actuelle" sélectionnée. Si vous changez de langue, je crois comprendre que ce n’est pas le cas.
arcseldon
2
var currentLanguage = $ translate.use (); allume le changement, selon la réponse de charlietfl
arcseldon
1

translate.currentLang est utilisé pour vérifier la langue actuellement sélectionnée dans i18n

Jack
la source
0

Je pense que c'est la meilleure façon de déterminer la langue -

$window.navigator.language || $window.navigator.userLanguage
Aleksandr Golovatyi
la source
0

Peut-être n'est pas lié mais pourrait être utile. Dans angular2 +, le moyen d'accéder à la langue courante est

...
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
la source