热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Struts1的国际化处理(汇总整理)

2019独角兽企业重金招聘Python工程师标准一、java中的国际化a)jave中实现国际化的原理java中通过Locale对象可以指定或得到当前系统的默认国际化配置及语言

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、java中的国际化

a)         jave中实现国际化的原理

java中通过Locale对象可以指定或得到当前系统的默认国际化配置及语言代码和国家代码,然后通过ResourceBundle类得到对应Lacale对象的国际化配置文件即Properties文件,通过读取键的值实现国际化。

b)         java中实现国际化需要的类

locale类:

可以指定所要显示的语言,即对应的国际化文件

Locale类的方法:

//得到当前系统默认的编码

           Locale l=Locale.getDefault();

                                 //自定义Locale

                                 //参数1:语言编码en(英文) zh(中文) ja(日本)

                                  //参数2;国家编码US(英国) CN(中国)JP(日本)

           Locale l1=new Locale("en","US");

           //得到国家代码

           l.getCountry();

           //得到语言代码

l.getLanguage();

        ResourceBundle类:

                      可以读取相应的Locale 对应的property文件

c)     更改系统默认的国际化编码

控制面板—语言区域

d)     在IE中修改默认的编码

IE首选项—语言

e)         property文件的文件名编写规则

Basename名_语言代码_国家代码.properties

说明: BaseName名可以自定义但后面的名称必须按以上规则书写

f)          读取对应的Properties文件

           //读取对应的Properties文件

           //第一个参数对应相应的basename

           //第二个参数对应相应的Locale

ResourceBundle rb=ResourceBundle.getBundle("Message",l);

           rb.getString("key值");

g)      Properties文件的中文乱码问题

在读取Properties文件时键对应的中文键值会出现乱码应使用jdk的native2ascii.exe 工具将中文转换成unicode码再写入Properties文件中

h)     Native2ascii .exe的使用方法

在jdk的bin目录下双击native2ascii.exe 将需要转换的中文copy到该命令提示行下 回车即可看到转换的unicode编码将其替换对应键的值即可

Eg:

      将a=你好

      替换成 a= /uf60/u597d

批量替换

       Native2ascii.exe 源文件路径 替换文件路径

系统会自动根据控制面板设置的国际化编码进行转换。

i)       Properties 文件的占位符问题

Properties 文件中可以使用{0}{1}进行占位符设置注意是从0位开始

使用占位符

              MessageFormat mf =new MessageFormat(rb.getString("键名"));

      String result = mf.format(new Object[]{"a","b"});

j)       国际化文件的路径问题

ResourceBundle rb=ResourceBundle.getBundle("Message",l);

默认读取的是src下的文件,若路径不同应标明路径

方法:msg + . + Properties文件的BaseName名

Eg: msg.Message

k)      注意:

默认情况下ResourceBundle会根据参数Locale的国家代码和语言代码自动匹配相应的Properties文件进行读取(所以properties文件的命名必须合法)。

若没有找到相应文件则加载系统默认的国际化配置文件(读取系统设置的国家代码和语言代码)若系统的设置也没有与之对应的properties文件则加载Basename名.properties文件。若还没有对应文件则报错。

l)       注意2:新建java项目进行测试时必须建立源src文件夹否则报错。

二、 Struts硬编码国际化

a)      Stuts硬编码国际化即对页面中不变的文字进行国际化处理。

b)      使用方法

                 i.          在struts-config.xml:文件中加入

第一个参数及Properties文件BaseName的名称

                ii.          在properties文件中配置相关的字段,注意中文要转换成unicode码

               iii.          在页面中用Struts标签替换需要国际化的内容

c)      注意:加载国际化文件时若没有找得相关文件(IE中的国际化配置)则会根据操作系统的语言配置进行查找若还没有会加载默认文件即 Basename.properties文件。

d)      通过修改session 实现手动修改语言

request.getSession().setAttribute(Globals.LOCALE_KEY, currentLocale);

第二个参数为自定义的Locale对象。

或者:

this.setLocale(request, currentLocale);

第二个参数为自定义的Locale对象

 

三、 动态文本国际化

1、  方法

在action中定义普通信息和错误信息

ActionMessage m=new ActionMessage("upass",new Object[]{"pppp"});

第一个参数是该信息的key值,第二个参数是占位符的内容,若仅有一个占位符可以不用object数组

直接写成String类型的参数

ActionMessage m=new ActionMessage("upass",”sss”);

 

上面的写的太简化,来个详细的:

 


Struts  国际化处理一
一、Struts的国际化
    Struts是一种支持国际化的MVC的Web Framework。可是如何来使用struts国际化是一个问题。下面我们来探讨一下,如何实现Struts的国际化。Web程式的国际化涉及到3个层 面的东西。第一、jsp部分的输入/输出;第二、应用处理程序的国际化;第三、DB的国际化问题。这里主要探讨的是jsp部分的输入/输出问题。
二、静态部分的国际化
   Struts的jsp页面静态内容(包括静态文字,静态图片)国际化问题,是通过资源文件来实现的。要实现国际化,需要做如下几项工作:1、定义 web.xml的动ActionServlet的参数;2、定义资源文件;3、定义JSP页面的字符集合;4、在JSP页面获取资源文件里面的内容。
1、定义web.xml的动ActionServlet的参数

  action
  org.apache.struts.action.ActionServlet    
 
    config
    /WEB-INF/struts-config.xml
 

  
    application
    ApplicationResources
 

  2
2、定义资源文件
在/WEB -INF/classes下面添加UTF-8资源束文件。每一个资源文件是“键-值”对的集合。在JSP页面里面可以通过键来找到相应的数据值。本例子的 文件名是ApplicationResources,所以相应的资源文件束是(包括e文,简体中文,繁体中文)
ApplicationResources.properties : 默认资源文件。当在其他资源文件里面找不到某个资源的时候,就使用该资源文件里面的定义。
ApplicationResources_zh_CN.properties:简体中文资源文件。
ApplicationResources_zh_TW.properties:繁体中文资源文件。
资源文件的格式为:默认资源文件名_国别_语言.properties。其中每个文件都是通过 %JAVA_HONE%/BIN/native2ascii.exe 工具转换而来。你也可以使用其他工具来处理得到( http://java.sun.com/products/jilkit/ 有 一个工具Internationalization Java Internationalization and Localization Toolkit 可以处理)。下面是一个例子,我们显示如何使用%JAVA_HONE%/BIN/native2ascii.exe命令来定义资源束文件。
2.1 准备文件
//ApplicationResources.properties ;默认资源文件,通常里面的内容是英文的。
label.username=USERNAME :
label.password=PASSWORD :
//ApplicationResources_zh_CN.bak ;简体中文的资源文件。里面的内容是中文的。它需要工具将其中的内容处理成UTF-8
label.username=用户名 :
label.password=密 码 :
//ApplicationResources_zh_TW.bak : 繁体中文的资源文件。里面的内容是中文的。它需要工具将其中的内容处理成UTF-8,下面的内容是繁体码。
label.username=ノめ?W :
label.password=ノめ?W :
2.2 准备完成以后,使用如下的命令创建UTF-8资源文件束
native2ascii -encoding gb2312 ApplicationResources_zh_CN.bak ApplicationResources_zh_CN.properties
native2ascii -encoding big5 Applica tionResources_zh_TW.bak ApplicationResources_zh_TW.properties
3、定义JSP页面的字符集合
定义JSP页面的语言为UTF-8。在每个JSP页面,必须有如下的内容(如果使用的模板技术,则只是需要在模板页面添加,其他使用该模板的页面无需添加)
<%&#64; page contentType&#61;"text/html;charset&#61;UTF-8"%>
4、在JSP页面获取资源文件里面的内容。
在JSP里面需要显示静态内容的地方使用strus的bean tag包里面的message标签。例如下面的页面

 
        
 
 
   
 
好了&#xff0c;在这个页面显示的时候&#xff0c;如果客户的IE的语言集合是zh_CN的话&#xff0c;就会显示
用户名&#xff1a;
口 令&#xff1a;
如果是客户的IE的语言是zh_TW的话&#xff0c;就会显示
用户名&#xff1a;
用户名&#xff1a;
可以在IE的工具->Internet选项->语言的地方&#xff0c;来选择&#xff0c;定义IE的语言。
三、表单的数据的处理。
对于表单数据的处理&#xff0c;我们是通过添加一个Filter来实现的。所有提交的请求&#xff0c;都需要做字符处理。然后在web.xml里面定义该Filter。这样我们就不需要在程序里面做任何的字符处理。
3.1 定义Filter。下面是一个例子。
package com.webapps.commons;
import java.io.*;
import javax.servlet.*;
public class CharsetEncodingFilter implements Filter{
  private FilterConfig config &#61; null;
  private String defaultEncode &#61; "UTF-8";
public void init(FilterConfig config) throws ServletException {
    this.config &#61; config;
    if(config.getInitParameter("Charset")!&#61;null){
        defaultEncode&#61;config.getInitParameter("Charset");
    }
  }
public void destroy() {
    this.config &#61; null;
  }
public void doFilter(ServletRequest request, ServletResponse response,
                       FilterChain chain) throws IOException, ServletException {
    ServletRequest srequest&#61;request;
    srequest.setCharacterEncoding(defaultEncode);
    chain.doFilter(srequest,response);
  }
}
3.2 在web.xml里面声明使用该Filter

  Character Encoding
  com.webapps.commons.CharsetEncodingFilter


  Character Encoding
  /*
四、扩展
待续的是应用程序部分的国际化问题&#xff0c;和DB的国际化问题。
Struts  国际化处理  二
对于使用者来说&#xff0c;一个支持国际化的WEB程序具有下面几种形式
1. 根据用户浏览器自动设置显示的语言(无需用户干预)
2. 提供用户选择,用户根据自己的需要决定使用何种语言显示
3. 结合前两种.系统自动选择一种语言,但同时提供用户根据需要选择
使用Struts开发国际化程序是一件非常便利的事情,我们来看前两种怎么来实现
1. 这是最简单的方式,你不需要修改任何程序,只需要把资源文件按照各个语言翻译一遍并把这些文件按照国际化程序的要求命名好放置同一个目录即可. 例如 ApplicationResource_en_US.properties ApplicationResource_zh_TW.properties . 这种方式虽然自动的给用户设置好要显示的语言,但是有时候由于浏览器本身的问题,或者用户自己想看其他语种的时候就没有办法.
2. 这是比较常见的方式,由用户自己来选择所要显示的语言. 一般的情况是在首页或者登录页上增加语言的选项,用户选中其中一种登录后即以用户选择的语言进行显示,但是用户登录后必须把用户所选择的语言保存起来并让 程序也就是
Locale locale &#61; new Locale(request.getParameter("locale"));
//TODO:判断locale的有效性,无效的话不存入到sesssion中
req.getSession().setAttribute(Globals.LOCALE_KEY,locale);
好 了,现在这个标签库现在就可以根据你保存在session中的Locale对象来决定加载的是哪种语言, 通过看标签库的源码我们就可以一目了然知道该标签库在加载资源前先从session或者该Locale对象, 如果为空则使用request.getLocale()这个值来加载对应语言的资源,因此这种做法实际上是实现了前面提到的第三种形式. 接下来就是翻译资源文件,有如第一步讲到的.
Struts框架在实现国际化应用程序的时候还是替我们想的很周到,因此你所需要做的就是翻译.
最后切记两点&#xff1a;
1. 页面的字符集必须是UTF-8,例如:
<%&#64; page language&#61;"java" contentType&#61;"text/html;charset&#61;UTF-8" %>
2. 另外页面的所有的提示信息都应该在资源文件中定义
转http://tb.blog.csdn.net/TrackBack.aspx?PostId&#61;1199702感谢原作者


转:https://my.oschina.net/u/1393447/blog/175964



推荐阅读
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文介绍了在序列化时如何对SnakeYaml应用格式化,包括通过设置类和DumpSettings来实现定制输出的方法。作者提供了一个示例,展示了期望的yaml生成格式,并解释了如何使用SnakeYaml的特定设置器来实现这个目标。对于正在使用SnakeYaml进行序列化的开发者来说,本文提供了一些有用的参考和指导。摘要长度为169字。 ... [详细]
author-avatar
BB_KYLE
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有