`
hbxflihua
  • 浏览: 676198 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

应用国际化(3)

阅读更多

前两篇介绍了应用国际化的注意事项和提示语国际化的简单实现。后来阅读spring源码发现,spring对国际化的支持已经很到位了,很多地方都不需要在程序中处理。比如语言切换的拦截器,spring已经自带了。本文介绍更简洁的基于spring的提示语国际化实现方案。

 

1、web.xml配置, web.xml中需要配置ContextLoaderListener和DispatcherServlet,这个就不多讲了。

	<servlet>
		<servlet-name>springServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:/config/web/web-main.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>springServlet</servlet-name>
		<url-pattern>*.htm</url-pattern>
	</servlet-mapping>

<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

 

2、springmvc配置文件中添加i18n支持和语言切换拦截器

<!-- 配置基于Session的locale处理,即将locale放在session中。该配置不是必须的,但是提供的语言不支持时,会遍历系统支持的语言,返回第一个支持的语言环境信息。 其他还有基于cookie、acceptHeader以及固定语言的设置-->  
	<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
		<property name="defaultLocale" value="zh"/>
	</bean>
	<!-- 国际化的消息资源文件 -->  
	<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">  
	    <property name="basenames">  
	        <list>  
	            <value>classpath:i18n/message</value>  
	        </list>  
	    </property>  
	    <property name="useCodeAsDefaultMessage" value="false"/>  
	    <property name="defaultEncoding" value="UTF-8"/>  
	    <property name="cacheSeconds" value="60"/>  
	</bean>

	<mvc:interceptors>
		<!-- 切换语言拦截器 -->
		<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
			<property name="paramName" value="lang"></property>
		</bean>
	</mvc:interceptors>

 

 3、MessageSourceUtils工具类调整

import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;

/**
 * 资源国际化工具类
 * @author lh@erongdu.com
 * @version 2.0
 * @since 2018-12-24
 */
@Component
public class MessageSourceUtils {

    // 日志
    private static final Logger LOGGER = LoggerFactory.getLogger(MessageSourceUtils.class);
    
    private static MessageSource messageSource;
    
    @Autowired
    public void setMessageSource(MessageSource messageSource) {
		MessageSourceUtils.messageSource = messageSource;
	}


//    /**
//     * 获取国际化文件中国际化字段信息
//     * @param key	国际化参数
//     * @param args	动态参数
//     * @return
//     */
//    public static String getMessage(String key, Object[] args) {
//    	try {
//    		return messageSource.getMessage(key, args, key, LangUtil.getLocale());
//    	} catch (Exception e) {
//    		LOGGER.error(e.getMessage());
//    	}
//    	return key;
//    }
    
    /**
     * 可供后台使用
     * 获取国际化文件中中文字段信息
     * @param key	国际化参数
     * @param args	动态参数
     * @return
     */
    public static String getChineseMessage(String key, Object[] args) {
    	try {
    		return messageSource.getMessage(key, args, key, Locale.CHINESE);
    	} catch (Exception e) {
    		LOGGER.error(e.getMessage());
    	}
    	return key;
    }
    
	/**
     * 获取国际化文件中国际化字段信息
     * @param key	国际化key
     * @param args	动态参数
     * @return
     */
    public static String getMessage(String key, Object[] args) {
        try {
            Locale locale = LocaleContextHolder.getLocale();
            return messageSource.getMessage(key, args, key, locale);
        } catch (Exception e) {
        	LOGGER.error(e.getMessage());
        }
        return key;
    }

}

 

4、在controller、Service、Interceptor等层使用MessageSourceUtils

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;



/**
 * WEB界面 配置action
 * @author lh@erongdu.com
 * @date 2017年1月20日
 *
 */
@Controller
@Scope("prototype")
public class IndexController {
	
	
	@RequestMapping(value = "/index.htm")
	@ResponseBody
	public String index(Model model){
		return MessageSourceUtils.getMessage("title", null);
	}

}

  

分享到:
评论

相关推荐

    国际化语言版本应用

    国际化语言版本应用是一种让软件或网站能够适应不同国家和地区用户需求的技术。在现代软件开发中,随着全球化进程的加速,应用程序需要支持多种语言,以便更好地服务全球用户。Spring MVC 是一个广泛使用的Java Web...

    java web应用国际化与分页

    Java Web应用的国际化(i18n)和分页是开发多语言支持和高效展示大量数据的关键技术。在Java Web环境中,Struts框架提供了一种优雅的方式来处理这两种需求。 国际化是使应用程序能够根据用户的地区和语言偏好显示不同...

    应用程序国际化

    应用程序国际化,特别是针对iOS平台的国际化,是一项至关重要的任务,它允许开发者构建的应用程序能够适应全球用户的不同语言和文化需求。iOS国际化不仅涉及到文本翻译,还包括日期、时间、数字、货币格式以及图像和...

    spring 国际化 spring mvc

    国际化可以让我们的应用程序适应不同语言和地区,提高应用程序的可读性和可用性。本文将详细介绍如何使用 Spring MVC 实现国际化。 国际化的重要性 在全球化的今天,国际化变得越来越重要。随着应用程序的全球化,...

    论人脸识别技术的国际化区域诉讼证据应用.pdf

    "论人脸识别技术的国际化区域诉讼证据应用" 人脸识别技术的国际化区域诉讼证据应用是当前学术领域和司法实务界关注的焦点之一。随着现代科技的高速发展,人脸识别技术已经广泛应用于各领域,主要应用在侦查破案、...

    android国际化中英文切换demo

    在Android应用开发中,实现国际化是一项重要的任务,它能让应用支持多种语言,为全球用户提供更好的体验。本示例“android国际化中英文切换demo”提供了一个实际操作的案例,帮助开发者理解并实现Android应用的多...

    Qt应用程序国际化步骤

    在开发跨地域的应用程序时,实现国际化(Internationalization,简称i18n)是一项重要的任务。Qt库提供了强大的支持,使得Qt应用程序能够轻松地适应多种语言环境。本篇将详细介绍Qt应用程序国际化的步骤,以及如何...

    C# winform 国际化

    在C# WinForm应用开发中,国际化(Internationalization)是一个重要的功能,允许应用程序适应不同语言和文化环境。本文将深入探讨如何实现C# WinForm应用的国际化,包括菜单国际化和资源国际化。 首先,我们需要...

    Nacos实现SpringBoot国际化的增强

    对于某些应用系统而言,它需要发布到不同的国家地区,因此需要特殊的做法来支持,也即是国际化。通过国际化的方式,实现界面信息,各种提示信息等内容根据不同国家地区灵活展示的效果。比如在中国,系统以简体中文...

    Android 一键国际化

    3. 执行国际化:运行插件,选择要生成的语言列表,插件会自动将源文件中的字符串资源翻译成所选语言。 4. 校对与调整:虽然插件可能使用了机器翻译,但为了确保准确性和文化敏感性,开发者仍需对生成的翻译进行人工...

    c# 多国语言国际化

    C# 多国语言国际化(Internationalization)是开发支持多种语言的应用程序的关键技术。在WinForms应用程序中,C#提供了一套完整的框架来实现这一功能,使得开发者可以轻松地为不同地区和语言的用户提供定制化的界面...

    Kiwi国际化全流程解决方案

    Kiwi项目是一个专门针对JavaScript应用的国际化框架,它提供了一套完整的工具集,旨在简化多语言版本的创建和维护。Kiwi的核心目标是使开发者能够轻松地将应用内容与特定语言分离,以实现高效且灵活的国际化支持。 ...

    Dojo基础3国际化

    在Dojo中,国际化(i18n)使得应用可以适应不同语言和文化环境,从而为全球用户提供一致的体验。以下是Dojo国际化的主要方面: 一、自定义模块的国际化 要实现Dojo的国际化,首先需要创建相应的模块和语言文件。这...

    Android应用源码之(本地化与国际化).zip

    在Android应用开发中,本地化和国际化是两个关键的概念,它们允许开发者构建能够适应不同语言和地区设置的应用。本文将深入探讨这两个概念,并结合提供的源码进行解析和学习。 首先,让我们理解什么是本地化...

    android应用内和系统设置两种设置多语言国际化

    在Android开发中,实现应用支持多语言国际化是一个重要的功能,可以让应用吸引全球用户。本教程将详细介绍如何在Android应用内以及通过系统设置实现多语言国际化,涵盖了简体中文、繁体中文和英文的切换。 首先,...

    iOS 国际化适配demo,包含应用内国际化和跟随系统两种情况。.zip

    软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...

    国际化标签库

    国际化标签库是一种软件开发工具,主要用于支持多语言环境下的应用程序。在现代软件开发中,特别是在全球范围内使用的产品或服务中,支持多种语言是至关重要的。国际化标签库提供了一种标准化的方式来管理和显示各种...

    Android应用源码之(本地化与国际化)-IT计算机-毕业设计.zip

    在Android应用开发中,本地化和国际化是两个重要的概念,它们涉及到如何使应用程序适应不同语言和地区的需求。这个压缩包中的内容很可能是为了帮助学生或开发者理解如何在Android平台上实现这一功能,以创建一个能为...

Global site tag (gtag.js) - Google Analytics