รับภาษาปัจจุบันด้วยการแปลเชิงมุม


86

มีวิธีรับภาษาที่ใช้ในปัจจุบันในคอนโทรลเลอร์ (ไม่มี$translateProvider) หรือไม่?

ไม่พบสิ่งใดใน$translateบริการ


1
หากพระเจ้าละทิ้งเหตุผลบางอย่างคุณจำเป็นต้องใช้มันโดยตรงในมุมมองทั่วโลกวิธีการที่ต้องพยายามอย่างน้อยที่สุดคือการกำหนดรหัสภาษาในผู้ให้บริการแปลของคุณ (เช่นในไฟล์แปลจริง) เช่น{ "LANG_CODE": "en" }และใช้translateตัวกรองใน ดูตามปกติเช่น:<video controls poster="img/poster-{{ 'LANG_CODE' | translate }}.png"> […] </video>
Jari Keinänen

ทำไมไม่ใช้ $ window.navigator
Aleksandr Golovatyi

คำตอบ:


155

$translate.use() เป็นผู้ตั้งรับและตั้งรับ

ดูการสาธิตนี้ในลิงก์ของเอกสาร:

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


ฉันควรใช้บริการนี้เฉพาะกับคุณสมบัติเดียวเพื่อรับภาษาเบราว์เซอร์ปัจจุบันหรือไม่ แม้ว่าฉันจะไม่ได้วางแผนที่จะแปล
ses

5
สิ่งนี้ไม่ได้ให้ภาษาปัจจุบันแก่ฉัน แต่เป็นภาษาเริ่มต้น $ translate.proposedLanguage () ให้ภาษาที่ใช้ในปัจจุบันแก่ฉันในคอนโทรลเลอร์ตามคำถาม
Joan-Diego Rodriguez

41

$translate.use()คือหนทางที่จะไป นอกจากนี้เมื่อเรียกใช้ตัวโหลดแบบอะซิงโครนัสคุณอาจต้องการใช้$translate.proposedLanguage()ซึ่งส่งคืนคีย์ภาษาของภาษาที่โหลดอยู่ แต่ยังโหลดไม่เสร็จ


2
ฉันพยายามกำหนดภาษาก่อนที่จะโหลดคำแปล แต่$translate.use()ไม่ได้ตั้งค่า $translate.proposedLanguage()ให้ฉันใช้ภาษาที่ถูกต้อง
ncabral

3
เป็นไปได้ไหมที่จะใช้สิ่งนี้$translate.proposedLanguage()ใน app.config? ฉันมีเพียง $ translateProvider และฉันต้องการค้นหาผลลัพธ์ของฟังก์ชันนี้ในการกำหนดค่าไม่ใช่ในคอนโทรลเลอร์ในภายหลัง คุณมีความคิด? ขอบคุณมาก
maxime1992

2
+ สำหรับproposedLanguage()
Herr Derb

38

เมื่อใช้ angular-translate-loader-static-files ฉันสังเกตเห็นว่า$translate.proposedLanguage()ส่งคืนundefinedเมื่อใช้ภาษาเริ่มต้นในขณะที่$translate.use()ส่งคืนภาษาที่เสนอเสมอ

ดังนั้นฉันจึงแก้ไขโดยใช้:

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

3
นี่เป็นวิธีเดียวที่ฉันจะได้รับภาษาปัจจุบันในทุกสถานการณ์
Samuli Pahaoja

8

$translate.use()ดูเหมือนจะไม่ทำงานกับการโหลดครั้งแรกของแอพเพื่อรับภาษาที่เลือกล่าสุดจากที่เก็บข้อมูล: $translate.storage().get( $translate.storageKey() ) หรือเพียงแค่ $translate.proposedLanguage();


8

$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();
   };
}])

2
ซึ่งจะทำให้คุณได้ภาษา "ที่ต้องการ" ไม่จำเป็นต้องเป็นภาษา "ปัจจุบัน" ที่เลือก หากคุณสลับระหว่างภาษาความเข้าใจของฉันก็คือสิ่งนี้ไม่ได้ทำเช่นเดียวกัน
arcseldon

2
var currentLanguage = $ translate.use (); ไม่เปิดการเปลี่ยนแปลงตามคำตอบของ
charlietfl



0

อาจจะไม่เกี่ยวข้องกัน แต่อาจมีประโยชน์ ใน 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;
  }
 }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.