struts20系列教程四struts2国际化i18n您的应用程序_第1页
struts20系列教程四struts2国际化i18n您的应用程序_第2页
struts20系列教程四struts2国际化i18n您的应用程序_第3页
struts20系列教程四struts2国际化i18n您的应用程序_第4页
struts20系列教程四struts2国际化i18n您的应用程序_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Struts 2.0 I18N 教 程 示 例 ,教 程 详 细 地 演 示 了 在 Struts2.0 中 如 何 正 确 配置 并 运 行 I18N 国 际 化 ,欢 迎 在 线 阅 读 Struts2.0 教 程国 际 化 是 商 业 系 统 中 不 可 或 缺 的 一 部 分 , 所 以 无 论 您 学 习 的 是 什 么 Web 框架 , 它 都 是 必 须 掌 握 的 技 能 。其 实 , Struts 1.x 在 此 部 分 已 经 做 得 相 当 不 错 了 。 它 极 大 地 简 化 了 我 们 程 序员 在 做 国 际 化 时 所 需 的 工 作 , 例 如 , 如 果 您 要 输 出 一 条 国 际 化 的 信 息 , 只 需 在 代 码包 中 加 入 FILE-NAME_xx_XX.properties( 其 中 FILE-NAME 为 默 认 资 源 文 件的 文 件 名 ) , 然 后 在 struts-config.xml 中 指 明 其 路 径 , 再 在 页 面 用 标 志 输 出 即 可 。 不 过 , 所 谓 “没 有 最 好 , 只 有 更 好 ”。 Struts 2.0 并 没 有 在 这 部 分 止 步 , 而是 在 原 有 的 简 单 易 用 的 基 础 上 , 将 其 做 得 更 灵 活 、 更 强 大 。国 际 化 Hello World下 面 让 我 们 看 一 个 例 子 HelloWorld。 这 个 例 子 演 示 如 何 根 据 用 户 浏 览 器的 设 置 输 出 相 应 的 HelloWorld。1. 在 Eclipse 创 建 工 程 配 置 开 发 和 运 行 环 境 ( 如 果 对 这 个 步 骤 有 问 题 , 可 以参 考 我 早 前 的 文 章 为 Struts 2.0 做 好 准 备 ) 。 2. 在 src 文 件 夹 中 加 入 perties 文 件 , 内 容 如 下 : struts.custom.i18n.resources=globalMessagesStruts 2.0 有两个配置文件,struts.xml 和 perties 都是放在 WEB-INF/classes/下。 o struts.xml 用于应用程序相关的配置 o perties 用于 Struts 2.0 的运行时(Runtime )的配置3. 在 src 文 件 夹 中 加 入 globalMessages_en_US.properties 文 件 , 内容 如 下 :HelloWorld=Hello World!4. 在 src 文 件 夹 中 加 入 globalMessages_zh_CN.properties 文 件 , 内容 如 下 :HelloWorld=你 好 , 世 界 !在此想和大家分享一个不错的编写 properties 文件的 Eclipse 插件(plugin),有了它我们在编辑一些简体中文、繁体中文等 Unicode 文本时,就不必再使用 native2ascii 编码了。您可以通过 Eclipse 中的软件升级(Software Update)安装此插件,步骤如下:1、展开 Eclipse 的 Help 菜单,将鼠标移到 Software Update 子项,在出现的子菜单中点击Find and Install;2、在 Install/Update 对话框中选择 Search for new features to install,点击 Next;3、在 Install 对话框中点击 New Remote Site;4、在 New Update Site 对话框的 Name 填入“PropEdit” 或其它任意非空字符串,在 URL 中填入 http:/propedit.sourceforge.jp/eclipse/updates/;5、在 Site to include to search 列表中,除上一步加入的 site 外的其它选项去掉,点击 Finsih;6、在弹出的 Updates 对话框中的 Select the features to install 列表中将所有结尾为 “3.1.x”的选项去掉(适用于 Eclipse 3.2 版本的朋友);7、点击 Finish 关闭对话框;8、在下载后,同意安装,再按提示重启 Eclipse,在工具条看到形似 vi 的按钮表示安装成功,插件可用。此时,Eclpise 中所有 properties 文件的文件名前有绿色的 P 的图标作为标识。1. 在 WebContent 文 件 夹 下 加 入 HelloWorl.jsp 文 件 , 内 容 如 下 :Hello World2. 发 布 运 行 应 用 程 序 , 在 浏 览 器 地 址 栏 中 输 入 http:/localhost:8080/Struts2_i18n/HelloWorld.jsp , 出 现 图 1 所 示 页 面 。图 1 中 文 输 出 3. 将 浏 览 器 的 默 认 语 言 改 为 “英 语 ( 美 国 ) ”, 刷 新 页 面 , 出 现 图 2 所 示页 面 。图 2 英 文 输 出 上 面 的 例 子 的 做 法 , 与 Struts 1.x 的 做 法 相 似 , 似 乎 并 不 能 体 现 Struts 2.0 的 优 势 。 不 过 , 我 在 上 面 的 例 子 用 了 两 种 方 法 来 显 示 国 际 化 字 符 串 , 其 输 出 是相 同 的 。 其 实 , 这 就 是 Struts 2.0 的 一 个 优 势 , 因 为 它 默 认 支 持 EL, 所 示 我们 可 以 用 getText 方 法 来 简 洁 地 取 得 国 际 化 字 符 串 。 另 外 更 普 遍 的 情 况 在使 用 UI 表 单 标 志 时 , getText 可 以 用 来 设 置 label 属 性 , 例 如 :之 所 以 说 Struts 2.0 的 国 际 化 更 灵 活 是 因 为 它 可 以 能 根 据 不 同 需 要 配 置 和 获取 资 源 ( properties) 文 件 。 在 Struts 2.0 中 有 下 面 几 种 方 法 :1. 使 用 全 局 的 资 源 文 件 , 方 法 如 上 例 所 示 。 这 适 用 于 遍 布 于 整 个 应 用 程 序 的国 际 化 字 符 串 , 它 们 在 不 同 的 包 ( package) 中 被 引 用 , 如 一 些 比 较 共用 的 出 错 提 示 ; 2. 使 用 包 范 围 内 的 资 源 文 件 。 做 法 是 在 包 的 根 目 录 下 新 建 名 的 perties 和 package_xx_XX.properties 文 件 。 这 就 适 用 于 在 包 中不 同 类 访 问 的 资 源 ; 3. 使 用 Action 范 围 的 资 源 文 件 。 做 法 为 Action 的 包 下 新 建 文 件 名 ( 除文 件 扩 展 名 外 ) 与 Action 类 名 同 样 的 资 源 文 件 。 它 只 能 在 该 Action中 访 问 。 如 此 一 来 , 我 们 就 可 以 在 不 同 的 Action 里 使 用 相 同 的 properties 名 表 示 不 同 的 值 。 例 如 , 在 ActonOne 中 title 为 “动 作 一 ”,而 同 样 用 title 在 ActionTwo 表 示 “动 作 二 ”, 节 省 一 些 命 名 工 夫 ; 4. 使 用 标 志 访 问 特 定 路 径 的 properties 文 件 。 使 用 方 法 请 参考 我 早 前 的 文 章 常 用 的 Struts 2.0 的 标 志 ( Tag) 介 绍 。 在 您 使用 这 一 方 法 时 , 请 注 意 标 志 的 范 围 。 在 到 之 间 , 所 有 的 国 际 化 字 符 串 都 会 在 名 为 xxxxx 资 源 文 件 查 找 , 如 果 找 不 到 , Struts 2.0 就 会 输 出 默 认 值 ( 国 际 化字 符 串 的 名 字 ) 。上 面 我 列 举 了 四 种 配 置 和 访 问 资 源 的 方 法 , 它 们 的 范 围 分 别 是 从 大 到 小 , 而 Struts 2.0 在 查 找 国 际 化 字 符 串 所 遵 循 的 是 特 定 的 顺 序 , 如 图 3 所 示 :图 3 资 源 文 件 查 找 顺 序 图假 设 我 们 在 某 个 ChildAction 中 调 用 了 getText(“user.title“), Struts 2.0 的 将 会 执 行 以 下 的 操 作 : 1. 查 找 ChildAction_xx_XX.properties 文 件 或 ChildAperties; 2. 查 找 ChildAction 实 现 的 接 口 , 查 找 与 接 口 同 名 的 资 源 文 件 MyIperties; 3. 查 找 ChildAction 的 父 类 ParentAction 的 properties 文 件 , 文 件 名为 ParentAperties; 4. 判 断 当 前 ChildAction 是 否 实 现 接 口 ModelDriven。 如 果 是 , 调 用 getModel()获 得 对 象 , 查 找 与 其 同 名 的 资 源 文 件 ; 5. 查 找 当 前 包 下 的 perties 文 件 ; 6. 查 找 当 前 包 的 父 包 , 直 到 最 顶 层 包 ; 7. 在 值 栈 ( Value Stack) 中 , 查 找 名 为 user 的 属 性 , 转 到 user 类 型同 名 的 资 源 文 件 , 查 找 键 为 title 的 资 源 ; 8. 查 找 在 perties 配 置 的 默 认 的 资 源 文 件 , 参 考 例 1; 9. 输 出 user.title。参 数 化 国 际 化 字 符 串许 多 情 况 下 , 我 们 都 需 要 在 动 行 时 ( runtime) 为 国 际 化 字 符 插 入 一 些 参 数, 例 如 在 输 入 验 证 提 示 信 息 的 时 候 。 在 Struts 2.0 中 , 我 们 通 过 以 下 两 种 方 法做 到 这 点 :1. 在 资 源 文 件 的 国 际 化 字 符 串 中 使 用 OGNL, 格 式 为 $表 达 式 , 例 如:validation.require=$getText(fileName) is required2. 使 用 java.text.MessageFormat 中 的 字 符 串 格 式 , 格 式 为 参 数 序号 ( 从 0 开 始 ) , 格 式 类 形 ( number | date | time | choice) , 格 式 样 式 , 例 如 :validation.between=Date must between 0, date, short and 1, date, short在 显 示 这 些 国 际 化 字 符 时 , 同 样 有 两 种 方 法 设 置 参 数 的 值 :1. 使 用 标 志 的 value0、 value1.valueN 的 属 性 , 如 :2. 使 用 param 子 元 素 , 这 些 param 将 按 先 后 顺 序 , 代 入 到 国 际 化 字 符 串的 参 数 中 , 例 如 :让 用 户 方 便 地 选 择 语 言开 发 国 际 化 的 应 用 程 序 时 , 有 一 个 功 能 是 必 不 可 少 的 让 用 户 快 捷 地 选 择或 切 换 语 言 。 在 Struts 2.0 中 , 通 过 ActionContext.getContext().setLocale(Locale arg)可 以 设 置 用 户 的 默 认 语 言 。 不 过 , 由 于 这 是 一 个 比 较 普 遍 的 应 用场 景 ( Scenario) , 所 以 Struts 2.0 为 您 提 供 了 一 个 名 i18n 的 拦 截 器 ( Interceptor) , 并 在 默 认 情 况 下 将 其 注 册 到 拦 截 器 链 ( Interceptor chain) 中。 它 的 原 理 为 在 执 行 Action 方 法 前 , i18n 拦 截 器 查 找 请 求 中 的 一 个 名 为 “request_locale“的 参 数 。 如 果 其 存 在 , 拦 截 器 就 将 其 作 为 参 数 实 例 化 Locale 对 象, 并 将 其 设 为 用 户 默 认 的 区 域 ( Locale) , 最 后 , 将 此 Locale 对 象 保 存 在 session 的 名 为 “WW_TRANS_I18N_LOCALE”的 属 性 中 。下 面 , 我 将 提 供 一 完 整 示 例 演 示 它 的 使 用 方 法 。package tutorial;import java.util.Hashtable;import java.util.Locale;import java.util.Map;publicclass Locales public Map getLocales() Map locales =new Hashtable(2);locales.put(“American English“, Locale.US);locales.put(“Simplified Chinese“, Locale.CHINA);return locales;tutorial/Locales.java“ name=“langForm“ style=“background-color: powderblue; padding-top: 4px; padding-bottom: 4px;“Language: LangSelector.jsp上 述 代 码 的 原 理 为 , LangSelector.jsp 先 实 例 化 一 个 Locales 对 象 , 并 把对 象 的 Map 类 型 的 属 性 locales 赋 予 下 拉 列 表 ( select) 。 如 此 一 来 , 下 拉 列表 就 获 得 可 用 语 言 的 列 表 。 大 家 看 到 LangSelector 有 标 志 和 一 段 Javascript 脚 本 , 它 们 的 作 用 就 是 在 用 户 在 下 拉 列 表 中 选 择 了 后 , 提 交 包 含 “reqeust_locale”变 量 的 表 单 到 Action。 在 打 开 页 面 时 , 为 了 下 拉 列 表 的 选 中 的 当前 区 域 , 我 们 需 要 到 session 取 得 当 前 区 域 ( 键 为 “WW_TRANS_I18N_LOCALE”的 属 性 ) , 而 该 属 性 在 没 有 设 置 语 言 前 是 为 空 的 , 所 以 通 过 值 栈 中 locale属 性 来 取 得 当 前 区 域 ( 用 户 浏 览 器 所 设 置 的 语 言 ) 。你 可 以 把 LangSelector.jsp 作 为 一 个 控 件 使 用 , 方 法 是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论