翻译Play 2.2应用程序中的内容

时间:2014-01-31 00:56:33

标签: database-design internationalization playframework-2.0

我正在开发一款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 ......)?

由于

1 个答案:

答案 0 :(得分:1)

不了解亚马逊,但我从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=2i18n_parent_uid in (1,2,3,4)的记录,并执行单个记录中每个集的翻译