自学内容网 自学内容网

i18n的原理是什么,spring整合i18n

i18n的原理是什么

在 Spring 中整合国际化(i18n)可以通过以下步骤实现。Spring 提供了一套强大的机制来处理多语言支持,以下是常见的配置方法:

在 Spring 中整合国际化(i18n)可以通过以下步骤实现。Spring 提供了一套强大的机制来处理多语言支持,以下是常见的配置方法:


1. 配置国际化资源文件

创建不同语言的资源文件,通常命名为 messages_{locale}.properties,例如:

  • messages_en.properties(英文)
  • messages_zh.properties(中文)
  • messages_es.properties(西班牙语)

内容示例(messages_en.properties):

greeting=Hello
farewell=Goodbye

内容示例(messages_zh.properties):

greeting=你好
farewell=再见

2. 配置 MessageSource Bean

在 Spring 的配置类中,配置 MessageSource 来加载国际化资源文件。

使用 Java 配置:
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;

@Configuration
public class AppConfig {

    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:messages");
        messageSource.setDefaultEncoding("UTF-8"); // 避免中文乱码
        return messageSource;
    }
}
使用 XML 配置:
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:messages" />
    <property name="defaultEncoding" value="UTF-8" />
</bean>

3. 配置 LocaleResolver

使用 CookieLocaleResolver

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;

import java.util.Locale;

@Configuration
public class LocaleConfig {

    @Bean
    public LocaleResolver localeResolver() {
        CookieLocaleResolver resolver = new CookieLocaleResolver();
        resolver.setDefaultLocale(Locale.ENGLISH); // 设置默认语言
        return resolver;
    }
}
使用 SessionLocaleResolver
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

import java.util.Locale;

@Configuration
public class LocaleConfig {

    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver resolver = new SessionLocaleResolver();
        resolver.setDefaultLocale(Locale.ENGLISH); // 设置默认语言
        return resolver;
    }
}

4. 配置 LocaleChangeInterceptor

用于拦截并切换语言参数。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
        interceptor.setParamName("lang"); // 请求参数名,如 ?lang=zh
        registry.addInterceptor(interceptor);
    }
}

5. 在代码中使用国际化消息

通过 MessageSource 获取消息:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Service;

import java.util.Locale;

@Service
public class GreetingService {

    @Autowired
    private MessageSource messageSource;

    public String getGreeting(String lang) {
        Locale locale = new Locale(lang);
        return messageSource.getMessage("greeting", null, locale);
    }
}

6. 在视图中使用国际化消息

使用 Spring 的 spring:message 标签:

在 JSP 文件中:

<spring:message code="greeting" />
在 Thymeleaf 中:
<p th:text="#{greeting}"></p>

7. 测试国际化

启动应用程序,访问以下 URL:

  • http://localhost:8080?lang=en (英文)
  • http://localhost:8080?lang=zh (中文)


原文地址:https://blog.csdn.net/songkai558919/article/details/143856242

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!