在信息技术领域,国际化与本地化(英文:internationalization and localization)是指修改软件使之能适应目标市场的语言、地区差异以及技术需要。 国际化是指在设计软件,将软件与特定语言及地区脱钩的过程。当软件被移植到不同的语言及地区时,软件本身不用做内部工程上的改变或修正。本地化则是指当移植软件时,加上与特定区域设置有关的信息和翻译文件的过程。 国际化和本地化之间的区别虽然微妙,但却很重要。国际化意味着产品有适用于任何地方的“潜力”;本地化则是为了更适合于“特定”地方的使用,而另外增添的特色。用一项产品来说,国际化只需做一次,但本地化则要针对不同的区域各做一次。这两者之间是互补的,并且两者合起来才能让一个系统适用于各地。 基于他们的英文单字长度过长,常被分别简称成i18n(18意味着在“internationalization”这个单字中,i和n之间有18个字母)及L10n。使用大写的L以利区分i18n中的i和易于分辨小写l与1。
package com. programb; import org. springframework. boot. SpringApplication;
import org. springframework. boot. autoconfigure. SpringBootApplication;
import org. springframework. web. bind. annotation. GetMapping;
import org. springframework. web. bind. annotation. RestController;
import org. springframework. web. servlet. ModelAndView; @SpringBootApplication
@RestController
public class LocaleI18nApplication { public static void main ( String[ ] args) { SpringApplication. run ( LocaleI18nApplication. class , args) ; } @GetMapping ( "/" ) public ModelAndView index ( ) { return new ModelAndView ( "user/login" ) ; }
}
package com. programb. locale; 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. WebMvcConfigurer;
import org. springframework. web. servlet. i18n. LocaleChangeInterceptor;
import org. springframework. web. servlet. i18n. SessionLocaleResolver; import java. util. Locale; @Configuration
public class LocaleConfig { @Bean public LocaleResolver localeResolver ( ) { SessionLocaleResolver localeResolver = new SessionLocaleResolver ( ) ; localeResolver. setDefaultLocale ( Locale. US) ; return localeResolver; } @Bean public WebMvcConfigurer localeInterceptor ( ) { return new WebMvcConfigurer ( ) { @Override public void addInterceptors ( InterceptorRegistry registry) { LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor ( ) ; localeInterceptor. setParamName ( "lang" ) ; registry. addInterceptor ( localeInterceptor) ; } } ; }
}
spring: thymeleaf: cache: false #关闭页面缓存prefix: classpath: / views/ #页面拼接路径messages: basename: static / i18n/ messages #相对路径 首部请勿添加斜杠
< ? xml version= "1.0" encoding= "UTF-8" ? >
< project xmlns= "http://maven.apache.org/POM/4.0.0" xmlns: xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion> 4.0 .0 < / modelVersion> < groupId> com. programb< / groupId> < artifactId> springboot- locale- i18n< / artifactId> < version> 0.0 .1 - SNAPSHOT< / version> < packaging> jar< / packaging> < name> springboot- locale- i18n< / name> < description> Spring Boot< / description> < parent> < groupId> org. springframework. boot< / groupId> < artifactId> spring- boot- starter- parent< / artifactId> < version> 2.0 .4 . RELEASE< / version> < relativePath/ > < / parent> < dependencies> < dependency> < groupId> org. springframework. boot< / groupId> < artifactId> spring- boot- starter- web< / artifactId> < / dependency> < dependency> < groupId> org. springframework. boot< / groupId> < artifactId> spring- boot- starter- thymeleaf< / artifactId> < / dependency> < dependency> < groupId> org. webjars< / groupId> < artifactId> webjars- locator- core< / artifactId> < / dependency> < dependency> < groupId> org. webjars< / groupId> < artifactId> jquery< / artifactId> < version> 3.3 .1 < / version> < / dependency> < dependency> < groupId> org. webjars. bower< / groupId> < artifactId> jquery- i18n- properties< / artifactId> < version> 1.2 .7 < / version> < / dependency> < dependency> < groupId> org. webjars. npm< / groupId> < artifactId> mdui< / artifactId> < version> 0.4 .0 < / version> < / dependency> < dependency> < groupId> org. springframework. boot< / groupId> < artifactId> spring- boot- devtools< / artifactId> < scope> runtime< / scope> < / dependency> < dependency> < groupId> org. springframework. boot< / groupId> < artifactId> spring- boot- starter- test< / artifactId> < scope> test< / scope> < / dependency> < / dependencies> < build> < plugins> < plugin> < groupId> org. springframework. boot< / groupId> < artifactId> spring- boot- maven- plugin< / artifactId> < / plugin> < / plugins> < / build> < repositories> < repository> < id> aliyun< / id> < name> aliyun< / name> < url> http: / / maven. aliyun. com/ nexus/ content/ groups/ public / < / url> < / repository> < repository> < id> spring- snapshots< / id> < name> Spring Snapshots< / name> < url> https: / / repo. spring. io/ snapshot< / url> < snapshots> < enabled> true < / enabled> < / snapshots> < / repository> < repository> < id> spring- milestones< / id> < name> Spring Milestones< / name> < url> https: / / repo. spring. io/ milestone< / url> < snapshots> < enabled> false < / enabled> < / snapshots> < / repository> < / repositories> < pluginRepositories> < pluginRepository> < id> spring- snapshots< / id> < name> Spring Snapshots< / name> < url> https: / / repo. spring. io/ snapshot< / url> < snapshots> < enabled> true < / enabled> < / snapshots> < / pluginRepository> < pluginRepository> < id> spring- milestones< / id> < name> Spring Milestones< / name> < url> https: / / repo. spring. io/ milestone< / url> < snapshots> < enabled> false < / enabled> < / snapshots> < / pluginRepository> < / pluginRepositories> < / project>