欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

79-java-springboot(5)-国际化

程序员文章站 2022-05-17 09:03:04
...

三.国际化
1、编写国际化配置文件,抽取页面需要显示的国际化消息
79-java-springboot(5)-国际化

说明:
1.新建一个文件xxx.properties
2.新建一个文件xxx_en_US.properties
上面两步完成之后,springboot会扫描出我们是要做国际化,会自动生成国际化视图.
3.添加其他语言的properties文件
4.分别给所有的文件,对应的属性设值.

2、SpringBoot自动配置好了管理国际化资源文件的组件;
MessageSourceAutoConfiguration #springboot默认注入的组件

@Configuration
@ConditionalOnMissingBean(value = MessageSource.class, search = SearchStrategy.CURRENT)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
@Conditional(ResourceBundleCondition.class)
@EnableConfigurationProperties
public class MessageSourceAutoConfiguration {

	private static final Resource[] NO_RESOURCES = {};

	@Bean
	@ConfigurationProperties(prefix = "spring.messages")
	public MessageSourceProperties messageSourceProperties() {
		return new MessageSourceProperties();
	}
	//读取配置文件的基本路劲
	private Resource[] getResources(ClassLoader classLoader, String name) {
			String target = name.replace('.', '/');
			try {
				return new PathMatchingResourcePatternResolver(classLoader)
						.getResources("classpath*:" + target + ".properties");
			}
			catch (Exception ex) {
				return NO_RESOURCES;
			}
		}
		//默认读取的配置文件
		@Override
		public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) {
			String basename = context.getEnvironment().getProperty("spring.messages.basename", "messages");
			ConditionOutcome outcome = cache.get(basename);
			if (outcome == null) {
				outcome = getMatchOutcomeForBasename(context, basename);
				cache.put(basename, outcome);
			}
			return outcome;
		}	

说明:

  • 默认读取的配置文件是跟路劲下的 messages.properties
  • 如果要指定读取自定义的配置文件
# 国际化配置文件(包名.基础名)
spring.messages.basename=i18n.login

3、去页面获取国际化的值;
th:text="# {login.btn}"

<button class="btn btn‐lg btn‐primary btn‐block" type="submit" th:text="# {login.btn}">Sign in</button>

效果:根据浏览器语言设置的信息切换了国际化;

原理: 国际化Locale(区域信息对象);LocaleResolver(获取区域信息对象);

如果要实现点击按钮实现国际化语言切换,则需要自定义LocaleResolver.

/**
 * 可以在连接上携带区域信息
 */
public class MyLocaleResolver implements LocaleResolver {
    
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        String l = request.getParameter("l");
        Locale locale = Locale.getDefault();
        if(!StringUtils.isEmpty(l)){
            String[] split = l.split("_");
            locale = new Locale(split[0],split[1]);
        }
        return locale;
    }

    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {

    }
}

	@Bean
	public LocaleResolver localeResolver(){ 
		return new MyLocaleResolver(); 
	} 
}
相关标签: springboot 框架