业务需要,所以看了一下国际化。我还是用的是freemarker做的
整体项目结构pom文件就不说了,加一个freemarker包。
配置文件application
server.port=8081
spring.messages.basename=i18n/messages
spring.freemarker.settings.auto_import=/spring.ftl as spring
然后在resouces下建立i18n
文件夹。里面三个文件messages.properties
,messages_en.properties
,messages_zh.properties
。
里面样式为中文的是myname=李甲
,英文的是myname=lijia
。这个key是后面页面上需要调用的。
下面有个spring.ftl,这个是
拷贝出来的。对应application里面的
spring.freemarker.settings.auto_import
然后就是启动类
APP.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@SpringBootApplication
@Controller
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
@RequestMapping("/login")
public String login(){
return "login";
}
}
页面login.ftl
<!DOCTYPE html>
<html lang="zh">
<body>
my name is <@spring.message "myname"/>
</body>
</html>
启动程序输入 http://localhost:8081/login(我用的是火狐,google我这还需要重启)
然后更换火狐显示语言,在选项里面的语言栏。把英语移上去
再刷新刚刚的页面,会发现变成英文的
这实现了简单的页面国际化。
如果是从后台设置呢?
会话区域解析器之SessionLocaleResolver
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
sessionLocaleResolver.setDefaultLocale(Locale.US);
return sessionLocaleResolver;
}
上面的Locale.US
用的就是上面messages_en.properties
文件的语言,如果改成Locale.CHINA
就会使用messages_zh.properties
文件的语言。
但是动态切换。添加配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
@Configuration
public class I18nConfig extends WebMvcConfigurerAdapter {
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
return slr;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
然后在前台url上面加上?lang=en_US
或者?lang=zh_CN
来动态切换语言。
只是做个记录。
网友评论