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.

jviotti
sumber
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/

charlietfl.dll
sumber
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.

Pascal Precht
sumber
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();
Joan-Diego Rodriguez
sumber
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();

xac
sumber
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();
   };
}])
Iran Reyes
sumber
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

Mendongkrak
sumber
0

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

$window.navigator.language || $window.navigator.userLanguage
Aleksandr Golovatyi
sumber
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;
  }
 }
Emanuele Fricano
sumber