2013-03-01 3 views
0

Я ищу учебник по предпочитаемому методу обработки локализации в Zend 2, но до сих пор мне не удалось найти его. Лучшее, что я смог найти, - this page, что не объясняет практический процесс реализации локализации (в частности, сообщения приложения) подробно или this question, который был задан перед выпуском Zend 2 и теперь устарел.Каков предпочтительный метод локализации в Zend 2?

Если у вас есть выбор, представленный на этой странице, скажем, я выбираю GNU Gettext в качестве формата перевода. Есть ли в этом случае учебник по локализации приложения ZF2?

Или, скажем, хранить текст страницы на моем сайте в таблице базы данных, например

CREATE TABLE `page` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `title` varchar(255) DEFAULT NULL, 
    `body` blob, 
    `locale` int(11) NOT NULL, 
    `creator` int(11) NOT NULL, 
    `created` datetime NOT NULL, 
    `modified` datetime NOT NULL, 
PRIMARY KEY (`id`), 
KEY `pagecreatorfk_idx` (`creator`), 
CONSTRAINT `pagecreatorfk` FOREIGN KEY (`creator`) 
REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 

Как бы я пойти с предоставлением локализованных сообщений тогда?

+0

Можете ли вы определить локализацию немного больше? Например, вы просто хотите перевести текст на разные языки, временные форматы, форматы валют и т. Д. Моя первая рекомендация хотя и заключается в использовании формата перевода GetText, и я бы не сохранил его в базе данных, а скорее текст файлы, и я бы также установил кэш для них тоже. – Diemuzi

+0

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

ответ

5

Хорошо, для начала вам понадобится программа перевода, такие как http://www.poedit.net/

Вот как у меня есть мои настройки:

В папке модуля создать другую папку под названием «язык».

Откройте module.config.php и добавьте следующее:

'translator' => array(
    'translation_file_patterns' => array(
     array(
      'type'  => 'gettext', 
      'base_dir' => __DIR__ . '/../language', 
      'pattern'  => '%s.mo', 
      'text_domain' => 'account' 
     ) 
    ) 
) 

Что делает вещи легко для меня, чтобы создать файл language.php и добавить строки, как это:

echo _('text_to_translate_here'); 

Когда вы настраиваете PoEdit, вы сканируете этот файл, который добавит идентификатор перевода в PoEdit. Теперь вы можете добавить реальный текст, который хотите отобразить, и после сохранения он выведет 2 файла, такие как account.mo и account.po. Единственный файл, который необходимо загрузить в папку языка является account.mo

Поскольку я использую переводы во всем моем приложении я добавил фабрику в мой файл global.php:

return array(
    'service_manager' => array(
     'factories' => array(
      'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory', 
     ) 
    ) 
); 

В моей view.phtml файл теперь я смогу перевести:

<?php echo $this->translate('text_to_translate_here', 'account'); ?> 

Теперь, если вы не хотите использовать textdomains как я показал в моем примере module.config.php тогда все переводы будут с использованием по умолчанию «default» textdomain. Таким образом, вы могли бы сделать это вместо:

<?php echo $this->translate('text_to_translate_here'); ?> 

Это также будет работать на FormLabels: (Это будет выход Priroity в качестве имени метки)

<?php echo $this->formLabel($this->form->get('prio')); ?> 

Если вы хотите перевести объекты формы с использованием ДОМЕНА, кроме «по умолчанию», то вы можете добавить к вашему view.phtml

$this->formSubmit()->setTranslatorTextDomain('account'); 

Теперь ваше Сохранить FormLabels будет использовать этот ДОМЕН вместо ДОМЕНА по умолчанию. То же самое относится к любому другому типу объекта формы. Просто замените formSubmit на тип элемента.

Сообщите мне, если это поможет, или я ничего не пропустил.

+1

Глядя на ваш ответ, единственное, что не сразу понятно - как обрабатывать динамический текст (содержимое страниц, редактируемых пользователем). Это нужно было бы сделать динамически, и я предполагаю, что вне границ Gettext (или нет?), Поскольку администратор сайта должен иметь возможность предоставлять и редактировать переводы редактируемых частей страниц на нескольких языках на летать. Пример аналогичной концепции можно увидеть на Linked.in, при предоставлении резюме на разных языках. Я буду предоставлять обновление, если у меня возникнут проблемы с локализацией статических частей страниц. – Vilinkameni

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