Подтвердить что ты не робот

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

Мне интересно узнать, есть ли script или другой доступный для сбора и генерации сообщений перевода Yii в контроллере/проекте

Eg. Если у меня есть следующие коды в контроллере

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

Он должен генерировать файлы сообщений английского перевода как blog.php и category.php с указанными выше строками в каталоге сообщений. Пожалуйста, дайте мне знать, если кто-то знает дорогу. Благодаря

4b9b3361

Ответ 1

Нет необходимости изобретать велосипед. Вы можете использовать yiic для этого (если вы перейдете в папку фреймворка и введите yiic help message, вы получите всю необходимую информацию об этом использовании). Для удобства, я собираюсь вставить его здесь.

ИСПОЛЬЗОВАТЬ yiic путь сообщения /to/config/file

ОПИСАНИЕ Эта команда выполняет поиск сообщений, которые будут указанных исходных файлов и компилирует их в массивы PHP как источника сообщений.

ПАРАМЕТРЫ * config-file: требуется, путь конфигурации файл. Вы можете найти пример в framework/messages/config.php.

Файл может быть размещен в любом месте и должен быть действительным PHP scriptкоторый возвращает массив пар имя-значение. Каждая пара имен и значений представляет собой конфигурационный параметр.

Доступны следующие параметры:

  • sourcePath: строка, корневой каталог всех исходных файлов.
  • messagePath: строка, корневая директория, содержащая переводы сообщений.
  • Языки: массив, список кодов языков, которые извлеченные сообщения  следует перевести на. Например, array ('zh_cn', 'en_au').
  • fileTypes: массив, список расширений файлов (например, "php", "xml" ).  В этом списке можно найти только файлы, имя которых можно найти в этом списке  будет обработан. Если пустым, все файлы будут обработаны.
  • exclude: array, список исключений в каталоге и файлах. каждый  исключение может быть либо именем, либо путем. Если имя файла или каталога  или путь соответствует исключению, он не будет скопирован. Например,  исключение ".svn" исключает все файлы и каталоги, чьи  name - ".svn". И исключение '/a/b' исключает файл или  directory 'sourcePath/a/b'.
  • translator: имя функции для перевода сообщений.  По умолчанию используется значение "Yii:: t". Это используется как знак для поиска сообщений  в переводе.
  • переписать: если файл сообщения должен быть перезаписан объединенными сообщениями.
  • removeOld: если сообщение больше не нуждается в переводе, оно будет удалено,  вместо того, чтобы быть заключенным между парой отметок '@@'.

Вы должны изменить (и переместить) пример конфигурационного файла, и все будет установлено. Обязательно используйте полные пути (т.е. C:\path\to\project в Windows или /var/www/your/project on * nix)

Ответ 2

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

Создание компонентов компонента /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' => '', и поместить в соответствующий файл перевода.

Это полезно в процессе разработки, потому что оно будет увеличивать файл transl.log с отсутствующим переводом (повторно) до тех пор, пока вы не переведете их.

Надеюсь, это даст вам идею.

Ответ 3

Это похоже на работу для 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').