Мне интересно узнать, есть ли сценарий или другой доступ для сбора и генерации переводов Yii в контроллере / проекте
Например. Если у меня есть следующие коды в контроллере
Yii::t('blog', 'Your name'); Yii::t('category', 'Category name');
Он должен генерировать файлы сообщений на английском языке как blog.php и category.php с указанными выше строками в каталоге сообщений. Пожалуйста, дайте мне знать, если кто-то знает дорогу. благодаря
Нет необходимости изобретать велосипед. Вы можете использовать yiic
для этого (если вы перейдете в папку фреймворка и введите yiic help message
вы получите всю информацию, необходимую для ее использования). Для удобства, я собираюсь вставить его здесь.
ИСПОЛЬЗОВАНИЕ yiic путь сообщения / to / config / file
ОПИСАНИЕ Эта команда выполняет поиск сообщений, которые будут транслироваться в указанных исходных файлах, и компилирует их в массивы PHP в качестве источника сообщений.
PARAMETERS * config-file: требуется, путь к файлу конфигурации. Вы можете найти пример в framework / messages / config.php.
Файл может быть размещен в любом месте и должен быть допустимым PHP-скриптом, который возвращает массив пар имя-значение. Каждая пара имен и значений представляет собой параметр конфигурации.
Доступны следующие параметры:
- sourcePath: строка, корневая директория всех исходных файлов.
- messagePath: строка, корневой каталог, содержащий переводы сообщений.
- Языки: массив, список кодов языков, на которые должны быть переведены извлеченные сообщения. Например, array ('zh_cn', 'en_au').
- fileTypes: массив, список расширений файлов (например, «php», «xml»). Будут обработаны только файлы, имя расширения которых можно найти в этом списке. Если пустым, все файлы будут обработаны.
- exclude: array, список исключений из каталога и файла. Каждое исключение может быть либо именем, либо путем. Если имя или путь к файлу или каталогу совпадают с исключением, он не будет скопирован. Например, исключение «.svn» исключает все файлы и каталоги с именем «.svn». И исключение '/ a / b' исключает файл или каталог 'sourcePath / a / b'.
- translator: имя функции для перевода сообщений. По умолчанию используется значение «Yii :: t». Это используется как знак для поиска сообщений, которые нужно перевести.
- overwrite: если файл сообщения должен быть перезаписан объединенными сообщениями.
- removeOld: если сообщение больше не нуждается в переводе, оно будет удалено, вместо того, чтобы быть заключенным между парой отметок '@@'.
Вы должны изменить (и переместить) пример конфигурационного файла, и все будет установлено. Обязательно используйте полные пути (например, C:\path\to\project
в Windows или /var/www/your/project
on * nix)
Я мог бы дать вам информацию о том, как начать, и вы можете написать свой собственный скрипт. Я нашел это хорошо для меня сейчас 🙂
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' ), )
Вы получите файл transl.php в каталоге вашего файла журнала, а содержимое файла будет выглядеть примерно так:
2012/06/28 09:45:00 [translation] [Site.lv] 'MyStringInSource' => '', ....
в зависимости от вашей конфигурации. Таким образом, вы можете скопировать 'MyStringInSource' => '',
часть и поместить в соответствующий файл перевода.
Это полезно в процессе разработки, потому что оно будет увеличивать файл translation.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'
).