Angular-translate ile güncel dili edinin


86

Mevcut kullanılan dili bir kontrol cihazında (olmadan $translateProvider) almanın bir yolu var mı ?

$translateServiste hiçbir şey bulunamadı .


1
Tanrı tarafından terk edilmiş bir nedenden ötürü, bunu doğrudan görünümde küresel olarak kullanmanız gerekiyorsa, muhtemelen en az çabanın yöntemi, çeviri sağlayıcınızda (yani gerçek çeviri dosyasında) dil kodunu tanımlamaktır, örneğin { "LANG_CODE": "en" }ve içindeki translatefiltreyi kullanmaktır . her zamanki gibi görüntüleyin, örneğin:<video controls poster="img/poster-{{ 'LANG_CODE' | translate }}.png"> […] </video>
Jari Keinänen

Neden $ window.navigator kullanmıyorsunuz
Aleksandr Golovatyi

Yanıtlar:


155

$translate.use() alıcı ve ayarlayıcıdır.

Doküman bağlantılarında bulunan bu demoya bakın:

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


Geçerli tarayıcı dilini almak için bu hizmeti yalnızca o tek özellik için mi kullanmalıyım? çeviri yapmayı planlamıyor olsam bile
ses

5
Bu bana şu anki dili değil, varsayılan dili verdi. $ translate.proposedLanguage () bana soruya göre bir denetleyicide şu anda kullanılan dili verdi
Joan-Diego Rodriguez

41

$translate.use()gidilecek yol. Zaman uyumsuz bir yükleyici çalıştırıldığında, ayrıca, kullanımını isteyebilirsin $translate.proposedLanguage()anda yüklü ancak dilin dil anahtarını döndürür değil henüz yüklü tamamladı.


2
Çeviriler yüklenmeden önce dili belirlemeye çalışıyordum ama $translate.use()ayarlanmadı. $translate.proposedLanguage()bana doğru dili verdi.
ncabral

3
Bunu $translate.proposedLanguage()app.config içinde kullanmak mümkün mü ? Yalnızca $ translateProvider'a sahibim ve bu işlevin sonucunu daha sonra denetleyicide değil, IN config'de bulmam gerekiyor. Bir fikrin var mı Çok teşekkürler
maxime1992

2
+ forproposedLanguage()
Herr Derb

38

Angular-translate-loader-static-dosyalarını kullanırken, varsayılan dili kullanırken $translate.proposedLanguage()geri döndüğünü fark ettim.undefined$translate.use() daima önerilen dil döndü.

Bu yüzden şunu kullanarak düzelttim:

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

3
Her durumda mevcut dili alabilmemin tek yolu bu.
Samuli Pahaoja

8

$translate.use()depodan son seçilen dili almak için uygulamanın ilk yüklemesinde çalışmıyor gibi görünüyor: $translate.storage().get( $translate.storageKey() ) veya sadece $translate.proposedLanguage();


8

$translateServis adlı bir yöntem vardır preferredLanguage()İstediğin bu dönüş. Bu işlevin dönüşü, 'en' gibi dilin dizgesidir.

İşte sana bir örnek yazdım:

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

2
Bu size, seçilen "mevcut" dili değil, "tercih edilen" dili verecektir. Diller arasında geçiş yaparsanız, anladığım kadarıyla bu aynı şekilde değildir.
arcseldon

2
var currentLanguage = $ translate.use (); charlietfl tarafından verilen cevaba göre değişikliği
açıklıyor

1

translate.currentLang, i18n'de mevcut seçili dili kontrol etmek için kullanılır


0

Bence bu dili belirlemenin daha iyi bir yolu -

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

0

Belki ilişkili değildir, ancak yararlı olabilir. Angular2 + 'da mevcut dile erişimin yolu

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

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

  ngOnInit() {
   translate.use('it');
   const currentLang = this.translate.currentLang;
  }
 }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.