Ottieni la lingua corrente con la traduzione angolare


86

C'è un modo per ottenere la lingua attualmente utilizzata in un controller (senza $translateProvider)?

Impossibile trovare nulla nel $translateservizio.


1
Se per qualche motivo dimenticato da Dio è necessario usarlo direttamente nella vista un po 'globalmente, probabilmente il metodo con il minimo sforzo è definire il codice della lingua nel tuo fornitore di traduzione (cioè nel file di traduzione effettivo) ad es. { "LANG_CODE": "en" }E usare il translatefiltro nel visualizza come al solito, come:<video controls poster="img/poster-{{ 'LANG_CODE' | translate }}.png"> […] </video>
Jari Keinänen

Perché non usare $ window.navigator
Aleksandr Golovatyi

Risposte:


155

$translate.use() è un getter e setter.

Guarda questa demo trovata nei link dei documenti:

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


Devo usare questo servizio solo per quella singola funzione per ottenere la lingua corrente del browser? anche se non ho intenzione di fare traduzioni
ses

5
Questo non mi ha dato la lingua corrente ma quella predefinita. $ translate.proposedLanguage () mi ha fornito la lingua attualmente utilizzata in un controller come da domanda
Joan-Diego Rodriguez

41

$translate.use()è la strada da percorrere. Inoltre, quando viene eseguito un caricatore asincrono, potresti voler utilizzare $translate.proposedLanguage()che restituisce la chiave della lingua della lingua attualmente caricata ma non ancora caricata.


2
Stavo cercando di determinare la lingua prima che le traduzioni venissero caricate ma $translate.use()non era impostata. $translate.proposedLanguage()mi ha dato la lingua corretta.
ncabral

3
È possibile utilizzarlo $translate.proposedLanguage()in app.config? ho solo $ translateProvider e ho bisogno di trovare il risultato di questa funzione IN config, non più tardi nel controller. Hai un'idea ? Grazie mille
maxime1992

2
+ perproposedLanguage()
Herr Derb

38

Quando si utilizza angular-translate-loader-static-files ho notato che $translate.proposedLanguage()restituiva undefinedquando si utilizzava la lingua predefinita mentre $translate.use()restituiva sempre la lingua proposta.

Quindi l'ho risolto usando:

var currentLang = $translate.proposedLanguage() || $translate.use();

3
Questo è l'unico modo per ottenere la lingua corrente in tutte le situazioni.
Samuli Pahaoja

8

$translate.use()sembra non funzionare al caricamento iniziale dell'app, per ottenere l'ultima lingua selezionata dalla memoria: $translate.storage().get( $translate.storageKey() ) o semplicemente $translate.proposedLanguage();


8

Il $translateservizio ha un metodo chiamato preferredLanguage()che restituisce ciò che desideri. Il ritorno di questa funzione è la stringa della lingua, come "en".

Qui ti ho scritto un esempio:

angular.module('traslateApp').controller('myController', ['$scope', '$translate', function($scope,$translate){
   $scope.changeLanguage = function (langKey) {
      $translate.use(langKey);
   };
   $scope.getCurrentLanguage = function () {
       $translate.preferredLanguage();
   };
}])

2
Questo ti darebbe la lingua "preferita", non necessariamente la lingua "corrente" selezionata. Se passi da una lingua all'altra, la mia comprensione è che questo non fa lo stesso.
arcseldon

2
var currentLanguage = $ translate.use (); non attiva il cambiamento, come da risposta di charlietfl
arcseldon

1

translate.currentLang viene utilizzato per controllare la lingua attualmente selezionata in i18n


0

Penso che questo sia il modo migliore per determinare la lingua -

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

0

Forse non è correlato ma potrebbe essere utile. In angular2 + il modo per accedere alla lingua corrente è

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

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

  ngOnInit() {
   translate.use('it');
   const currentLang = this.translate.currentLang;
  }
 }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.