コントローラで現在使用されている言語を取得する方法はありますか($translateProvider
なし)?
$translate
サービスで何も見つかりませんでした。
$translate.use()
が道です。また、非同期ローダーが実行されると、現在ロードされている言語の言語キーを返す$translate.proposedLanguage()
を使用したい場合がありますが、notロードはまだ完了しています。
Angle-translate-loader-static-filesを使用する場合、$translate.proposedLanguage()
は常に提案された言語を返しますが、デフォルト言語を使用すると$translate.use()
がundefined
を返すことに気付きました。
したがって、以下を使用して修正しました。
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で現在選択されている言語を確認するために使用されます
私はこれが言語を決定するより良い方法だと思います-
$window.navigator.language || $window.navigator.userLanguage
おそらく関連していませんが、役に立つかもしれません。 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;
}
}