2013-01-09 5 views
0

Я создал веб-сайт в Symfony2, используя веб-сайт website.com/_locale/xxxxxxxx, чтобы перевести статические данные на два языка. Эта реализация работает успешно, но я хочу пойти дальше этого. Я хочу запустить этот веб-сайт для нескольких других стран, и необходима правильная трансформация, чтобы управлять этими странами (с разными языками) на одном веб-сайте.Symfony2 распространение данных на нескольких языках

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

Я хочу, чтобы у пользователя была возможность создать новый магазин на двух языках: английском и английском. Решения я думал, являются:

  • Я создам новый столбец в той же таблице, например, «original_language» и каждая запись будет сохранена с локалью: en_US, es_SP и т.д. Когда сайт хочет получить строка будет выполнять поиск по ОДНОЙ таблице будет тысячи записей.
  • Я создам другую таблицу, которая будет зеркалом оригинальной, на другом языке. Это означает, что у меня будет таблица/организация «Магазины», «Магазины_и», «Магазины_и», «Магазины_бр» и т. Д. К сожалению, это решение потребует от меня создания нескольких таблиц и связей между другими связанными таблицами.
  • Я создам еще один столбец в той же строке для каждого поля. Shops.description, Shops.address и т.д. также будет включать Shops.description_en, Shops.description_br, Shops.address_en, Shops.address_br и т.д.

Что является самым безопасным, быстрым и более профессиональным способом сделать то, что я хотеть?

+0

Не ходи с несколькими таблицами/колонок! Это ужасно, и мне приходится иметь дело с ним в старых базах данных! Просто не надо! – Ocramius

+0

Так это плохая практика? – Radolino

+0

Да, это так. Все, что вы представляете в виде коллекции/индексированной коллекции, представляет собой таблицу в SQL. Если вы получили несколько значений для поля, это отношение 1-n. – Ocramius

ответ

1

Либо используйте [DoctrineExtensions][1] lib, чтобы перевести ваши столбцы (он использует структуру EAV для переводов), или напишите 1-n отношения для переведенных объектов, имеющих «базовую» сущность и «переведенную». Вы можете использовать атрибут коллекции indexBy, чтобы сделать выборку и логику проще в обращении.

+0

Хорошо, я понял, что вы предложили, но я считаю, что вы неправильно поняли. Не имеет никакого отношения к переводу, но хранение данных для одного и того же объекта на разных языках. Магазин может иметь одно и то же имя на обоих языках, но данные могут быть изменены. Пользователю может потребоваться установить разные данные для английского и испанского описания. Но структура сущности абсолютно одинакова. – Radolino

+0

Это по-прежнему концепция, связанная с переводом – Ocramius

+0

Это концепция, связанная с базой данных. Проблема заключается в том, как данные будут сохраняться и извлекаться из базы данных. – Radolino

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