Nhận ngôn ngữ hiện tại với dịch góc cạnh


86

Có cách nào để lấy ngôn ngữ được sử dụng hiện tại trong bộ điều khiển (không có $translateProvider) không?

Không thể tìm thấy bất cứ điều gì trong $translatedịch vụ.


1
Nếu vì một lý do nào đó mà bạn cần phải sử dụng nó ngay lập tức trong chế độ xem trên toàn cầu, có lẽ phương pháp ít nỗ lực nhất là xác định mã ngôn ngữ trong trình cung cấp bản dịch của bạn (ví dụ: trong tệp bản dịch thực tế) { "LANG_CODE": "en" }và sử dụng translatebộ lọc trong xem như bình thường, như:<video controls poster="img/poster-{{ 'LANG_CODE' | translate }}.png"> […] </video>
Jari Keinänen

Tại sao không sử dụng $ window.navigator
Aleksandr Golovatyi

Câu trả lời:


155

$translate.use() là một getter và setter.

Xem bản trình diễn này được tìm thấy trong liên kết của tài liệu:

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


Tôi có nên chỉ sử dụng dịch vụ này cho một tính năng duy nhất đó để nhận ngôn ngữ trình duyệt hiện tại không? ngay cả khi tôi không định dịch
ses

5
Điều này không cung cấp cho tôi ngôn ngữ hiện tại mà là ngôn ngữ mặc định. $ translate.proposedLanguage () đã cho tôi ngôn ngữ được sử dụng hiện nay trong một bộ điều khiển theo các câu hỏi
Joan-Diego Rodriguez

41

$translate.use()là con đường để đi. Ngoài ra, khi trình tải không đồng bộ được thực thi, bạn có thể muốn sử dụng $translate.proposedLanguage()nó trả về khóa ngôn ngữ của ngôn ngữ hiện đang được tải nhưng chưa được tải xong.


2
Tôi đã cố gắng xác định ngôn ngữ trước khi tải bản dịch nhưng $translate.use()chưa được đặt. $translate.proposedLanguage()đã cho tôi đúng lang.
ncabral

3
Có thể sử dụng điều này $translate.proposedLanguage()trong app.config không? tôi chỉ có $ translateProvider và tôi cần tìm kết quả của chức năng IN cấu hình này, không phải sau này trong bộ điều khiển. Bạn có một ý tưởng ? Thanks a lot
maxime1992

2
+ ChoproposedLanguage()
Herr Derb

38

Khi sử dụng angle-translate-loader-static-files, tôi nhận thấy rằng nó được $translate.proposedLanguage()trả về undefinedkhi sử dụng ngôn ngữ mặc định trong khi $translate.use()luôn trả về ngôn ngữ được đề xuất.

Do đó, tôi đã sửa nó bằng cách sử dụng:

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

3
Đây là cách duy nhất tôi có thể có được ngôn ngữ hiện tại trong mọi tình huống.
Samuli Pahaoja

8

$translate.use()dường như không hoạt động khi tải ứng dụng ban đầu, để tải ngôn ngữ được chọn cuối cùng từ bộ nhớ: $translate.storage().get( $translate.storageKey() ) hoặc chỉ $translate.proposedLanguage();


8

Các $translatedịch vụ có một phương pháp gọi preferredLanguage()là trở lại những gì bạn muốn. Giá trị trả về của hàm này là chuỗi ngôn ngữ, như 'en'.

Ở đây tôi đã viết cho bạn một ví dụ:

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

2
Điều này sẽ cung cấp cho bạn ngôn ngữ "ưa thích", không nhất thiết phải là ngôn ngữ "hiện tại" được chọn. Nếu bạn chuyển đổi giữa các ngôn ngữ, tôi hiểu rằng điều này không xảy ra tương tự.
arcseldon

2
var currentLanguage = $ translate.use (); có bật thay đổi không, theo câu trả lời của charlietfl
arcseldon

1

translate.currentLang được sử dụng để kiểm tra ngôn ngữ được chọn hiện tại trong i18n


0

Tôi nghĩ đây là cách tốt hơn để xác định ngôn ngữ -

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

0

Có thể không liên quan nhưng có thể hữu ích. Trong angle2 +, cách truy cập vào ngôn ngữ hiện tại là

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

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

  ngOnInit() {
   translate.use('it');
   const currentLang = this.translate.currentLang;
  }
 }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.