当前位置:网站首页 > 技术博客 > 正文

java freemarker



i18n(Internationalization),即国际化。目的是为了使软件、应用或网站能够适应不同的语言、地区,用户可以选择他们熟悉的语言进行交互,为所有用户提供一致的体验。

本文将会带你了解如何使用 Spring Boot + Freemarker 实现国际化。

假设我们有一个登录页面,其中有 2 个输入框,分别用于输入 用户名密码。对于使用不同语言的用户,需要显示不同的输入框名称。

在 中添加 和 stater 依赖。

通常我们会把项目中需要国际化的内容定义在不同的 properties 文件中,通过 properties 文件名的后缀来表示资源的 语言国别

在 目录下创建 目录,用于存放国际化资源文件。接着,在 目录中创建如下 3 个 properties 文件,如下:

如上,除了第 1 个空文件外,分别在 2 个资源文件中指定了不同语言的国际化内容。

  • 则表示英文资源, 表示英文, 表示美国。
  • 表示是中文资源,其中 表示中文, 表示中国。

按照这个格式,你可以配置多个其他语言和国别的资源。

  • :英国、英语
  • :韩文、韩国

也可以不指定国别,仅指定语言,如:,表示英语,但不分国别(美国、英国、加拿大都说英语)。

注意,properties 文件的编码一定要是 UTF-8!

文件一定要存在,哪怕是空的。否则可能会在运行时遇到如下异常。

在 中添加如下配置:

指定了国际化资源文件的 “前缀”,也就是上文国际化资源文件所在的目录和基本名称。

则是整合 Freemarker 模板引擎的配置。 设置为 暴露了 spring 提供的宏,我们会通过这个宏定义的指令来在模板上渲染国际化资源。 配置则是指定了模板引擎的目录(关于 Spring Boot 整合 Freemarker 的更多细节你可以参考 这篇文章)。

接口用于解析客户端的语言环境,默认它提供了如下实现:

  • :从 Cookie 解析客户端语言。
  • :固定使用 JVM 的默认语言,不支持更改。
  • :从 Session 解析客户端语言。

这里我们使用 ,也就是说在用户选择了语言后,把语言信息存储在客户端浏览器的 Cookie 中,这样的话服务器就不用维护状态了。

创建 配置类,如下:

通过 构造函数指定 Cookie 的名称,默认是 。

方法设置默认的语言。在客户端选择的语言不支持,或者客户端未选择语言的情况下,默认使用的国际化资源。这里设置为 ,也就是 。

还可以设置关于 Cookie 的一些属性,如:、、、、 等等。这里仅设置了 属性,表示禁止 JS 读写这个 Cookie。

拦截器,用于拦截用户的请求。根据用户请求参数来设置语言环境。

创建 配置类,实现 接口:

创建 拦截器实例 Bean。通过 方法指定要拦截的请求方法。 方法设置一个参数名称。客户端通过这个参数传递所选择的语言。 方法表示是否要忽略客户端传递的非法参数值。

最后通过 配置拦截器,拦截所有请求。

在 目录下创建 目录,用于存放模板引擎(上述配置 定义的值)。

接着,在 下创建 模板引擎文件,内容如下。

首先在最顶部通过 导入 Spring 预定义的宏 ,命名为 。这个宏定义了大量的工具指令。

在模板中,通过 调用 宏中的 指令,其中 参数就是在国际化资源文件中定义的 KEY。该指令会根据当前请求所设置的语言环境,自动从对应语言的资源文件中根据 KEY 读取配置值。

最后,创建渲染 模板的 Controller:

启动应用后,用浏览器访问 。

由于第一次访问,且未指定使用的语言。根据 配置,默认使用 ,所以你会看到中文表单名称。

中文登录页

接着,尝试添加 “语言参数”。访问 。

这次,传递了一个 参数, 会拦截到此请求,并把当前请求环境设置为 。所以,能看到英文表单名称。

参数的值要符合:。格式

英文登录页

因为使用了 Cookie,所以只要你没有再次使用 参数来切换不同的语言,则所有请求都会被解析为 语言。

除了模板引擎,我们也可以在代码中通过 Bean 来根据 获取不同的国际化消息值。

例如,在上述 中注入 。

首先,注入 。

在 Controller 方法中通过 获取到当前请求所设置的语言环境 对象。再使用 通过这个 对象获取对应的国际化配置信息。

修改后,重启应用。再次访问 ,服务端输出日志如下:

如上,成功读取到了国际化的配置信息。因为上次请求使用的是 ,由于 Cookie 还在,所以这次请求的语言环境也同样是 。

本文介绍了如何使用 Spring Boot + Freemarker 开发一个国际化应用。步骤总结如下:

  1. 在 目录下配置各个语言、国别的国际化资源文件。
  2. 在配置文件中设置国际化资源文件的目录和基本文件名称。
  3. 创建 实现,用于解析客户端选择的语言。
  4. 创建 拦截器实现,并且指定要拦截的路径,用于客户端切换不同的语言。
  5. 在 Freemarker 中通过 指令来渲染国际化内容。
  6. 在代码中通过 获取当前请求的语言环境,配合 就可以获取到国际化配置信息。

版权声明


相关文章:

  • 逻辑回归模型的公式2025-05-27 23:29:59
  • flow工具2025-05-27 23:29:59
  • blp模型的主要内容2025-05-27 23:29:59
  • python课程设计题目大全2025-05-27 23:29:59
  • unity vue2025-05-27 23:29:59
  • 微信 小程序 源码2025-05-27 23:29:59
  • redis rdb原理2025-05-27 23:29:59
  • seq2seq模型存在哪些问题2025-05-27 23:29:59
  • 微信小程序客服怎么设置2025-05-27 23:29:59
  • windows7无法打开exe2025-05-27 23:29:59