Czy jest sposób na pobranie aktualnie używanego języka w kontrolerze (bez $translateProvider
)?
Nie udało się znaleźć niczego w $translate
serwisie.
angularjs
angular-translate
jviotti
źródło
źródło
{ "LANG_CODE": "en" }
I użycietranslate
filtru w widok jak zwykle, na przykład:<video controls poster="img/poster-{{ 'LANG_CODE' | translate }}.png"> […] </video>
Odpowiedzi:
$translate.use()
jest geterem i ustawiaczem.Zobacz to demo znalezione w linkach do dokumentów:
http://jsfiddle.net/PascalPrecht/eUGWJ/7/
źródło
$translate.use()
jest droga do zrobienia. Ponadto, gdy wykonywany jest program ładujący asynchroniczny, możesz chcieć użyć,$translate.proposedLanguage()
który zwraca klucz języka, który jest aktualnie załadowany, ale nie został jeszcze załadowany.źródło
$translate.use()
nie został ustawiony.$translate.proposedLanguage()
dał mi właściwy język.$translate.proposedLanguage()
w app.config? mam tylko $ translateProvider i muszę znaleźć wynik tej funkcji w config, a nie później w kontrolerze. Masz pomysł ?proposedLanguage()
Podczas korzystania z angular-translate-loader-static-files zauważyłem, że
$translate.proposedLanguage()
powracało toundefined
podczas używania domyślnego języka, podczas gdy$translate.use()
zawsze zwracało proponowany język.Dlatego naprawiłem to za pomocą:
var currentLang = $translate.proposedLanguage() || $translate.use();
źródło
$translate.use()
wydaje się nie działać przy początkowym załadowaniu aplikacji, aby pobrać ostatnio wybrany język z pamięci:$translate.storage().get( $translate.storageKey() )
lub po prostu$translate.proposedLanguage();
źródło
$translate
Usługa ma metodę zwanąpreferredLanguage()
że zwrot tego, co chcesz. Zwrotem tej funkcji jest ciąg języka, np. „En”.Tutaj napisałem ci przykład:
angular.module('traslateApp').controller('myController', ['$scope', '$translate', function($scope,$translate){ $scope.changeLanguage = function (langKey) { $translate.use(langKey); }; $scope.getCurrentLanguage = function () { $translate.preferredLanguage(); }; }])
źródło
translate.currentLang służy do sprawdzania aktualnie wybranego języka w i18n
źródło
Myślę, że to lepszy sposób na określenie języka -
$window.navigator.language || $window.navigator.userLanguage
źródło
Może nie jest powiązany, ale może być przydatny. W angular2 + sposobem na dostęp do aktualnego języka jest
... import { TranslateService } from '@ngx-translate/core'; export class MyComponent implements OnInit { constructor(private translate: TranslateService) {} ngOnInit() { translate.use('it'); const currentLang = this.translate.currentLang; } }
źródło