Obtenha o idioma atual com o angular-translate

86

Existe uma maneira de obter o idioma usado atualmente em um controlador (sem $translateProvider)?

Não foi possível encontrar nada no $translateserviço.

jviotti
fonte
1
Se por alguma razão esquecida você precisa usá-lo diretamente na visão um tanto globalmente, provavelmente o método de menor esforço é definir o código do idioma em seu provedor de tradução (ou seja, no arquivo de tradução real), por exemplo, { "LANG_CODE": "en" }e usar o translatefiltro no veja como de costume, como:<video controls poster="img/poster-{{ 'LANG_CODE' | translate }}.png"> […] </video>
Jari Keinänen
Por que não usar $
window.navigator

Respostas:

155

$translate.use() é um getter e setter.

Veja esta demonstração encontrada nos links dos documentos:

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

charlietfl
fonte
Devo usar este serviço apenas para aquele único recurso para obter o idioma atual do navegador? mesmo que eu não esteja planejando fazer traduções
veja
5
Isso não me deu o idioma atual, mas o padrão. $ translate.proposedLanguage () me deu o idioma usado atualmente em um controlador de acordo com a pergunta
Joan-Diego Rodriguez
41

$translate.use()é o caminho a percorrer. Além disso, quando um carregador assíncrono é executado, você pode querer usar o $translate.proposedLanguage()que retorna a chave de idioma do idioma que está carregado atualmente, mas ainda não terminou de carregar.

Pascal Precht
fonte
2
Eu estava tentando determinar o idioma antes de as traduções serem carregadas, mas $translate.use()não foram definidas. $translate.proposedLanguage()me deu o idioma correto.
ncabral
3
É possível usar isso $translate.proposedLanguage()em app.config? eu só tenho $ translateProvider e preciso encontrar o resultado dessa função IN config, não mais tarde no controlador. Você tem alguma ideia ? Muito obrigado
maxime1992
2
+ paraproposedLanguage()
Herr Derb
38

Ao usar angular-translate-loader-static-files, percebi que $translate.proposedLanguage()retornava undefinedao usar o idioma padrão, mas $translate.use()sempre retornava o idioma proposto.

Portanto, eu corrigi usando:

var currentLang = $translate.proposedLanguage() || $translate.use();
Joan-Diego Rodriguez
fonte
3
Esta é a única maneira de obter o idioma atual em todas as situações.
Samuli Pahaoja
8

$translate.use()parece não funcionar no carregamento inicial do aplicativo, para obter o último idioma selecionado do armazenamento: $translate.storage().get( $translate.storageKey() ) ou apenas $translate.proposedLanguage();

xac
fonte
8

O $translateserviço possui um método chamado preferredLanguage()que retorna o que você deseja. O retorno desta função é a string da linguagem, como 'en'.

Aqui, eu escrevi um exemplo para você:

angular.module('traslateApp').controller('myController', ['$scope', '$translate', function($scope,$translate){
   $scope.changeLanguage = function (langKey) {
      $translate.use(langKey);
   };
   $scope.getCurrentLanguage = function () {
       $translate.preferredLanguage();
   };
}])
Iran Reyes
fonte
2
Isso lhe daria o idioma "preferido", não necessariamente o idioma "atual" selecionado. Se você alternar entre os idiomas, meu entendimento é que isso não acontece da mesma forma.
arcseldon
2
var currentLanguage = $ translate.use (); liga a mudança, de acordo com a resposta de charlietfl
arcseldon
1

translate.currentLang é usado para verificar o idioma selecionado atualmente em i18n

Jack
fonte
0

Acho que esta é a melhor maneira de determinar o idioma -

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

Talvez não esteja relacionado, mas pode ser útil. No angular2 + a forma de acessar o idioma atual é

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