2015-12-18 16 views
8

Giả sử tôi đã cài đặt mô-đun Foo tạo thành một kho lưu trữ với nhà soạn nhạc. Cấu trúc mô-đun là như thế này:Ghi đè đường dẫn dịch của mô-đun trên yii2

- Foo 
|- models 
|- controllers 
|- views 
|- messages 
|- config 

Messages thư mục chứa các tập tin Foo dịch của module. Bây giờ tôi muốn ghi đè lên một số chuỗi dịch của Foo. Từ Yii2 i18n Documentation Tôi đã cố gắng sử dụng thuộc tính tệpMap trên cấu hình của thành phần dịch sang bản đồ bar loại thành bar.php (thay vì đọc từ app\modules\Foo\messages), nhưng nó không có bất kỳ ảnh hưởng nào đến bản dịch. Cấu hình thành phần i18n của tôi là:

'i18n' => [ 
    'translations' => [ 
     '*' => [ 
      'class' => 'yii\i18n\PhpMessageSource', 
      'fileMap' => [ 
       'bar' => 'bar.php' 
      ], 
     ], 
    ], 
], 

Làm cách nào để đạt được mục tiêu?

+0

Vui lòng chỉ cho chúng tôi cách mô-đun này đăng ký bản dịch – soju

Trả lời

2

Nếu bạn muốn có bản dịch cho từng mô-đun có trong mô-đun, bạn cần phải đăng ký bản dịch cho mô-đun đó. Nó không thể được thực hiện đơn giản từ tập tin cấu hình. Bạn có thể đã có điều này trong tập tin mô-đun của bạn ,, tôi chỉ bao gồm cho đầy đủ. Mã này được sao chép từ các tài liệu, và cần phải được trong tập tin mô-đun của bạn, vì vậy trong app/modules/Foo.php

<?php 

namespace app\modules\foo; 

use Yii; 

class Module extends \yii\base\Module 
{ 
    public $controllerNamespace = 'app\modules\foo\controllers'; 

    public function init() 
    { 
     parent::init(); 
    /** Register custom translations for this module **/ 
     $this->registerTranslations(); 
    } 

    public function registerTranslations() 
    { 

    /**This registers translations for the Foo module **/ 
     Yii::$app->i18n->translations['modules/foo/*'] = [ 
      'class' => 'yii\i18n\PhpMessageSource', 
      'sourceLanguage' => 'en-US', 
      'basePath' => '@app/modules/foo/messages', 

    /**Tells yii where to find the translations for validation and form categories **/ 
      'fileMap' => [ 
       'modules/foo/validation' => 'validation.php', 
       'modules/foo/form' => 'form.php', 
       ... 
      ], 
     ]; 
    } 

    public static function t($category, $message, $params = [], $language = null) 
    { 
     return Yii::t('modules/users/' . $category, $message, $params, $language); 
    } 

} 

Trong trường hợp của bạn nó không giống như bạn cần cung cấp tập tin mapping.You chỉ đơn giản là có thể sử dụng định dạng này cho tệp của bạn

[[basePath]]/LanguageID/CategoryName.php 

Rất tiếc, tôi không thể tìm thấy danh sách các danh mục có sẵn.

Nếu sau đó bạn muốn ghi đè một số bản dịch mô-đun, bạn sẽ cần chỉ định danh mục sẽ được sử dụng, như thế này trong tệp cấu hình của bạn. Nó đặc biệt ghi đè danh mục mô-đun/foo/bar.

'i18n' => [ 
    'translations' => [ 
     'modules/foo*' => [ 
      'class' => 'yii\i18n\PhpMessageSource', 
      'basePath' => '@app/messages', 
     ], 
    ], 
], 

tập tin dịch của bạn cần phải tuân theo một cấu trúc thư mục như vậy trong mô tả dịch, vì vậy trong ví dụ trên nó sẽ là

app/messages/ [language code] /modules/foo/bar.php 

Otherise, bạn có thể sử dụng fileMap để lập bản đồ đến các địa điểm khác nhau, như thể tệp bar.php của bạn nằm trong ứng dụng/tin nhắn/[mã ngôn ngữ]

'fileMap' => [ 
'modules/foo/bar' => 'bar.php' 
] 
+0

Joe, cảm ơn y câu trả lời toàn diện của chúng tôi !. Chỉ cần lưu ý rằng tôi đã sử dụng id mô-đun làm khóa trên cấu hình. Tôi sẽ đề xuất một số chỉnh sửa trên câu trả lời của bạn, nếu bạn thấy rằng chỉnh sửa là chính xác, đó là niềm vui áp dụng nó;). – meysam

+0

Rất tiếc, nhưng chỉnh sửa bạn đã đề xuất sẽ không hoạt động đối với ví dụ tôi đã đề xuất. Trường hợp sử dụng của riêng bạn có thể khác, nhưng đối với câu trả lời có ý nghĩa, nó cần phải giữ nguyên! Cảm ơn bạn đã đề xuất mặc dù @meysam –

+0

OK, cảm ơn một lần nữa;). – meysam

Các vấn đề liên quan