我目前正在为Joomla3.x开发我的第一个MVC组件。总而言之,我有点难以解决数据库中的语言/翻译问题。
我的问题是,我需要存储来自后端的用户生成内容的翻译内容。例如,有人用德语输入了一个新项目(存储在数据库中),并需要另一种语言的翻译。如何在Joomla实现这一点?当其他语言都一样的时候,我不喜欢为每种不同的语言生成一个新项目。
我想到了一个表"item"和一个具有这种结构的表"item_language"(为了便于查看而进行了强烈简化):
项目
id PRIMARY INT
price DOUBLE(4,2)
项目语言
itemid PRIMARY INT
language PRIMARY CHAR(5)
name VARCHAR(50)
我想在item_language
中存储不同的翻译版本。在language
字段中,将存在用于识别语言的区域代码(例如de de)。
我的问题:
- 如何在后台显示不同的(翻译的)版本
- 这是正确的数据库模型吗
感谢您的帮助!
对于Joomla中的第一个组件,您真的发现自己是一项不错的任务
一个相当笼统的答案:
-
数据库模型似乎是正确的。或者,您可以用JSON对语言数据进行编码,但这可能会使以后的查询操作变得困难。这样你就只有一张桌子可以使用了。
-
据我所知(如果您使用JModel/JTable来操作数据)不能直接做到这一点,因为JTable实际上只设计用于操作单个表。
你能做什么:
-
编辑:设计一种以图形方式表示这一点的方法(供用户查看和编辑这种一对多关系),并将这些数据(语言文本作为数组)发布到JModel。在模型中,您可以使用JTable维护所需的关系并保存数据。
-
查看(无需编辑)不应该是一个问题,它将是一个简单的JOIN。
如果您愿意在github上创建一个基本组件,我甚至可以帮助您使用JModel/JTable。
我找到了一种方法来处理我需要的东西
感谢Valentin Despa为我指引了正确的方向:-)。
这里是整个过程(简化的验证和省略的确切步骤):
- 正常定义
models/forms/site.xml
中的表单字段 - 在
views/site/tmpl/edit.php
中,添加了基于jQuery的自编码Javascript来处理数据库中以JSON形式存储的具有多种语言内容的字段。- 克隆原始表单元素并修改所需的属性(id、name…),以显示仅适用于已定义语言的特殊版本。作为内容-从原始字段内容和显示中提取所需语言的JSON
- 使用Javascript隐藏原始字段,并将自定义版本附加到DOM中
- 然后在
tables/site.php
中,我用JInput
读取动态生成的内容,并通过生成JSON并保存到数据库来构建原始字段
工作正常。