Часто необходимо реализовать проект на различных языках и с различными региональными особенностями. Yii поддерживает интернационализацию на нескольких уровнях:
- Предоставляет региональные данные для всех возможных языков и их вариаций.
- Сервис для перевода сообщений и файлов.
- Форматирование дат и чисел в зависимости от региональных настроек.
Рассмотри пример работы с механизмом перевода сообщений.
Чтобы использовать механизм перевода сообщений, необходимо следующее:
- В файле конфигурации
protected/config/main.phpустановить значенияCApplication::sourceLanguageиCApplication::language - Создать файлы перевода
protected/messages/IdЯзыка/ИмяКатегории.php(Каждый такой файл просто возвращает массив переведённых сообщений). Обратите внимание, что при этом используетсяCPhpMessageSource - Вызвать
Yii::t()в нужных местах
Пример реализации:
В файле protected/config/main.php добавим параметры: sourceLanguage и language.
<?php
return array(
//...
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
'sourceLanguage' => 'en_US',
'language' => 'ru',
//...
);
sourceLanguage - это язык, на котором сайт написан изначально.
language - текущий язык пользователя.
Сразу после добавления этих параметров, стандартные сообщения yii будут на русском языке (например сообщения валидации форм). Так как в папке yii protected/framework/messages уже есть перевод на русский (и еще на 36 других языков).
Для перевода собственных сообщений приложения, необходимо в папке protected/messages создать папку с названием языка соответствующего стандарту ISO 639-1, то есть двухбуквенное обозначение нужного языка (Например: ru, uk, pl, ...).
Создадим перевод сообщений для русского языка. Для этого создадим папку protected/messages/ru и файл в ней app.php (имя файла можете выбрать самостоятельно) в котором будут храниться все переводы сообщений приложения. Пример файла app.php:
<?php
return array(
'Description' => 'Описание',
'Category' => 'Категория',
//Пример использования склонений
'... {n} user ...|users ...' => '... {n} пользователь ...|... {n} пользователя ...|... {n} пользователей ...',
//Здесь {n} — специальный токен, который будет заменён на переданное число.
//Пример использования и дополнительного параметра
'{username} has a record|{username} has {n} records' => '{username} имеет только 1 запись|{username} имеет {n} записи|{username} имеет {n} записей',
//...
);
Перевод сообщений осуществляется при помощи метода Yii::t(). Метод переводит данное сообщение с исходного языка sourceLanguage приложения на текущий язык приложения language.
Параметры Yii::t():
Yii::t($category, $message, $params, $source, $language)
| Свойство | Тип | Описание |
|---|---|---|
| $category | string | Категория сообщения. По сути - это имя файла или путь к категории и имя файла. |
| $message | string | Исходное сообщение. |
| $params | array | Параметры, которые будут применяться к сообщению с помощью strtr. Первый параметр может быть число без ключа, этот параметр можно указать в сообщении с помощью {n}. |
| $source | string | Указывает какие источники сообщений использовать. По умолчанию null, что означает использовать стандартные сообщения yii. |
| $language | string | Целевой язык. По умолчанию язык приложения. |
| {return} | string | Переведенное сообщение. |
Теперь там, где раньше выводился текст заменяем его на вызов Yii::t():
<?php
//Ваш код...
echo Yii::t('app', 'Description'); //Выведет: Описание
echo Yii::t('app', '... {n} user ...|users ...', 10); //Выведет: ...10 пользователей ...
echo Yii::t('app', '{username} has a record|{username} has {n} records', array(10, '{username}' => 'coder')); //Выведет: coder имеет 10 записей
//Ваш код...
Таких файлов перевода может быть столько, сколько Вам необходимо. Для примера создадим файл перевода атрибутов модели Post для модуля admin.
В папке protected/modules/admin/messages/ru создадим файл cmsPost.php в котором будут храниться переводы атрибутов модели. Пример файла cmsPost.php:
<?php
return array(
//...
'Header' => 'Заголовок',
'Text' => 'Текст',
'Visibility' => 'Выводить',
'Date' => 'Дата создания',
//...
);
В модели protected/modules/admin/models/CMSPosts.php:
<?php
class CMSPosts extends Post {
//...
public function attributeLabels() {
return array(
//...
'header' => Yii::t('adminModule.cmsPost', 'Header'),
'text' => Yii::t('adminModule.cmsPost', 'Text'),
'visibility' => Yii::t('adminModule.cmsPost', 'Visibility'),
'date' => Yii::t('adminModule.cmsPost', 'Date'),
//...
);
}
//...
Теперь атрибуты в форме будут доступны как для английского, так и для русского языков.
Тоже самое можно сделать и для виджета. Например, виджет называется MainNavigation и расположен в папке /protected/modules/admin/widgets/Menu. Соответственно путь к виджету /protected/modules/admin/widgets/Menu/MainNavigation.php. Создадим в папке /protected/modules/admin/widgets/Menu папку messages, а в ней папку ru. Дальше создадим файл перевода сообщений, например cmsMenu.php, заполним его. И теперь можем вызывать его из виджета следующим образом:
<?php
class MainNavigation extends CWidget {
//...
echo Yii::t('MainNavigation.cmsMenu', 'Main page');
//...
Больше информации: http://yiiframework.ru/doc/guide/ru/topics.i18n
devreadwrite.com


Подборка адаптивных шаблонов для вашей CMS
Статьи по
Как получить и установить HTTPS сертификат на сайта

Комментарии
Комментарии отсутствуют, Вы можете быть первым