SpringBoot实现国际化中英文翻译

SpringBoot实现国际化中英文翻译

配置IDEA

1.设置编码为UTF-8

2.在resources目录下创建 i18n 文件夹 internationalization简写

​ 在文件夹中创建配置文件login.properties

​ 再创建login_zh_CN.properties

配置不同语言的properties

en-US 英国(美国)
zh-CN 中文(简体,中国大陆)
zh-SG 中文(简体,新加坡)
zh-HK 中文(繁体,香港)
zh-MO 中文(繁体,澳门)
zh-TW 中文(繁体,台湾)

IDEA同时配多语言

通过MessageSourceAutoConfiguration这个类

@Bean
public MessageSource messageSource(MessageSourceProperties properties) {
 ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
 if (StringUtils.hasText(properties.getBasename())) {
 messageSource.setBasenames(StringUtils.commaDelimitedListToStringArray(StringUtils.trimAllWhitespace(properties.getBasename())));
 }
 if (properties.getEncoding() != null) {
 messageSource.setDefaultEncoding(properties.getEncoding().name());
 }
 messageSource.setFallbackToSystemLocale(properties.isFallbackToSystemLocale());
 Duration cacheDuration = properties.getCacheDuration();
 if (cacheDuration != null) {
 messageSource.setCacheMillis(cacheDuration.toMillis());
 }
 messageSource.setAlwaysUseMessageFormat(properties.isAlwaysUseMessageFormat());
 messageSource.setUseCodeAsDefaultMessage(properties.isUseCodeAsDefaultMessage());
 return messageSource;
}

进入MessageSourceProperties 得到需要配置 message

在application.properties中配置message 这里需要配置我们默认的位置

在i18n下的login

#我们的配置文件的真实位置
spring.messages.basename=i18n.login

HTML中对链接进行请求参数

 <a class="btn btn-sm" th:href="@{index.html(l='en_US')}">English</a>
 <a class="btn btn-sm" th:href="@{index.html(l='zh_CN')}">中文</a>

参考源码:AcceptHeaderLocaleResolver类中的重写方法,创建地域解析器

public class MyLocaleResolver implements LocaleResolver {
 //解析请求
 @Override
 public Locale resolveLocale(HttpServletRequest request) {
 //获得请求中的语言参数
 String language = request.getParameter("l");
 Locale locale = Locale.getDefault();//如果没有就使用默认的
 //如果请求的链接携带了国际化参数
 if(!StringUtils.isEmpty(language)){
 //zh_CN
 String[] split = language.split("_");
 //国家,地区
 locale = new Locale(split[0], split[1]);
 }
 return locale;
 }
 @Override
 public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
 }
}

在config中通过Bean 注入

//自定义国际化组件生效
 @Bean
 public LocaleResolver localeResolver(){
 return new MyLocaleResolver();
 }
}

HTML

初始Html

<!DOCTYPE html>
<html lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
 <meta name="description" content="">
 <meta name="author" content="">
 <title>Signin Template for Bootstrap</title>
 <!-- Bootstrap core CSS -->
 <link href="../../../../../../../class资源/zzz/asserts/css/bootstrap.min.css" rel="stylesheet">
 <!-- Custom styles for this template -->
 <link href="../../../../../../../class资源/zzz/asserts/css/signin.css" rel="stylesheet">
 </head>
 <body class="text-center">
 <form class="form-signin" action="../../../../../../../class资源/zzz/dashboard.html">
 <img class="mb-4" src="../../../../../../../class资源/zzz/asserts/img/bootstrap-solid.svg" alt="" width="72" height="72">
 <h1 class="h3 mb-3 font-weight-normal">Please sign in</h1>
 <label class="sr-only">Username</label>
 <input type="text" class="form-control" placeholder="Username" required="" autofocus="">
 <label class="sr-only">Password</label>
 <input type="password" class="form-control" placeholder="Password" required="">
 <div class="checkbox mb-3">
 <label>
 <input type="checkbox" value="remember-me"> Remember me
 </label>
 </div>
 <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
 <p class="mt-5 mb-3 text-muted">© 2017-2018</p>
 <a class="btn btn-sm">中文</a>
 <a class="btn btn-sm">English</a>
 </form>
 </body>
</html>

thymeleaf修饰后的HTML

thymeleaf官方文档

  • Simple expressions:
    • Variable Expressions: ${...}
    • Selection Variable Expressions: *{...}
    • Message Expressions: #{...}
    • Link URL Expressions: @{...}
    • Fragment Expressions: ~{...}
  • Literals
    • Text literals: 'one text', 'Another one!',…
    • Number literals: 0, 34, 3.0, 12.3,…
    • Boolean literals: true, false
    • Null literal: null
    • Literal tokens: one, sometext, main,…
  • Text operations:
    • String concatenation: +
    • Literal substitutions: |The name is ${name}|
  • Arithmetic operations:
    • Binary operators: +, -, *, /, %
    • Minus sign (unary operator): -
  • Boolean operations:
    • Binary operators: and, or
    • Boolean negation (unary operator): !, not
  • Comparisons and equality:
    • Comparators: >, <, >=, <= (gt, lt, ge, le)
    • Equality operators: ==, != (eq, ne)
  • Conditional operators:
    • If-then: (if) ? (then)
    • If-then-else: (if) ? (then) : (else)
    • Default: (value) ?: (defaultvalue)
  • Special tokens:
    • No-Operation: _
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
 <meta name="description" content="">
 <meta name="author" content="">
 <title>Signin Template for Bootstrap</title>
 <!-- Bootstrap core CSS -->
 <link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">
 <!-- Custom styles for this template -->
 <link th:href="@{/css/signin.css}" rel="stylesheet">
 </head>
 <body class="text-center">
 <form class="form-signin" action="dashboard.html">
 <img class="mb-4" th:src="@{/img/bootstrap-solid.svg}" alt="" width="72" height="72">
 <h1 class="h3 mb-3 font-weight-normal" th:text="#{login.tip}">Please sign in</h1>
 <label class="sr-only" th:text="#{login.username}">Username</label>
 <input type="text" class="form-control" th:placeholder="#{login.username}" required="" autofocus="">
 <label class="sr-only" th:text="#{login.password}">Password</label>
 <input type="password" class="form-control" th:placeholder="#{login.password}" required="">
 <div class="checkbox mb-3">
 <label>
 <input type="checkbox" value="remember-me" > [[#{login.remember}]]
 </label>
 </div>
 <button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.btn}">Sign in</button>
 <p class="mt-5 mb-3 text-muted">© 2017-2018</p>
 <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>
 </form>
 </body>
</html>


  • 1.首页配置:所有静态资源都需要使用thymeleaf接管;

    • 2.url @{}
  • 2页面国际化:

    • 我们需要配置i18n文件
    • 我们在项目中需要进行按键自动切换,我们需要自定义一个组件LocaleResolver
    • 记得将自己写的组件配置到spring容器中 @Bean
    • {}

作者:翀翀翀原文地址:https://www.cnblogs.com/wakanda-forever/p/17222752.html

%s 个评论

要回复文章请先登录注册