将翻译放在JSON中是一个好主意吗?

时间:2017-04-10 15:44:41

标签: php mysql sql json database

我喜欢转发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%';

所以问题是: 问题是: 谁使用这种方法,是否有利润,生产如何显示?

1 个答案:

答案 0 :(得分:0)

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

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

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

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