国际化:

  国际化是指,使程序在不做任何修改的情况下,就可以使用在不同的语言环境中。国际化在一般性项目中是不常用的。在编程中简称 i18n。

  国际化是通过读取资源文件的形式实现的。资源文件的定义与注册,主要分为全局范围的、包范围的、Action范围的,下面分别介绍:

  (1)全局范围的:

    全局资源文件是指,整个应用中所有文件均可访问的资源文件,其命名要遵循的格式:baseName-language_country.properties

    其中baseName是资源文件的基本名,可以自定义。但language和country必须是Java支持的语言和国家的简称。例如:myBaseName_en_US.properties

  (2)包范围的:

    可以针对不同模块、不同的action来组织国际化文件。

    再要使用该资源文件的java包下,放置以下格式的资源文件:package_language_country.properties。其中,package为固定写法。例如:package_en_US.properties

  (3)Action范围的:

    可以单独为某个action指定资源文件,只需在Action类所在的包中放置以下格式的资源文件:ActionClassName_language_country.properties。其中ActionClassName是action类的简单名称。例如:LoginAction_en_US.properties

  综述:对于前端的某个值来说,如果未指定读取哪一个范围的资源文件,则加载资源文件的顺序是Action范围-->包范围-->全局范围

  下图是资源文件的放置示意图:

  

  国际化的代码:

    (1)资源文件的配置(分别是myBaseName_en_US.properties和myBaseName_zh_CN.properties):

    

    

    解释:其中的占位符 {0} 是为了实现,为资源文件的动态参数赋值

    (2)Action类的代码:

package com.tongji.actions;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport{private static final long serialVersionUID = -7398591714651064707L;private String username;private int age;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String execute() {String msg = this.getText("action.out.msg");System.out.println(msg);String[] args = {username};  String msg2 = this.getText("action.out.msg2",args);System.out.println(msg2);return "success";}
}

    解释:ActionSupport中的getText方法,是在Action内加载资源文件,第二种实现方式加入了动态参数。

    (3)前端页面代码:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%><html><head><title>index page</title></head><body><a href="test/language.action?request_locale=zh_CN">中文</a><a href="test/language.action?request_locale=en_US">English</a><br><br><s:i18n name="com/tongji/actions/LoginAction"><s:text name="index.form.title" /><br> <!-- 读取Action范围资源文件 --></s:i18n><s:i18n name="com/tongji/package"> <!-- 读取包范围资源文件 --><s:form action="test/login.action" method="POST"><s:textfield name="username" key="index.form.uname"/><s:textfield name="age" key="index.form.uage"/><s:submit key="index.form.submit"/></s:form></s:i18n></body>
</html>

    解释:对于前端的某个值来说,如果未指定读取哪一个范围的资源文件,则加载资源文件的顺序是Action范围-->包范围-->全局范围;但是,这里指定了读取指定范围的资源文件。

    (4)struts.xml代码:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
<struts><constant name="struts.custom.i18n.resources" value="myBaseName"/><package name="demo" namespace="/test" extends="struts-default"><action name="language"><result>/index.jsp</result></action><action name="login" class="com.tongji.actions.LoginAction"><result>/welcome.jsp</result></action></package>
</struts>

    解释:第一次加载页面,页面就加载了全局资源文件(如果未指定读取包范围或Action范围的资源文件),这个资源文件的类型(zh_CN,还是en_US,还是其他)由浏览器默认指定的。

       只有在执行Action时才会自动加载包范围的或Action范围的资源文件。因此,如果想在Action未执行前,改变加载的资源文件类型,可以这样做:

    前端:<a href="test/language.action?request_locale=zh_CN">中文</a>

       <a href="test/language.action?request_locale=en_US">English</a>

    struts.xml配置:<action name="language">

              <result>/index.jsp</result>

            </action>

    目的:是为了让i18n拦截器起作用,改变其中的request_locale值,从而改变加载的资源文件类型。一旦,request_locale值改变,接下来的Action加载的包范围的或Action范围的资源文件都会遵从这个类型。

转载于:https://www.cnblogs.com/qjjazry/p/6241516.html

Strusts2笔记7--国际化相关推荐

  1. Qt学习笔记之国际化

    国际化的英文表述为Internationalization,通常简写为I18N(首尾字母加中间的字符数),一个应用程序的国际化就是使该应用程序可以让其他国家的用户使用的过程. 1. 相关的Qt类和AP ...

  2. Java学习笔记——实现国际化程序开发 附:不同的国家/地区与语言缩写代码

    Locale类 要想实现国家化程序开发:首先需要解决的是不同国家用户的区域和语言编码问题,在java.util包里面提供有一个专门描述区域和语言编码的类,Local类,主要使用两个构造方法进行实例化: ...

  3. struts学习笔记三-国际化

    在程序设计领域,人们把能够在无需改写有关代码的前提下,让开发出来的应用程序能够支持多种语言和数据格式的技术称为国际化技术. 国际化简称为 i18n,根据internationalization简化而来 ...

  4. Struts2.x 学习笔记 之 国际化

    Java国际化基础 :http://blog.csdn.net/fanfan4569/article/details/52576000 (1)让系统加载国际化资源文件.加载的两种方式 ①自动加载:Ac ...

  5. 搜索引擎是如何工作的

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:吃瓜的东 链接:https://www.jianshu.co ...

  6. .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化

    原文:.Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化 我们知道资源被注册到R.java我们通过R.java就可以读取到界面中的组件.跟我们.net一样,通过ID来读取组件 ...

  7. Qt学习笔记,Qt国际化

    Qt学习笔记,Qt国际化 Qt国际化步骤: 第一步:设置.pro文件,加入TRANSLATIONS为国际化做准备 TRANSLATIONS = language/language_en.ts\     ...

  8. Flutter 笔记 | Flutter 文件IO、网络请求、JSON、日期与国际化

    文件IO操作 Dart的 IO 库包含了文件读写的相关类,它属于 Dart 语法标准的一部分,所以通过 Dart IO 库,无论是 Dart VM 下的脚本还是 Flutter,都是通过 Dart I ...

  9. struts2框架之国际化(参考第二天学习笔记)

    国际化 1. 回忆之前的国际化 1). 资源包(key=字符串) > 命名:基本名称+local部分.properties,res_zh.properties,res_zh_CN.propert ...

最新文章

  1. 1067. 试密码(20)
  2. 数字图像处理领域的二十四个典型算法及vc实现、第一章
  3. wxWidgets:使用控件
  4. BitNami Redmine Stack
  5. R开发(part11)--基于S4的面向对象编程
  6. c++代码表白_微信表情翻译成文字代码,微信表情翻译我喜欢你[多图]-软件资讯...
  7. 受上海Model S自燃影响?特斯拉市值周一蒸发18亿美元
  8. qt5调用python脚本 两次失败_Qt5调用Python脚本中的函数
  9. cloudflare 关于tls 检测,发送未知message type字节
  10. Office 365系列(6)------Stage Migrate 搬迁方式至O365上来方法及步骤总结
  11. text——Android下的默认字体详解
  12. 速达数据库服务器密码修改,速达,管家婆SQL Server帐套密码PJ方法 -电脑资料
  13. Sublime 编译汇编程序
  14. CF卡技术详解——笔记
  15. idea html设置字体大小,intellij idea设置(字体大小、背景)
  16. Spring-初识Spring框架-IOC控制反转(DI依赖注入)
  17. py.切片(slice)
  18. python爬取新浪新闻首页_Python爬虫学习:微信、知乎、新浪等主流网站的模拟登陆爬取方法...
  19. 什么是Shmoo图和Shmoo测试
  20. 海鸥算法的改进及其在工程设计优化问题中的应用

热门文章

  1. pom文件中引入常用的maven仓库
  2. Dosbox+Masm汇编语言
  3. 2022-2028年中国老年旅游市场深度调研及开发战略研究报告
  4. pytorch方法,Tensor及其基本操作_重点
  5. 晶体管逻辑芯片设计微缩图形化
  6. Tensorrt一些优化技术介绍
  7. HarmonyOS系统概述
  8. 3D MinkowskiEngine稀疏模式重建
  9. 开放式神经网络交换-ONNX(上)
  10. 2021年大数据Spark(三十六):SparkStreaming实战案例一 WordCount