关于数据库数据国际化方案

方案一:每个表设计一个翻译表

        数据库国际化的应用场景用到的比较少,主要用于对数据库的具体数据进行翻译,在需要有大量数据翻译的场景下使用,举个例子来说,力扣题目的中英文切换。参考方案可见:

https://blog.youkuaiyun.com/fxtxz2/article/details/107770364icon-default.png?t=O83Ahttps://gitee.com/link?target=https%3A%2F%2Fblog.youkuaiyun.com%2Ffxtxz2%2Farticle%2Fdetails%2F107770364优点:

  1. 灵活,能够为不同实体类型或者字段提供翻译支持,并可以很方便的对语言种类进行扩展
  2. 方便逆向查询:即根据翻译语言查出原始数据

缺点:

  • 查询和管理可能更复杂,可能需要较多的联合查询

方案二:映射转换

        使用映射的形式转换语言实现,绝大多数国际化程序的应用方案。举个例子说明映射式的翻译:你好 -> Hello。通过使用配置文件式存储对应关系,这种场景适用于国际化内容不怎么变化的场景,例如登录成功的提示信息,服务器出错的提示信息等。参考实现方案见下说明:

SpringBoot实现i18n国际化配置(超详细之跟着走就会系列)_springboot i18n-优快云博客文章浏览阅读2.9w次,点赞24次,收藏121次。一、新增国际化资源文件在resources文件下新建i18n文件,并新建国际化资源文件。如图:点击新增Resource Bundle文件。我们在Resource bundle base name处填写国际化文件的名称,笔者此处填“messages”。并点击中间偏右的“+”号,新增国际化语言,此处新增两个语言“zh_CN”,“en_US”。点击ok保存,看到这样的文件结构,就表示创建成功了:分别在两个文件中添加zh_CN:A00001=你好,世界A00002=你好,JAVAen_US:_springboot i18nhttps://blog.youkuaiyun.com/weixin_44248000/article/details/124061184优点:

  • 实现简单

缺点:

  • 不够灵活,不方便对数据库的数据进行翻译,在添加新翻译数据时,需要修改代码。

        虽然也可以对数据库的数据进行映射式的翻译,但是存在非常多的问题,比如线程安全和高并发情况下的效率过低问题。

方案三:JSON 存储

        实现方式是通过对应翻译记录的表,新增一个国际化JSON字段来保存对应语言的翻译结果值。参考实现如下:

mysql国际化存储方案_大厂国际化数据存储怎么做-优快云博客文章浏览阅读6.3k次,点赞5次,收藏11次。之前第一次做国际化项目,前期数据库是同事设计的,他的想法是,需要多语言的字段,全部用多个字段,如 name 存储中文姓名,english_name存储英文姓名,如果项目始终固定两种语言,这种设计完全没问题,但一旦需要新增语言,所有涉及到国际化的字段,全部要新增一个字段!后来重新想了个方案,mysql5.7支持json数据类型,需要国际化的字段,全部使用json类型,存储的数据示例:name..._大厂国际化数据存储怎么做https://blog.youkuaiyun.com/u013727805/article/details/82809991表设计参考:

CREATE TABLE Products (
    id INT PRIMARY KEY,
    translations JSONB
);

示例JSON字段:

{
    "en": {"name": "Product Name", "description": "Product Description"},
    "zh": {"name": "产品名称", "description": "产品描述"}
}

优点:

  • 灵活,能够存储任意数量的语言。

缺点:

  1. 查询和索引可能不如关系型字段高效,需要数据库支持 JSON 数据类型(当然也可以把翻译数据放在 MongoDB 中)
  2. 这种方式同样存在根据翻译字段查询原始数据不方便的问题

方案四:拦截器统一处理

        实现解决方案,参考以下链接。

Java后端实现动态数据国际化多语言自由切换技术方案 _ 潘子夜个人博客现在很多企业业务系统可能要支持多语言情形,你是否有考虑过Java后端如何实现动态数据国际化多语言自由切换技术方案?以下是Bivin网友在最近的项目中遇到的一个需求:为了更好地扩展海外业务,我们需要让平台的动态数据能够在中文简体、中文繁体和英语三种语言之间自由切换。这种情况类似于国际化的要求。虽然我之前在一些大型平台上见过类似的功能,但却从未有机会亲自进行设计。一时间,我感受到了巨大的压力,幸运的是,通过反复思考,我终于构思出了一种应对动icon-default.png?t=O83Ahttps://www.panziye.com/java/7674.html

方案五:自定义注解转换

【SpringBoot】自定义注解<约定式i18n国际化>终极升级版方案源码Copy_springboot i18n 注解-优快云博客文章浏览阅读1k次,点赞14次,收藏16次。@I18n 这个自定义注解,优点:无需写多余代码,包含(国际化与转换Bean逻辑),I18nManager 管理类,优点直接定位逻辑,速度快。​码云地址:https://gitee.com/binbinbui/i18n/tree/master/_springboot i18n 注解https://blog.youkuaiyun.com/qq_42470947/article/details/140968852

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值