将翻译版本存储在Joomla组件的数据库中



我目前正在为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并保存到数据库来构建原始字段

工作正常。

最新更新