Thymeleaf及国际化使用

本文介绍了Thymeleaf在Java项目中的国际化应用,包括导入依赖、配置、Thymeleaf的多种表达式如变量、消息、链接和组件化表达式。还探讨了国际化文件的准备,以及如何通过URL或请求参数实现前端页面的国际化。通过自定义处理请求和注册到IOC容器,实现了国际化功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

2、看一下配置 xxxProperties

在这里插入图片描述
3.页面与controller

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>测试页面</h1>
    <p th:text="${msg}"></p>
    <!--转义和不转义-->
    <p th:utext="${msg2}"></p>
    <!--遍历-->
    <h3 th:each="user:${users}" th:text="${user}"></h3>
</body>
</html>

@Controller
public class TestController {
    @GetMapping("/test")
    public String test(Model model){
        model.addAttribute("msg","Hello World");
        model.addAttribute("msg2","<h1>hello,Thymeleaf<h1>");
        model.addAttribute("users",Arrays.asList("coding","qinjiang"));
        return "test";
    }
}

在这里插入图片描述
Thymeleaf语法
在这里插入图片描述我们还可以编写哪些表达式呢?
Variable Expressions: ${…}
获取一些基本的变量值! OGNL;

  1. 对象的属性,调用方法
  2. 使用内置的基本对象
${#ctx.locale} 
${param.foo} 
${session.foo} 
${application.foo} 
${#request.getAttribute('foo')} 
${#servletContext.contextPath}
  1. 工具对象
${#messages.msg('msgKey')} 
${#uris.escapePath(uri)} 
${#conversions.convert(object, 'java.util.TimeZone')}
${#dates.format(date, 'dd/MMM/yyyy HH:mm')} 
${#calendars.format(cal)} 
${#numbers.formatInteger(num,3)}
${#strings.toString(obj)} ${#arrays.toArray(object)}

Selection Variable Expressions: *{…} 选择表达式,和 ${} 是一样的;
Message Expressions: #{…} 国际化内容获取!
Link URL Expressions: @{…} URL表达式; th:href=“@{/login}”
Fragment Expressions: ~{…} 组件化表达式;
Literals (字面量)
Text literals: ‘one text’ , ‘Another one!’ ,… (字符串)
Text operations: (文本操作)
Arithmetic operations: (数学运算)
Boolean operations: (布尔运算)
Comparisons and equality: (比较运算)
Conditional operators: (条件运算符)
官网查询
在这里插入图片描述官网:https://www.thymeleaf.org/documentation.html
thymeleaf官网
github:https://github.com/thymeleaf/thymeleaf/blob/3.0-master

国际化

准备
在这里插入图片描述i18n : 国际化表示的文件夹
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述如果是一整个完整的页面(文档页)文章量十分大的时候,没有必要做这些细节化的国际化操作!
在这里插入图片描述配置文件
#国际化 spring.messages.basename=i18n.login
前端页面

在这里插入图片描述在这里插入图片描述在这里插入图片描述以Duubo官网为例:
中文:http://dubbo.apache.org/zh-cn/
英文:http://dubbo.apache.org/en-us/
可以发现是通过不同链接来实现国际化映射的!

@Bean
		@ConditionalOnMissingBean
		@ConditionalOnProperty(prefix = "spring.mvc", name = "locale")
		public LocaleResolver localeResolver() { // 国际化对象解析LocaleResolver 
		 // 如果用户配置了 就使用用户配置的,如果没有用户配置就使用默认的! 
			if (this.mvcProperties.getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) {
				return new FixedLocaleResolver(this.mvcProperties.getLocale());
			}
			// 接收请求头信息关于国际化的
			AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
			localeResolver.setDefaultLocale(this.mvcProperties.getLocale());
			return localeResolver;
		}

在我们的接收请求解析中发现一个重写的方法:
我们自定义
1、修改前端页面的链接

<!-- localhost:8080/index?l=zh_CN thymeleaf中传递参数不用使用? 使用()--> 
<a class="btn btn-sm" th:href="@{/index.html(l='zh_CN')}">中文</a> 
<a class="btn btn-sm" th:href="@{/index.html(l='en_US')}">English</a>

2、处理这个请求! 我们是以参数的请求来进行处理的!我们去解析请求构造国际化对象即可

package com.shying.handler;


import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;

public class MyLocaleResolver implements LocaleResolver {
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
         // 获取请求中的参数
        String parameter = request.getParameter("l");
        // 如果我们没有配置就使用默认的! 
        Locale locale = Locale.getDefault();
        if (!StringUtils.isEmpty(parameter)){
            String[] split = parameter.split("_");
            //分析国家和地区
            locale=new Locale(split[0],split[1]);

        }
        return locale;
    }

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

    }
}

3、注册到IOC中

// id localeResolver 只能为这个,应为SpringBoot回去扫描并是识别 
   @Bean
    public LocaleResolver localeResolver(){
        return new MyLocaleResolver();
    }

4、重启项目,点击测试即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值