Спасибо за ваше время, пытаясь помочь мне.Перевод не работает с ZF2
Я следовал этому учебнику:
http://samminds.com/2012/09/zend-framework-2-translate-i18n-locale/
http://samminds.com/2012/09/create-po-language-files-using-poedit/
, и я думаю, что я выполнил все шаги, но механизм перевода не работает.
Расширение INLT установлено и активно в системе.
В модуле конфигурации я добавил:
'translator' => array(
'locale' => 'es_ES',
'translation_file_patterns' => array(
array(
'type' => 'gettext',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.mo',
'text_domain' => __NAMESPACE__,
),
),
),
и внутри module.php добавил строку для определения способа перевода.
public function onBootstrap(MvcEvent $e)
{
$translator = $e->getApplication()->getServiceManager()->get('translator');
$translator
->setLocale(\Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']))
->setFallbackLocale('fr_FR');
...
...
Я успешно создал файл po и mo и загрузил его на сервер в нужном месте.
[email protected]:/users/p0100/web/module/Application/language> ls -l
total 20
-rw-r--r-- 1 vmamp users 2652 Jan 16 23:46 es_ES.mo
-rw-r--r-- 1 vmamp users 4582 Jan 16 23:46 es_ES.po
, например, это snipset одного мнение, где перевод может произойти:
<li class="moteur"><?php echo $this->translate('Moteur')?></li>
<li class="couleur"><?php echo $this->translate('Couleur')?></li>
<?php if (count($this->universeData['garnissage']) > 1):?>
<li class="selle"><?php echo $this->translate('Selle')?></li>
<?php endif;?>
<?php if (count($this->universeData['jonc']) > 1):?>
<li class="jonc"><?php echo $this->translate('Jonc')?></li>
<?php endif;?>
<?php if (count($this->universeData['retros']) > 1):?>
<li class="retros"><?php echo $this->translate('Retros')?></li>
<?php endif;?>
<?php if (count($this->universeData['signature']) > 1):?>
<li class="signature"><?php echo $this->translate('Signature')?></li>
<?php endif;?>
<li class="rangement"><?php echo $this->translate('Rangement')?></li>
<li class="confort"><?php echo $this->translate('Confort')?></li>
<li class="perso"><?php echo $this->translate('Perso')?></li>
и это часть содержимого файла .po (es_ES.po)
msgid "Couleur"
msgstr "Color"
#: view/application/application/configure.phtml:56
msgid "Selle"
msgstr "Asiento"
#: view/application/application/configure.phtml:59
msgid "Jonc"
msgstr "Embellecedores"
#: view/application/application/configure.phtml:62
msgid "Retros"
msgstr "Retrovisores"
#: view/application/application/configure.phtml:65
msgid "Signature"
msgstr "Luminosidad"
#: view/application/application/configure.phtml:67
msgid "Rangement"
msgstr "Orden"
#: view/application/application/configure.phtml:68
msgid "Confort"
msgstr "Confort"
I'checked какие $ _SERVER [ ''] HTTP_ACCEPT_LANGUAGE возвращается и вот что это такое:
es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
, поэтому я предполагаю, что строки могут быть переведены на испанский, но они этого не делают. Поскольку файлы перевода назывались es_ES, и я вижу, что HTTP_ACCEPT_LANGUAGE возвращает ключ как es-ES, я пытался переименовать их в es-ES, но это не решило проблему.
Думая о проблеме с кодировкой Я проверил кодировку файлов, и они находятся на utf8, поскольку я установил их в соответствующем метатеге, и что это также кодировка, которую я выбрал для кодировки в poedit для кодировки и исходной кодировки.
[email protected]:/users/p0100/web/module/Application/language> file -i es_ES.po
es_ES.po: text/x-po charset=utf-8
Btw, когда я показываю файл со стороны сервера я ценю кодировки ошибок (если я изменить его с места, например, с помощью блокнота + специальные символы прав кодированный). Почему у меня такая проблема и как я могу ее исправить?
Во всяком случае я показал здесь натягивает те не специальные символы, и я полагаю, что они могут быть хорошо переведены, если я бы реализовать право процесса, но, кажется, я что-то не хватает ...
Любой опытный с этим полем ?
Поведение приложения похоже на то, что механизм traslation не был добавлен, ошибок нет.
Заранее благодарим за ваше время и усилие.
С наилучшими пожеланиями.
EDIT:
мне нужно, чтобы добавить текст домена к линиям переводов:
<?php echo $this->translate('Moteur', 'Application')?>
после добавления, перевод работает отлично.
Привет, спасибо за ваши комментарии, мне нужно добавить ДОМЕН переводов цепей ... Посмотрите редактирование. – manou
Привет! Кажется, проще использовать __NAMESPACE__ как textDomain, так как это имя модуля. Вам просто нужно напомнить себе, чтобы добавить 'namespace [MODULENAME],' ко всем вашим представлениям. Поскольку переводный текст не должен появляться ни в каком другом месте, это работает очень хорошо. – AlexWerz