2010-08-01 38 views
5

Có cơ chế nào trong khung yii để dịch thư trong tệp nguồn javascript hay không.Cách xử lý quốc tế hóa javascript

Ví dụ với:

yiic message config-message.php 

tôi có thể tạo ra các file .php dịch cho tất cả Yii :: t().

Có thể tạo tệp .js có cùng cơ chế không. Hiện tại tôi đang đưa dữ liệu json javascript của mình vào bảng do tệp dịch được trả về.

Trả lời

1

Không có cách cụ thể để giải quyết vấn đề đó. Ví dụ:

Ví dụ: bạn có thể tạo tệp với một mảng với 'message-id' => 'translation' và bao gồm đúng và sau đó thực hiện các công việc như alert ($ messages ['itemDeleted']).

Một giải pháp thay thế có thể là tạo chế độ xem javascript của bạn và sử dụng hàm Yii :: t() trên đó.

2

Đó thực sự là một vấn đề. Các trang web đa ngôn ngữ luôn là vấn đề. YII giải quyết vấn đề cho mã php. Nhưng vấn đề mã js vẫn còn đúng chỗ.

Tôi không có giải pháp rất thanh lịch nhưng nó hoạt động. Tạo bộ điều khiển/thành phần và tạo mã js với nội địa hóa khi đang di chuyển bằng t(). ?

/js/get/file = some-js-file trong cách bố trí:

Tất nhiên, mỗi JS cần phải được viết lại. Nếu sử dụng các đoạn mã nhỏ (cs() -> RegisterScript), tôi cũng sử dụng t().

4

Một giải pháp thay thế sẽ làm cho Yii bao gồm các thông điệp dịch trong DOM, mà sau này sẽ được truy cập bằng mã JS của bạn, vì vậy:

  1. Bạn không cần phải lặp lại mã JS.
  2. Bản dịch được tập trung trong khuôn khổ PHP/Yii.
2

Tôi vừa vấp phải vấn đề này và sử dụng bộ điều khiển để tạo mã js khi đang bay không phải là tùy chọn vì bạn sẽ lãng phí tài nguyên vì bắt đầu một quy trình PHP bổ sung trên mọi yêu cầu. Đây có thể là sự cố trên các trang web có lưu lượng truy cập cao. Vì vậy, tôi đã triển khai một cách tiếp cận khác: Trong các tin nhắn .js được lưu trữ trong Biến, ví dụ:

var MyJsClass = { 
    lang: 
    { 
     foo: 'Foo', 
     bar: 'Bar', 
    }, 
    doSomething: function() 
    { 
     console.log(this.lang.foo); 
    }, 
}; 

trong giao diện bạn thêm bản dịch nếu ngôn ngữ hiện nay là khác với sourceLanguage của App:

<?php 
$cs = Yii::app()->clientScript; 
$cs->registerScriptFile($this->module->assetsUrl.'/js/myjsclass.js'); 
if (Yii::app()->sourceLanguage != Yii::app()->language) { 
    $cs->registerScript('MyScriptID', ' 
     MyJsClass.lang.foo = \''.Yii::t('TranslationCategory', 'Translated Foo').'\'; 
     MyJsClass.lang.bar = \''.Yii::t('TranslationCategory', 'Translated Bar').'\'; 
    '); 
} 
?> 
Các vấn đề liên quan