Dapatkan bahasa saat ini dengan terjemahan sudut


86

Apakah ada cara untuk mendapatkan bahasa yang digunakan saat ini di pengontrol (tanpa $translateProvider)?

Tidak dapat menemukan apa pun dalam $translatelayanan ini.


1
Jika karena alasan yang diabaikan Tuhan Anda perlu menggunakannya secara langsung dalam tampilan secara global, mungkin metode yang paling mudah adalah dengan mendefinisikan kode bahasa di penyedia terjemahan Anda (mis. Dalam file terjemahan yang sebenarnya) misalnya { "LANG_CODE": "en" }dan menggunakan translatefilter di lihat seperti biasa, seperti:<video controls poster="img/poster-{{ 'LANG_CODE' | translate }}.png"> […] </video>
Jari Keinänen

Mengapa tidak menggunakan $ window.navigator
Aleksandr Golovatyi

Jawaban:


155

$translate.use() adalah pengambil dan penyetel.

Lihat demo ini ditemukan di tautan dokumen:

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


Haruskah saya menggunakan layanan ini hanya untuk fitur tunggal itu untuk mendapatkan bahasa browser saat ini? bahkan jika saya tidak berencana untuk menerjemahkan
ses

5
Ini tidak memberi saya bahasa saat ini tetapi bahasa default. $ translate.proposedLanguage () memberi saya bahasa yang digunakan saat ini di pengontrol sesuai pertanyaan
Joan-Diego Rodriguez

41

$translate.use()adalah cara untuk pergi. Selain itu, saat pemuat asinkron dijalankan, Anda mungkin ingin menggunakan $translate.proposedLanguage()yang mengembalikan kunci bahasa dari bahasa yang saat ini dimuat tetapi belum selesai dimuat.


2
Saya mencoba menentukan bahasa sebelum terjemahan dimuat tetapi $translate.use()tidak disetel. $translate.proposedLanguage()beri saya bahasa yang benar.
ncabral

3
Apakah mungkin untuk menggunakan ini $translate.proposedLanguage()di app.config? saya hanya memiliki $ translateProvider dan saya perlu menemukan hasil dari fungsi ini di konfigurasi, bukan nanti di kontroler. Apakah kamu punya ide Terima kasih banyak
maxime1992

2
+ untukproposedLanguage()
Herr Derb

38

Saat menggunakan angular-translate-loader-static-files, saya perhatikan bahwa itu $translate.proposedLanguage()kembali undefinedsaat menggunakan bahasa default sementara $translate.use()selalu mengembalikan bahasa yang diusulkan.

Oleh karena itu saya memperbaikinya dengan menggunakan:

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

3
Ini adalah satu-satunya cara saya bisa mendapatkan bahasa saat ini dalam semua situasi.
Samuli Pahaoja

8

$translate.use()tampaknya tidak berfungsi pada pemuatan awal aplikasi, untuk mendapatkan bahasa yang terakhir dipilih dari penyimpanan: $translate.storage().get( $translate.storageKey() ) atau hanya $translate.proposedLanguage();


8

The $translatelayanan memiliki metode yang disebut preferredLanguage()yang kembali apa yang Anda inginkan. Kembalinya fungsi ini adalah string bahasa, seperti 'en'.

Di sini saya menulis Anda sebuah contoh:

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

2
Ini akan memberi Anda bahasa "pilihan", belum tentu bahasa "saat ini" yang dipilih. Jika Anda beralih antar bahasa, pemahaman saya adalah bahwa ini tidak melakukan hal yang sama.
arcseldon

2
var currentLanguage = $ translate.use (); tidak mengaktifkan perubahan, sesuai jawaban oleh charlietfl
arcseld

1

translate.currentLang digunakan untuk memeriksa bahasa yang dipilih saat ini di i18n


0

Saya pikir ini adalah cara yang lebih baik untuk menentukan bahasa -

$window.navigator.language || $window.navigator.userLanguage

0

Mungkin tidak ada hubungannya tapi bisa bermanfaat. Di angular2 + cara untuk mengakses bahasa saat ini adalah

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

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

  ngOnInit() {
   translate.use('it');
   const currentLang = this.translate.currentLang;
  }
 }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.