使用angular-translate获取当前语言


86

有没有办法在控制器中获取当前使用的语言(不带$translateProvider)?

$translate服务中找不到任何内容。


1
如果出于某种不可思议的原因,您需要在全局视图中直接使用它,则可能最省力的方法是在翻译提供程序中定义语言代码(即,在实际的翻译文件中),例如,{ "LANG_CODE": "en" }translate在像往常一样查看:<video controls poster="img/poster-{{ 'LANG_CODE' | translate }}.png"> […] </video>
JariKeinänen16年

为什么不使用$ window.navigator
Aleksandr Golovatyi

Answers:


155

$translate.use() 是一个吸气剂和二传手。

请参阅在文档链接中找到的此演示:

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


我是否应该仅将此功能用于单个功能以获取当前的浏览器语言?即使我不打算翻译
-ses

5
这不是给我当前的语言,而是给我默认的语言。$ translate.proposedLanguage()根据问题向我提供了控制器中当前使用的语言
Joan-Diego Rodriguez

41

$translate.use()是要走的路。同样,当执行异步加载程序时,您可能想使用$translate.proposedLanguage()它返回当前已加载但尚未完成加载的语言的语言键。


2
在尝试翻译之前,我试图确定语言,$translate.use()但未设置。$translate.proposedLanguage()给了我正确的语言
ncabral 2014年

3
是否可以$translate.proposedLanguage()在app.config中使用它?我只有$ translateProvider,我需要在config中找到此函数的结果,而不是稍后在控制器中。你有想法吗 ?非常感谢
maxime1992

2
+ forproposedLanguage()
Herr Derb

38

当我使用angular-translate-loader-static-files时,我注意到在使用默认语言的同时$translate.proposedLanguage()返回undefined$translate.use()总是返回所提出的语言。

因此,我使用以下方法修复了该问题:

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

3
这是我在所有情况下都能获得当前语言的唯一途径。
Samuli Pahaoja,2015年

8

$translate.use()似乎在应用程序的初始加载上不起作用,$translate.storage().get( $translate.storageKey() ) 或者从存储中获取最后选择的语言:或者 $translate.proposedLanguage();


8

$translate服务有一个称为preferredLanguage()返回所需内容的方法。该函数的返回值是该语言的字符串,例如“ en”。

在这里我给你写了一个例子:

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

2
这将为您提供“首选”语言,而不必是所选的“当前”语言。如果您在两种语言之间切换,那么我的理解是,这样做也不是一样。
arcseldon 2014年

2
var currentLanguage = $ translate.use(); 确实交换机上的变化,按照答案通过charlietfl
arcseldon

1

translate.currentLang用于检查i18n中当前选择的语言



0

也许无关,但可能有用。在angular2 +中,访问当前语言的方式是

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

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

  ngOnInit() {
   translate.use('it');
   const currentLang = this.translate.currentLang;
  }
 }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.