站点语言由域或子域决定。 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/