有没有办法在控制器中获取当前使用的语言(没有$translateProvider
)?
$translate
在服务中找不到任何东西。
$translate.use()
是要走的路。此外,当执行异步加载器时,您可能希望使用$translate.proposedLanguage()
它返回当前加载但尚未完成加载的语言的语言键。
使用 angular-translate-loader-static-files 时,我注意到在使用默认语言时返回,而$translate.proposedLanguage()
始终返回建议的语言。undefined
$translate.use()
因此,我使用以下方法修复了它:
var currentLang = $translate.proposedLanguage() || $translate.use();
$translate.use()
似乎不适用于应用程序的初始加载,从存储中获取最后选择的语言:$translate.storage().get( $translate.storageKey() )
或者只是
$translate.proposedLanguage();
该$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();
};
}])
translate.currentLang 用于检查 i18n 中当前选择的语言
也许不相关,但可能有用。在 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;
}
}
我认为这是确定语言的更好方法-
$window.navigator.language || $window.navigator.userLanguage