簡體   English   中英

生成Yii翻譯消息文件

[英]Generate Yii translation message files

我很想知道是否有一個腳本或其他可用於收集和生成控制器/項目中的Yii翻譯消息

例如。 如果我在控制器中有以下代碼

Yii::t('blog', 'Your name');
Yii::t('category', 'Category name');

它應該生成英文翻譯消息文件,如blog.php和category.php,以及消息目錄中的上述字符串。 如果有人知道某種方式,請告訴我。 謝謝

沒有必要重新發明輪子。 您可以使用yiic (如果您轉到框架文件夾並輸入yiic help message您將獲得有關它的使用所需的所有信息)。 為方便起見,我打算將它粘貼在這里。

使用yiic消息路徑/到/ config / file

說明此命令搜索要在指定源文件中轉換的消息,並將它們編譯為PHP數組作為消息源。

參數* config-file:必需,配置文件的路徑。 您可以在framework / messages / config.php中找到一個示例。

該文件可以放在任何地方,並且必須是一個有效的PHP腳本,它返回一組名稱 - 值對。 每個名稱 - 值對代表一個配置選項。

可以使用以下選項:

  • sourcePath:string,所有源文件的根目錄。
  • messagePath:string,包含消息轉換的根目錄。
  • languages:array,提取的消息應轉換為的語言代碼列表。 例如,數組('zh_cn','en_au')。
  • fileTypes:array,文件擴展名列表(例如'php','xml')。 只處理在此列表中可以找到其擴展名的文件。 如果為空,則將處理所有文件。
  • exclude:array,目錄和文件排除列表。 每個排除可以是名稱或路徑。 如果文件或目錄名稱或路徑與排除項匹配,則不會復制它。 例如,排除'.svn'將排除名稱為'.svn'的所有文件和目錄。 排除'/ a / b'將排除文件或目錄'sourcePath / a / b'。
  • translator:用於翻譯消息的函數的名稱。 默認為'Yii :: t'。 這用作標記以查找要翻譯的消息。
  • 覆蓋:如果必須用合並的消息覆蓋消息文件。
  • removeOld:如果消息不再需要翻譯,它將被刪除,而不是被包含在一對“@@”標記之間。

您應該修改(並移動)示例配置文件,並且您已完成設置。 一定要使用完整路徑(即Windows上的C:\\path\\to\\project或* nix上的/var/www/your/project

我可以給你輸入如何開始,你可以編寫自己的腳本。 我現在發現這對我有好處:)

創建組件組件/ Translation.php

public function missing($messageEvent) {        
    Yii::log(
        "'".$messageEvent->message."' => '',",
        'translation',
        $messageEvent->category.'.'.$messageEvent->language
    );
}

}

編輯配置文件config / main.php

'components' => array(
      //...
      'log' => array(
            array(
                'class'=>'CFileLogRoute',
                'levels'=>'translation',
                'logFile'=>'translations.log',
            ),
            //...                
      ),

       'messages' => array(
            //'class' => 'CDbMessageSource',
            'onMissingTranslation' => array('Translation', 'missing'),
            //'sourceMessageTable' => 'source_message',
            //'translatedMessageTable' => 'message'
       ),
)

結果

您將在日志文件目錄中找到translation.php文件,文件內容將類似於:

 2012/06/28 09:45:00 [translation] [Site.lv] 'MyStringInSource' => '',
 ....

取決於您的配置。 所以你可以復制'MyStringInSource' => '',部分並輸入相應的翻譯文件。

這在開發過程中很有用,因為它會使translate.log文件增長,但會翻譯(反復),直到您翻譯它們為止。

希望它能給你一些想法。

這聽起來像是grep和正則表達式的工作。 搜索:

Yii::t\s*\(\s*('(?:[^']|(?<=\\)')*'|"(?:[^"]|(?<=\\)")*")\s*,\s*('(?:[^']|(?<=\\)')*'|"(?:[^"]|(?<=\\)")*")\s*\)

由於不幸的是上面的內容不可讀,我會稍微分解一下:

Yii::t\s*\(\s*##PATTERN##\s*,\s*##PATTERN##\s*\)

這顯然匹配對Yii::t的調用,注意考慮空白。 秘訣是##PATTERN## ,重復兩次。 ##PATTERN##

('(?:[^']|(?<=\\)')*'|"(?:[^"]|(?<=\\)")*")

以上匹配'([^']|(?<=\\\\)')*' (單引號字符串)或"([^"]|(?<=\\\\)")*" (雙倍)引用字符串)。 非捕獲組( ?: :)已被用於忽視不感興趣的中期結果。

在與此正則表達式匹配后,捕獲組#1將保留翻譯文件名(例如'blog' ),組#2將保存字符串名稱(例如'Your name' )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM