我正在开发一款Play应用程序,可以处理产品类别,产品...... 我的应用程序必须处理多种语言:fr,en,es,de。
我对页面标题等“界面”元素的翻译没有任何问题......这可以通过conf / messages文件轻松完成。
但我没有找到任何资源谈论内容的翻译。例如,类别的名称在几种语言中是不同的。
体验式解决方案:
我想出了第一个解决方案,但我担心它会导致网站增长时表现不佳。假设我有这些实体:
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 ,我将在I18nProduct表中为每个lang添加一行。
你认为这是一个好的模式,还是绝对不是一个好主意? 大项目如何管理这个(亚马逊,eBay ......)?
由于
答案 0 :(得分:1)
不了解亚马逊,但我从TYPO3 typo3继承的解决方案正在使用带有其他所有字段的单一模型:
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)收集他们的uid并选择所有lang_id=2
和i18n_parent_uid in (1,2,3,4)
的记录,并执行单个记录中每个集的翻译