2013-11-27 7 views
1

Я использую структуру Yii для разработки многоязычного веб-сайта. Сейчас у меня есть английская и французская версии. Я создал папку fr и разместил виды и контроллеры, относящиеся к французской версии, но используя те же модели для обеих версий.Отображать многоязычные сообщения об ошибках

Мои таблицы структуры базы данных (статьи таблица) является:

id, title_en, title_fr, title_ru, detail_en, detail_fr, detail_ru and  
so on. 

Проблема я столкнулся в том, что мне нужно, чтобы отображать сообщения об ошибках для пользователей в соответствующих языках, как во французском сообщении версии ошибки должны быть по-французски , Как я могу использовать эту же модель для всех языков.

Где я могу разместить французские сообщения?

ответ

0

Вы можете переопределить CPhpMessageSource::loadMessages() с чем-то вроде следующего:

protected function loadMessages($category,$language) 
{ 
    if ($category == 'yii') 
     return array(); 
    else 
     return parent::loadMessages($category,$language); 
} 

Также Вы можете изменить язык, установить CApplication::language соответствующим образом. Это может быть сделано во время выполнения, как и в

Yii::app()->language = 'fr'; 
+1

Последняя строка Yii :: app() -> language = 'fr'; работал. Я только добавил эту строку в действие контроллера, и он работал как волшебство. все сообщения появляются в желаемом lannguage –

+0

@MazIqbal Нет необходимости в том и для обоих. Одного достаточно. – Harikrishnan

+0

@Harikrishnan Почему вы предлагаете переопределить базовый класс с помощью некоторого ненужного кода, если перевод предоставляется базовой структурой? Ни один из ваших ответов не требуется, кроме настройки языка приложения, как указано в комментарии. Как написано в документах Yii1, все, что вам нужно сделать, это предоставить правильные сообщения и задать язык. – trejder

0

Я не знаю, если я получаю вы исправить, но если я правильно понял ваш вопрос, ваша проблема уже решена ядро ​​Yii 1.x двигатель и там не так много работы осталось делать.

В деталях, вы должны:

  1. Создание любого файла (например app.php) в /protected/messages/fr/ папке.

  2. Поместите 'coreMessages'=>array('basePath'=>'../protected/messages'), в конфигурационный массив вашего приложения - отправьте систему перевода Yii в папку с вашими индивидуальными переводами.

  3. Поместите 'sourceLanguage'=>'en' в свой массив конфигурации - убедитесь, что основной язык ваших приложений установлен на английский.

  4. Заполните app.php файл со строками перевода (см. Ниже).

  5. Перевести часть приложения с помощью Yii::t('app', 'string'); (см. Ниже).

Ваши файлы перевода должны быть в формате:

return array 
(
    //Translations from Google Translate! :> I don't speak French at all! :> 
    'This page is not yet translated into your language.'=>'Cette page n'a pas encore été traduit dans votre langue.', 
    'Language'=>'Langue', 
    'read more'=>'en savoir plus' 
); 

Так, к примеру, но в вашем блоге просмотра списка строки, как:

<?php Yii::t('app', 'read more'); ?> 

Когда вы установите язык приложения на fr, либо форсируя его в коде (Yii::app()->language = 'fr';), либо предварительно настроив его в массиве конфигурации приложения ('language'=>'fr'), вы должны увидеть en savoir plus (или все, что вы помещаете в ваш файл перевода) вместо read more в приведенном выше виде.

Если язык приложения переведен на английский язык или если указанная строка перевода не найдена, вы увидите текст, написанный в Yii::t.Вот почему так важно, чтобы использовать полные английские строки в этом методе (и в файлах перевода) и избегать «паттернов», как 'core.app.language'=>'Langue' и т.д.

Обратите внимание, что вы можете также использовать параметр заполнители:

'Error no {code}:'=>'Erreur n {code}:' 

, которые будут заменены реальными значениями параметров:

Yii::t('app', 'Error no {code}:', array('{code}'=>$code)); 

Таким образом, вы можете указать, какие переменные значения в противном случае постоянное текстовое сообщение.

В «Окончательном руководстве по Yii» есть отличный topic about internationalization. Вы должны прочитать его для получения дополнительной информации по этому вопросу или, если вы хотите использовать механизм перевода Yii более продвинутым способом.

Смежные вопросы