【问题标题】:Store translated versions in database for Joomla component将翻译版本存储在 Joomla 组件的数据库中
【发布时间】:2014-02-27 08:50:12
【问题描述】:

我目前正在为 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)来识别语言。

我的问题:

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

感谢任何帮助!

【问题讨论】:

    标签: joomla internationalization joomla-extensions


    【解决方案1】:

    您真的发现自己在 Joomla 中的第一个组件是一项不错的任务!

    一个相当笼统的答案:

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

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

    你可以做什么:

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

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

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

    【讨论】:

    • 感谢您的回复。我只是想知道在 JForm 中表示它的最佳方式是什么。首选方式是我猜为不同语言的自定义 JFormField 实现。你能提出一些建议吗? :-) 在列表中读取和显示正确的版本不是问题。我只是想知道用于创建/编辑具有不同版本的条目的表单。谢谢!
    • 尝试找到一个通用的 JavaScript / jQuery 解决方案来满足您的需求。让它独立工作,而不是想办法用 JFormField 完成它
    【解决方案2】:

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

    这里是整个过程(简化 - 省略验证和具体步骤):

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

    一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-23
      • 2011-12-05
      • 1970-01-01
      • 2011-02-09
      • 2018-08-25
      • 1970-01-01
      • 2015-04-04
      • 2021-10-28
      相关资源
      最近更新 更多