Java API实现国际化资源文件

本文详细介绍了如何在Java Web项目中利用JDK自带的API实现国际化多语言支持,包括创建国际化资源文件、引入国家化资源文件(如LDPC.properties和LDPE.properties),并使用ResourceBundle类在不同语言环境下获取对应的资源字符串。

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

问题:关于一些大型项目中会使用不同语言版本的视图,比如在一个Java web开发中,在struts中九提供了改种文件的配置项及在View中通过标签<bean:message value="">来根据浏览器不同语言形式来展示页面,实现多语言的互操作。

这里自己将所遇到的这类问题,查看相关资料,通过JDK自带的相关API实现这种国际化操作。

使用到的类主要有:import java.util.Locale; import java.util.ResourceBundle;还需要简单的国家化资源文件(针对不同语言有不同文件 .properties文件,键值对)

比如新建一个包com.xiaoli.test,里面放置两个国际化文件,中文(LDPC.properties)和英文(LDPE.properties)支持:

[java]  view plain copy
  1. <p>sys.login.index=index.jsp\u9875</p>  
[java]  view plain copy
  1. sys.login.index=index.jsp page  


上面键值对是指:index.jsp 页

 

而后建立相关测试类实现如下:

[java]  view plain copy
  1. package com.xiaoli.test;  
  2.   
  3. import java.util.Locale;  
  4. import java.util.ResourceBundle;  
  5.   
  6. public class ResourceMessage    
  7. {    
  8.     private static ResourceMessage resourceMessage = null;    
  9.     private ResourceBundle resourceMessage_zh = null;    
  10.     private ResourceBundle resourceMessage_en = null;    
  11.     private Locale local;    
  12.      //此时该国际化资源文件为下面的完全限定类名访问,LDP为资源文件前缀   
  13.     private static final String SOURCE_FILE_ZH= "com.xiaoli.test.LDPC";   
  14.     private static final String SOURCE_FILE_EN= "com.xiaoli.test.LDPE";    
  15.     private ResourceMessage()    
  16.     {    
  17.         //分别将两个文件绑定到相应的语言环境下  
  18.        resourceMessage_zh = ResourceBundle.getBundle(SOURCE_FILE_ZH, Locale.CHINA);    
  19.        resourceMessage_en = ResourceBundle.getBundle(SOURCE_FILE_EN,    
  20.                Locale.ENGLISH);    
  21.     }    
  22.     /**  
  23.      * 单例模式  
  24.      * 只创建一个实例  
  25.      * @return  
  26.      * @see [类、类#方法、类#成员]  
  27.      */    
  28.     public static ResourceMessage getInstance()    
  29.     {    
  30.         if (null == resourceMessage)    
  31.         {    
  32.             synchronized (ResourceMessage.class)    
  33.             {    
  34.                 resourceMessage = new ResourceMessage();    
  35.             }    
  36.         }    
  37.         return resourceMessage;    
  38.     }    
  39.         
  40.     public String getMessage(String key)    
  41.     {    
  42.         return getMessage(key, local);    
  43.     }    
  44.         
  45.     public String getMessage(String key, Locale local)    
  46.     {    
  47.         if (null == local)    
  48.         {    
  49.             local = Locale.getDefault();    
  50.         }    
  51.         String msg = null;    
  52.         if (Locale.CHINA.equals(local))    
  53.         {    
  54.             msg = resourceMessage_zh.getString(key);    
  55.         }    
  56.         else if (Locale.ENGLISH.equals(local))    
  57.         {    
  58.            msg = resourceMessage_en.getString(key);    
  59.         }    
  60.             
  61.         //如果找不到资源文件,返回key     
  62.         if (null == msg || "".equals(msg))    
  63.         {    
  64.             return key;    
  65.         }    
  66.         return msg;    
  67.     }    
  68.     /** 测试方法  
  69.      * @param args  
  70.      * @see [类、类#方法、类#成员]  
  71.      */    
  72.     public static void main(String[] args)    
  73.     {    
  74.         String key = "sys.login.index";    
  75. //        String value = ResourceMessage.getInstance().getMessage(key, Locale.ENGLISH);    
  76.         //使用当前默认的语言环境获取,这里为中文支持  
  77.         String value = ResourceMessage.getInstance().getMessage(key);   
  78.         System.out.println(value);    
  79.     }    
  80.         
  81. }    


结果,根据手动设置的不同语言环境可以打印不同的值:

index.jsp页 和 index.jsp page


转载于:https://my.oschina.net/softwarechina/blog/157366

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值