【问题标题】:Is it a good idea to place translations in JSON?将翻译放在 JSON 中是个好主意吗?
【发布时间】:2017-04-10 15:44:40
【问题描述】:

我喜欢转发Relation DB的概念,所以我通常会创建表。 但现在我得到了一项任务,这让我考虑使用带有翻译的 json 字段。

简单介绍一下任务: 有必要实现多语言应用程序。我通常创建表格:

  • 内容
  • content_translations
  • contents_images
  • contents_image_translations

通常它们的结果并不多(大约 5-7 点)。但现在我需要导入一些带有 GEO 数据(国家、地区、城市、地方)的数据库。我试图创建 1 个翻译表,但后来我们失去了使用外键和使用多态连接的能力。我的例子不是很大,但是我有很多这样的表,并且应该创建太多带有翻译的表(它们只包含 Id、Relation_id 和 Name)。

那就是我想尝试使用 JSON 字段。 MySQL 5.7 提供了这种字段。 字段结构如下:

...
json_encode([
    'ru' => ['locale' => 'ru', 'name' => $data['title_ru']],
    'en' => ['locale' => 'en', 'name' => $data['title_en']],
]);
...

选择样本:

SELECT
  alias, translations,
  JSON_UNQUOTE(json_extract(translations, '$.en.name')) AS like_name
FROM geo_countries
WHERE
  JSON_UNQUOTE(json_extract(translations, '$.en.name')) LIKE '%Ukraine%'
  OR
  JSON_UNQUOTE(json_extract(translations, '$.ru.name')) LIKE '%Ukraine%';

所以问题是: 问题是: 谁使用这种方法,是否有利润,生产如何表现出来?

【问题讨论】:

  • 几乎所有你能想到的翻译系统在代码方面都很好。最大的问题是如何管理翻译:更新可翻译的字符串,让第三方翻译它们,管理缺失的字符串......这就是所有自制系统都失败的地方。

标签: php mysql sql json database


【解决方案1】:

您应该尝试使用标准方法,例如与CakePHPWordPressLaravel 一起使用。

它们都有指定您要使用的语言环境的数据库表。然后您可以进一步将您的翻译存储在数据库中。

我会坚持使用标准模型来处理这种翻译结构。只有在纯 JavaScript 实现中,他们才会尝试将 JSON 数据用于翻译表。

  1. CakePHP Translations in the database
  2. Laravel translations
  3. WordPress translations
  4. POEdit

【讨论】:

  • __('My String') 这么有意义的函数名。我讨厌 Wordpress 的另一个原因 :/ 不错的答案!
  • @ʰᵈˑ _()gettext() 的标准快捷别名,所以__() 实际上是一个相当不错的名字。
  • @ÁlvaroGonzález 是的,我知道,但是快捷方式名称仍然没有真正说明它的作用。我知道这是一条捷径,但仍然。我相信函数名称应该描述它的作用。 _() 没有。不过个人喜好,我更愿意看到gettext() 而不是_()
  • 是的 - 这是一个标准,不是 WordPress 或 PHP 的错!拥有它真的很不错,它是一个空的包装函数,您无需真正考虑就将所有输出字符串放在周围,然后到了翻译它的时候,它就在那里
  • 另外 - 我已经从我的答案中删除了该部分,但我意识到这不是 OP 所要求的 - 他只是希望数据库结构将翻译存储在其中,而不是在 PO 文件中跨度>
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
相关资源
最近更新 更多