## 一、功能描述

提供前后端在请求中得国别进行对应语言的渲染 将国际化语言持久化到mysql提供实时管理，缓存到redis 提供服务模块的快速加载 前端通过api加载完成页面国际化；后端通过redis 快速加载，通过字典注解、工具类完成列表查询内容国际化。
## 二、代码运行截图：
![输入图片说明](/imgs/2024-02-26/JoOO6kJ0nyi07wY2.png) 
## 三、使用方法
1.  以组嵌入当前
1.  方式引入在当前 springboot 工程引入 组件包
``` xml

这里输入代码 <dependency>  
   <groupId>net.rzdata</groupId>  
   <artifactId>rz-i18n</artifactId>  
   <version>0.0.2-SNAPSHOT</version>  
 </dependency>
```


3.  组件包扫描包
    
``` java
 @ComponentScan(basePackages = {"org.example","com.blueland"})  
 @MapperScan(basePackages = {"org.example","com.blueland.common.core.mapper"})  
 @EnableAutoConfiguration  
 public class App {  
     public static void main(String[] args) {  
         SpringApplication.run(App.class, args);  
     }  
 ​  
 }
```
4.  增加配置文件 application.yml
    
``` yml
 server:  
   port: 8080  
   servlet:  
     context-path: /crm-internation  
     session:  
       cookie:  
         name: crm-internation  
 ​  
 spring:  
   datasource:  
     type: com.alibaba.druid.pool.DruidDataSource  
     druid:  
       driver-class-name: com.mysql.cj.jdbc.Driver  
       username: crm  
       password: crm@123  
       url: jdbc:mysql://192.168.1.13:3308/crm_usm?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8  
   redis:  
     database: 9  
     host: 192.168.1.169  
     password: ''  
 tm:  
   secretId: AKID4IXccMhHdjcJm0wqPjndHhspkbDbGeJz  
   secretKey: aw3v5B3h8OPQO7j8JPGsFNHwMXTAcprf  
 ​  
 logging:  
   level:  
     com.blueland.common.core: debug  
 mybatis-flex:  
   type-aliases-package: com.blueland.common.core.domain  
 ​  
 ​  
 knife4j:  
   enable: true  
   openapi:  
     title: 国际化接口文档  
     group:  
       test1:  
         group-name: 国际化  
         api-rule: package  
         api-rule-resources:  
           - com.blueland.common.core.controller
```
5.  创建数据库表：
    
```sql
 CREATE TABLE `t_international` (  
   `id` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '唯一ID',  
   `code` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国际化编码',  
   `name` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名称',  
   `lang` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '语言',  
   `type` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '标识（前端：front，后端：back）',  
   `tenant_id` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '租户号',  
   `create_by` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',  
   `create_time` datetime DEFAULT NULL COMMENT '创建时间',  
   `update_by` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',  
   `update_time` datetime DEFAULT NULL COMMENT '更新时间',  
   KEY `idx_code` (`code`) USING BTREE  
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='国际化';
```

#### 运行截图：![输入图片说明](![输入图片说明](/imgs/2024-02-26/ikb68J8TnjxnFA2y.png) 访问接口文档： ![输入图片说明](/imgs/2024-02-26/JJQNJxHzK0bfeCcd.png)请求接口： 
![输入图片说明](/imgs/2024-02-26/cClv3SOuY1urVvZ3.png)
#### 前端接入：

请求前端接口：**GET** /crm-internation/international/findLangPackage header: tenantid:MID 参数： type:front 
![输入图片说明](/imgs/2024-02-26/MB4dmiMkF7TpxPCk.png)
![输入图片说明](/imgs/2024-02-26/cnSNuRM7QVSsljxS.png)
#### 后端接入：
输入图片说明
解析code
``` java
MessageSendUtil.send(receiveStaffCode, I18nUtils.getTitle("product.gift_send_notice"),  
        CommonConstant.MESSAGE_TYPE_QYWX, I18nUtils.getTitleFormat(ProductI18nConstant.PRODUCT_GIFT_AUDIT_MSG, stockingApply.getCreateName()),  
        CommonConstant.MESSAGE_CREATEBY_CRM, UserUtils.getTenantId(), stockingApply.getApplyCode());
```
getTitle:
``` java
public static String getTitle(String code) {  
    International international = getByCode(code, "back");  
    return ObjectUtil.isNull(international) ? code : international.getName();  
}
```
从redis获取内容
``` java
private static International getByCode(String code, String type) {  
    return (International)REDIS_UTILS.hget(getRedisKey(), getHashKey(code, type), International.class);  
}
```
请求前端接口：**GET** /crm-internation/international/findLangPackage header: tenantid:MID 参数： type:back
![输入图片说明](/imgs/2024-02-26/t5WiMJ7apx7JQy6B.png)

### 2. 以接口的方式调用
#### 前端接入：
参考方式1 前端接入
#### 后端接入：
请求前端接口：**GET** /crm-internation/international/findLangPackage header: tenantid:MID 参数： type:back
![输入图片说明](/imgs/2024-02-26/t5WiMJ7apx7JQy6B.png)

<!--stackedit_data:
eyJoaXN0b3J5IjpbLTEyMjcxMTI2MDUsMTMzMTgxNjA4MCwxMz
A4MTk1OTI5LC0xMjM5MDg2OTA4LC01MDM2MzI4NzgsMTU4Mzky
MDk3NSw4MDc5MzM3MDUsMTI1NDg0NTM4MiwtNTM1NTg4MTM2LD
E5ODA2MzU5OTEsMTM0MTIzMDk1NF19
-->