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

时间:2014-02-27 08:50:12

标签: joomla internationalization joomla-extensions

我目前正在为Joomla 3.x开发我的第一个MVC组件。总而言之,我在数据库中遇到语言/翻译问题。

我的问题是我需要存储来自后端的用户生成内容的翻译内容。例如,有人用德语输入一个新项目(存储在数据库中),需要另一种语言的翻译。如何在Joomla实现这一目标?我不喜欢在其余语言完全相同的情况下为每种语言生成一个新项目。

我想到了一个表“item”和一个带有该结构的表“item_language”(为了查看目的而大大简化):

项目

id PRIMARY INT
price DOUBLE(4,2)

item_language

itemid PRIMARY INT
language PRIMARY CHAR(5)
name VARCHAR(50)

item_language中,我想存储不同的翻译版本。在language字段中,将有区域代码(例如de-DE)来标识语言。

我的问题:

  • 如何在后端显示不同(已翻译)的版本?
  • 这是正确的数据库模型吗?

感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

你真的发现自己在Joomla中的第一个组件是一个很好的任务!

一个相当通才的回答:

  • 数据库模型似乎正确。或者,您可以使用JSON语言数据进行编码,但这可能会使以后的查询操作变得困难。这样,您只能使用一个表。

  • 据我所知(如果您使用JModel / JTable来操作数据)不能直接执行此操作,因为JTable实际上只是为了操作单个表而设计的。

你能做什么:

  • 用于编辑:想象一种以图形方式表示(供用户查看和编辑这种一对多关系)并将此数据(语言文本作为数组)发布到JModel的方法。在模型中,您可以使用JTable维护所需的关系并保存数据。

  • 查看(不进行编辑)应该不是问题,这将是一个简单的JOIN。

如果你愿意在github上创建一个基本组件,我甚至可以帮你一把JModel / JTable。

答案 1 :(得分:0)

我找到了处理我需要的东西的方法 感谢 Valentin Despa 指导我朝着正确的方向前进: - )。

这里整个过程(简化 - 验证和省略的确切步骤):

  • 正常定义models/forms/site.xml中的表单字段。
  • views/site/tmpl/edit.php中添加自编码的Javascript(基于jQuery)来处理在数据库中存储为JSON的多种语言内容的字段。
    • 克隆原始表单元素并修改所需的属性(id,name,...)以显示仅适用于已定义语言的特殊版本。作为内容 - 从原始字段内容中提取所需语言的JSON并显示。
    • 使用Javascript隐藏原始字段,并将自定义版本附加到DOM。
  • 之后在tables/site.php中,我使用JInput阅读动态生成的内容,并通过生成JSON并保存到数据库来构建原始字段。

它的运作与预期的一样。