[英]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
)
我可以給你輸入如何開始,你可以編寫自己的腳本。 我現在發現這對我有好處:)
public function missing($messageEvent) {
Yii::log(
"'".$messageEvent->message."' => '',",
'translation',
$messageEvent->category.'.'.$messageEvent->language
);
}
}
'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.