mysql - 如何保存多语言网站的翻译和属性?

标签 mysql database-design

站点语言由域或子域决定。 site.com - 英语,fr.site.com - 法语。有一个表“domains”,其中存储这些记录。

我创建了一个多态表“domainable_attributes”来保存翻译和多个属性(许多实体使用此表):

  • ID
  • domain_id
  • entity_id
  • 实体类型
  • 标题
  • 链接
  • 文本
  • 排序
  • is_active

但我遇到了一些实体需要依赖于域(语言)的附加属性的问题。将来,其他实体也可能会根据域接收属性。

  • 产品:保修、视频
  • 集合:in_slider、in_navigation、on_total_page
  • 品牌:类型

我有几个解决这个问题的方法,但我不知道哪个是最正确的:

1) 将所有这些列添加到表“domainable_attributes”中,并且可以为空。

2) 创建“product_domainable_attributes”、“brand_domainable_attributes”、“collection_domainable_attributes”等表 但是,例如,集合的事件和排序将位于“domainable_attributes”表中,而 in_slider、in_navigation、on_total_page 则位于“collection_domainable_attributes”表中。

3) 将表“domainable_attributes”重命名为“translations”并删除 is_active,sorting。 (仅翻译将存储在其中)。并创建表格,例如:

  • article_domainable_attributes(is_active,排序)
  • news_domainable_attributes(is_active,排序)
  • page_domainable_attributes(is_active,排序)
  • rubric_domainable_attributes(is_active,排序)
  • product_domainable_attributes(is_active、保修、视频)
  • brand_domainable_attributes(is_active、排序、类型)
  • ...

有人做过这样的事吗?你有什么建议?

最佳答案

对于文本的批量翻译(例如新闻文章的正文),我会在一个表上有一个 id;该 id 将链接到另一个表,其中 id+语言为主键,TEXT专栏采用不同的语言。注意:使用utf8mb4 .

对于短单词和短语,id可能是英文版本。 (或者选择您最喜欢的通用语言——罗马语、法语和俄语不再流行;印地语和斯瓦希里语可能受到限制。)

对于链接、日期和其他可以针对区域设置进行不同格式设置的内容,我将构建一些“动态”计算要显示的字符串的函数机制。例如,“2019 年 5 月 6 日”与“2019 年 5 月 6 日”; “1,234.56”与“1.234,56”。在这些情况下,是恒定的; 格式(以及一些内置翻译,例如月份名称)内置于函数中。

链接可以很容易地实现功能:https://the.site/<<locale>>/foobar_page.html

(我不明白你的问题,但也许我已经给了你一些线索。)

关于mysql - 如何保存多语言网站的翻译和属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56010894/

相关文章:

mysql - 将数字的中间值更改为 "xxxx"

mysql - 如何高效地存储位置和路径并找出最短的旅行路线

c# - 处理应用程序重新设计

database-design - 信用卡号可以包含前导零吗?

mysql - 数据建模/标准化问题

MySQL基于列连接两个表并排除另一列的值

mysql - 在同一张表中使用外键

mysql - Sqoop将mysql表新添加的列导入到现有的hive表

mysql - 在 MySql 中保存日期值

mysql - 从数据库生成 HTML 表单并将值存储到数据库中