Intereting Posts
Довольно URL-адреса в фреймворках PHP Symfony 4.0 не работает В CakePHP, где я бы поставил метод, который выполняет проверку на пользователя сеанса? Специальные символы и двойные кавычки в PHP сообщение в tumblr с помощью php XAMPP / MySQL: не удалось открыть файл таблицы таблиц с одной таблицей. \ Mysql \ innodb_index_stats.ibd после перезагрузки MySQL регулярное выражение для соответствия точной строке PHP: преобразовать специфические боснийские символы в не-боснийские (стандартные символы utf8) Загрузка файла CSV для обработки обновления статуса и вставки новых записей Как анализировать информацию ffmpeg в PHP? Как увеличить числовую часть строки на единицу? Сравните два многомерных массива и несоответствующие элементы Официальный конец поддержки PHP4? Как получить идентификатор компании с URL-адрес компании Linkedin на PHP? Определите, является ли операционная система Mac

Создание файлов сообщений перевода Yii

Мне интересно узнать, есть ли сценарий или другой доступ для сбора и генерации переводов 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)

Я мог бы дать вам информацию о том, как начать, и вы можете написать свой собственный скрипт. Я нашел это хорошо для меня сейчас 🙂

Создание компонентов компонента / 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' ), ) 

результат

Вы получите файл 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' ).