springboot + freemarker 实现国际化

前言  

写过一篇springboot+freemarker国际化过程中的细节问题,但没有写过具体的国际化实现过程。正好有人在问,我就把我实现的过程贴出来,即使自己知识的一个备份,如果对别人有点用,那是再好不过了。

 

1.springboot项目创建

springboot步入2.0后,已经逐步成为了java web快速开发的首选框架,项目的创建过程也是非常简单,教程非常多,我就不赘述了。下图时我创建的一个demo项目。

 

pom文件:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 4     <modelVersion>4.0.0</modelVersion>
 5     <groupId>com.zhangs</groupId>
 6     <artifactId>i18n-demo</artifactId>
 7     <version>0.0.1-SNAPSHOT</version>
 8     <packaging>jar</packaging>
 9 
10     <name>i18n-demo</name>
11     <description>Demo project for Spring Boot</description>
12 
13     <parent>
14         <groupId>org.springframework.boot</groupId>
15         <artifactId>spring-boot-starter-parent</artifactId>
16         <version>2.0.6.RELEASE</version>
17         <relativePath/> <!-- lookup parent from repository -->
18     </parent>
19 
20     <properties>
21         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
22         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
23         <java.version>1.8</java.version>
24     </properties>
25 
26     <dependencies>
27         <dependency>
28             <groupId>org.springframework.boot</groupId>
29             <artifactId>spring-boot-starter-freemarker</artifactId>
30         </dependency>
31         <dependency>
32             <groupId>org.springframework.boot</groupId>
33             <artifactId>spring-boot-starter-web</artifactId>
34         </dependency>
35 
36         <dependency>
37             <groupId>org.springframework.boot</groupId>
38             <artifactId>spring-boot-starter-test</artifactId>
39             <scope>test</scope>
40         </dependency>
41     </dependencies>
42 
43     <build>
44         <plugins>
45             <plugin>
46                 <groupId>org.springframework.boot</groupId>
47                 <artifactId>spring-boot-maven-plugin</artifactId>
48             </plugin>
49         </plugins>
50     </build>
51 </project>
View Code

 

2. 各种配置

2.1 首先是application.properties的配置

  spring.messages.basename  指定了国际化文件的路径+文件前缀(不同语言,后缀是不一样的),如果不指定,默认是classpath下的messages_*.properties

 

2.2 增加一个全局配置类MainConfig,继承WebMvcConfigurationSupport

addInterceptors方法中增加了一个国际化拦截器,会拦截前端_lang参数,因为localeResolver方法中实例化了CookieLocaleResolver对象,所以_lang参数会存在cookie中,所有的页面都可以从cookie中取到_lang参数。
你也可以使用SessionLocaleResolver将参数存到session。
 1 @Configuration
 2 @ComponentScan
 3 @EnableAutoConfiguration
 4 public class MainConfig extends WebMvcConfigurationSupport {
 5     @Bean
 6     public LocaleResolver localeResolver() {
 7         CookieLocaleResolver slr = new CookieLocaleResolver();
 8         // 默认语言
 9         slr.setDefaultLocale(Locale.US);
10         return slr;
11     }
12 
13     @Bean
14     public LocaleChangeInterceptor localeChangeInterceptor() {
15         LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
16         // 参数名
17         lci.setParamName("_lang");
18         return lci;
19     }
20 
21     @Override
22     public void addInterceptors(InterceptorRegistry registry) {
23         registry.addInterceptor(localeChangeInterceptor());
24     }
25 
26     @Override
27     public void addResourceHandlers(ResourceHandlerRegistry registry) {
28         registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
29     }
30 }

 

3. 创建国际化资源文件

资源文件/i18n/message_*.properties。*号的实际值(zh_CN,en_US等)就是上一步中_lang参数的值,决定了使用哪个资源文件

英文资源message_en_US.properties

 

中文资源message_zh_CN.properties

 

4. 测试ftl页面index.ftl

 

index.ftl

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <#import "spring.ftl" as spring>
 5     <#assign arg = ["AAA","张三"]>
 6     <title><@spring.messageArgs "title" ,arg /></title>
 7     <meta charset="UTF-8">
 8 </head>
 9 <body>
10 <br/>
11 <a class="changeLang" href="javascript:void(0);">english</a><br/>
12 <a class="changeLang" href="javascript:void(0);">中文</a><br/>
13 <@spring.message code="user.loginname"/><br/>
14 </body>
15 <script src="${request.contextPath}/static/jquery.js"></script>
16 <script>
17     $(".changeLang").on("click", function () {
18         switch ($(this).text()) {
19             case "中文": {
20                 window.location.href = "index?_lang=zh_CN";
21                 break;
22             }
23             case "english": {
24                 window.location.href = "index?_lang=en_US";
25                 break;
26             }
27         }
28     })
29 </script>
30 </html>
View Code

 

5. 测试结果

ps:因为"AAA,张三"这几个字符是在ftl中写死了,所以不会变

英文:

 

中文:

 

项目地址: https://github.com/czs208112/i18n-demo

 

转载于:https://www.cnblogs.com/tibit/p/9869389.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于构建独立的、基于生产级别的Spring应用程序的框架。而Freemarker是一种模板引擎,用于生成动态内容,特别适合Web应用程序的开发。在Spring Boot中使用Freemarker可以通过引入相应的依赖和配置来实现。 首先,在Spring Boot工程中引入Freemarker依赖。可以通过在pom.xml文件中添加以下依赖来实现: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 这样,在工程中就可以使用Freemarker来处理模板了。如果想要修改模板文件的位置等配置,可以在application.properties文件中进行配置。比如可以通过以下配置来指定模板文件的位置: ``` spring.freemarker.allow-request-override=false spring.freemarker.allow-session-override=false spring.freemarker.cache=false spring.freemarker.charset=UTF-8 spring.freemarker.check-template-location=true spring.freemarker.content-type=text/html spring.freemarker.expose-request-attributes=false spring.freemarker.expose-session-attributes=false spring.freemarker.suffix=.ftl spring.freemarker.template-loader-path=classpath:/templates/ ``` 这样,Spring Boot就会根据这些配置来加载并解析模板文件,生成相应的动态内容。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Spring Boot 整合 Freemarker](https://blog.csdn.net/yaxuan88521/article/details/117173289)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Springboot整合FreeMarker](https://blog.csdn.net/m0_67402096/article/details/126114796)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值