java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot3国际化

SpringBoot3实现国际化的代码步骤

作者:编码浪子

国际化,简称 i18n,源自国际化英文单词 internationalization 中首字母 i 与尾字母 n 之间有 18 个字母,本文给大家介绍了SpringBoot3实现国际化的操作步骤,并通过代码示例讲解的非常详细,需要的朋友可以参考下

国际化实现步骤

Spring Boot 3 提供了强大的国际化支持,使得应用程序可以根据用户的语言和区域偏好适配不同的语言和地区需求。

添加国际化资源文件: 国际化资源文件通常放在 src/main/resources 目录下,并按照不同的语言和地区命名,例如:

配置 MessageSource Bean: 可以通过在 application.propertiesapplication.yml 中进行简单配置来加载国际化资源文件:

spring:
  messages:
    basename: messages
    encoding: UTF-8

或者在配置类中定义 MessageSource Bean:

@Configuration
public class MessageConfig {
    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }
}

示例

配置国际化yaml

spring:
  messages:
    encoding: UTF-8
    basename: i18n/messages
  profiles:
    active: zh_CN
#-Dspring.profiles.active=en_US

英文

server:
  port: 8000
spring:
  jackson:
    date-format: MM-dd-yyyy

中文

spring:
  jackson:
    date-format: yyyy-MM-dd
server:
  port: 8000

国际化配置

package com.cokerlk.language;
 
import com.cokerlk.language.service.EnUSProductService;
import com.cokerlk.language.service.IProductService;
import com.cokerlk.language.service.ZhCNProductService;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
 
@Configuration
@Data
public class I18NConfiguration {
    @Value("${spring.profiles.active}")
    private String locale;
 
    @Profile("zh_CN")
    @Bean
    public IProductService zhCNBussService(){
        return new ZhCNProductService();
    }
 
    @Profile("en_US")
    @Bean
    public IProductService enUSBussService(){
        return new EnUSProductService();
    }
}

产品接口

package com.cokerlk.language.service;
 
import java.util.Map;
 
 
public interface IProductService {
     Map<String,String> getProduct();
}

中文产品

package com.cokerlk.language.service;
 
import com.cokerlk.language.I18NConfiguration;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.MessageSource;
 
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
 
@Slf4j
public class ZhCNProductService implements IProductService {
    @Resource
    I18NConfiguration i18NConfiguration;
    @Resource
    MessageSource messageSource;
 
    @Override
    public Map getProduct() {
        log.info("中文");
        Map result = new HashMap();
        result.put("create-date", new Date());
        result.put("text", messageSource.getMessage("product_name", null, Locale.of(i18NConfiguration.getLocale())));
        return result;
    }
}

英文产品

package com.cokerlk.language.service;
 
import com.cokerlk.language.I18NConfiguration;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.MessageSource;
 
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
 
@Slf4j
public class EnUSProductService implements IProductService {
    @Resource
    I18NConfiguration i18NConfiguration;
    @Resource
    MessageSource messageSource;
 
    @Override
    public Map<String,String> getProduct() {
        log.info("英文");
        Map result = new HashMap();
        result.put("create-date", new Date());
        result.put("text", messageSource.getMessage("product_name", null, Locale.of(i18NConfiguration.getLocale())));
        return result;
    }
}

message配置

#messages.properties
product_name=huawei mate 70
#messages_en_US.properties
product_name=Hua wei mate 70
#messages_zh_CN.properties
product_name=华为mate70

测试结果

到此这篇关于SpringBoot3实现国际化的代码步骤的文章就介绍到这了,更多相关SpringBoot3国际化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文