Многоязычный сайт в Zend Framework - PullRequest
2 голосов
/ 30 октября 2010

Я работаю на сайте, чтобы включить многоязычную поддержку.Я могу перевести строки, используя Zend_Translate, но как насчет содержимого?Например, мне нужно добавить несколько записей для одного и того же продукта для каждого языка?Или есть другой способ?Я новичок в многоязычном, пожалуйста, помогите.Заранее спасибо.

--- Дополнение -----------------------------

ОК, я решил использовать смешанное решение, чтобы использовать API перевода Google и сохранить его в базе данных для дальнейшего редактирования.Так какова должна быть структура базы данных для хранения переводов ???

  1. Должен ли я сохранить переводы другого языка в той же таблице, что и родительская запись.то есть для продукта в таблице продукта с дополнительным столбцом для языка идентификации.
  2. Обобщенная таблица для хранения всех переводов всех таблиц.например, переводы (id bigint, table_name vc (50), table_id bigint, язык, column_name vc (50), перевод)

если я сохраню записи в связанных таблицах

1 Ответ

7 голосов
/ 30 октября 2010

Несколько возможных подходов:

  1. Использование gettext (или программного обеспечения, такого как Poedit ) для извлечения данных из содержимого.Возможно с переменной интерполяцией.
  2. Создание фильтра представления, как описано в: Zend Framework and Translation
  3. Раздельное содержание данных в базе данных.
    Если вы хранитесодержимое в формате разметки (например, Markdown ), любой может легко перевести его.Создать поисковик на разных языках легко.

Кажется, что третий подход требует больше всего усилий, но он того стоит.

Обновление после комментария

Я предполагаю, что вы храните данные о вашем продукте в базе данных, втакие поля, как:

- product_data
-- id
-- price
-- name
-- description
-- etc…

Поэтому вы должны изменить его, чтобы добавить поля для переведенных строк на каждом языке:

- product_data
-- id
-- price

- product_data_translations
-- product_id
-- language (e.g. en)
-- name
-- description
-- etc

Затем вы можете легко создавать запросы SQL для извлечения переведенных данных where product_id=x and language="fr".

Вы также можете использовать Doctrine I18N , чтобы сделать это для вас автоматически.

Вам необходимо перевести контент вручную (или автоматизировать перевод с помощью Google API),но затем вы можете легко проиндексировать его, используя, например, Zend_Search_Lucene .

...