0

Я разрабатываю приложение Play, которое будет обрабатывать категории продуктов, продукты ... Мое приложение должно обрабатывать несколько языков: fr, en, es, de.Перевести контент в приложении «Приложение 2.2»

У меня нет проблем с переводом «интерфейсных» элементов, таких как названия страниц и т. Д. Это легко сделать через файлы conf/messages.

Но я не нашел никакого ресурса, говорящего о переводе содержимого. Например, название категории отличается на нескольких языках.

Expermimental решение:

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

Lang : id, code, name 
Category : id, code 
I18nCategory : category_id, lang_id, name, description 
Product : id, code 
I18nProduct : product_id, lang_id, name, description, short_description 

Как вы видите, я должен иметь два объекта вместо одного для лиц, которые имеют поля для перевода. Если у меня есть Продукт 1, у меня будет строка для каждого lang в таблице I18nProduct.

Считаете ли вы, что это хороший образец или совсем не хорошая идея? Как управлять большими проектами (Amazon, eBay ...)?

Благодаря

ответ

1

Не знаю, Amazon, но решение, которое я унаследовал от TYPO3 использует одиночные модели с Additionall областях, как:

Category: 
    Integer id 
    String  code 
    Lang  lang 
    Category i18n_parent 
    String  name 
    String  description 

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

SELECT * FROM category WHERE id = 123 AND i18_parent_id IS NULL 

для не язык по умолчанию, вам нужно получить 2 записей сразу:

SELECT * FROM category WHERE id = 123 AND i18_parent_id IS NULL OR (lang_id = 2 AND i18_parent_id = 123) 

И затем объединять обе строки в один объект, используя значения из оригинального языка сайта, если, то есть в переводе записи это нуль

Для построения т. списки переведенных записей, в первом запросе выберите все обязательные записи на языке по умолчанию (без i18n_parent), соберите их uids и выберите все записи, где lang_id=2 и i18n_parent_uid in (1,2,3,4), и выполните перевод каждого набора в виде одной записи

+0

Спасибо за решение. хороший. Но меня беспокоит то, что вам нужно идти на уступки по непустым и уникальным полям. Например, в моем случае код продукта должен быть уникальным, я должен изменить ограничение, чтобы сделать (код, lang_id) уникальным ... Но, если только один класс на объект больше подлежит перенаправлению, я изменюсь для вас. Благодаря ! – c4k

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