`
chinajavawolf
  • 浏览: 115118 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

(A10)Tapestry Core:Localization

阅读更多

本文翻译出处 http://tapestry.apache.org/tapestry5/tapestry-core/guide/localization.html

本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。

chinajavawolf

本地化
本地化全部是关于用正确的语言获得正确的文本给用户的。
本地化在Tapestry中支持的很好。Tapestry 允许你很轻松的将提供给用户的文本从应用部分分离出来。。。甚至从你的Java代码和你的组件模板中分离。你可以用其他的语言翻译你的信息并让Tapestry装配起来。
组件信息目录
每一个组件类都可以拥有自己的组件信息目录。一个组件信息目录是一组有”.properties”扩展名的文件。这些属性文件都是使用java.util.ResourceBundle的同样格式。就像这行key=value。这些文件与组件的HTML模板放在一个包里。
因此一个类名为org.example.myapp.pages.MyPage,你就应该有一个主要的属性文件org/example/myapp/pages/MyPage.properties
如果你有一个这些值的译文,你应该提供额外的属性文件,添加一个ISO语言代码。这样,如果你有一法语译文,你可以创建一个MyPage_fr.properties文件。
在多语言特定文件里的任何值将替换来自主属性文件的值。如果你有一个甚至更多的特定资源,就像法国人说法语,你因该创建MyPage_fr_FR.properties文件(语言代码加上国家代码,你甚至可以添加变量。。。但这未必是你需要的,这实际上超出了习惯的语言代码)。
在目录中的信息通过key值被访问。当访问目录信息时Tapestrykey值不区分大小写。
信息目录的继承
如果一个组件类是另一个组件类的子类,那么它继承那个基类的信息目录。他自己的信息目录扩展和替换继承自基类的值。
这样,你可以有一个组件基类包含通用信息,并且在子类中扩展或者替换这些信息(就像你扩充或替换组件基类的方法一样)。当然这要工作在很多你愿意支持的继承层上。
应用信息目录
 

Tapestry 4支持一个大的应用信息目录,这在Tapestry5.05中提供了。.

<o:p>如果文件WEB-INF/AppName.properties存在于上下文内,它将被作为一个全局应用的信息目录。这个AppName源自你在web.xml文件中配置的过滤器的名字。查找这个文件区分大小写。这个属性文件可以被本地化。单独的页面和组件可以覆盖定义在这个消息目录中的值。</o:p>

本地化的组件模板
同样的查找机制应用于组件模板。Tapestry将在每个组件模板的版本中搜索一个本地版本然后应用最匹配的。这样你就可以用MyPage_fr.html给法国用户,MyPage.html给其他用户。
访问本地信息
上面讨论了创建什么样的文件和把他们放到哪里,但没涉及到如何使用这些信息。
可以有两种方式访问信息:
  •  在组件模板中使用message:绑定前缀。
  • 通过注入组件信息对象。
在第一种方案里,你可以使用message:绑定前缀给组件参数,或使用模板表达式。
  1. <t:layout title="message:page-title">  
  2.     
  3.  ${message:greeting}, ${user.name}!   
  4.     
  5.  . . .   
  6. t:layout>  
这里,page-title的信息从消息目录中萃取而来并被交给Border组件的title参数。
另外,greeting信息被萃取和写入响应作为模板的一部分。
 “prop”照样作为默认的绑定前缀,因此,user.name是一个属性路径,不是信息key
你可以用一组属性文件扩展这些内容。
page-title=Your Account
greeting=Welcome back
或许,一个法国版是:
page-title=Votre Compte
greeting=Bienvenue en arriere
你可以注入你的组件信息目录在你的类中,当作一个Message接口的实例
  1. @Inject  
  2. private Messages _messages;  
随后你可以get()信息,或者format()它们。
  1. public String getCartSummary()        
  2. {   
  3.    if (_items.isEmpty())   
  4.      return _messages.get("no-items");   
  5.         
  6.    return _messages.format("item-summary", _items.size());   
  7. }  
Format()操作使用java.text.Formatter工作,输出你期望的漂亮的格式。
no-items=Your shopping cart is empty.    
item-summary=You have %d items in your cart.
Tapestry模板中做同样简单,但有时它更容易在Java代码中使用.
遗失key
如果你关联了一个在信息目录中没有的key值,Tapestry不会抛出异常(那样做会让刚开始开发应用非常沮丧)。当一个key值不能被定位,一个”placeholder”信息被产生,例如"[[missing key: key-not-found]]"
重载
如果你在信息目录中更改了一个属性文件,你将立刻看到改变。就像组件类和组件模板一样。
Asset(是一些web应用中用到的资源,如图象,视频等)本地化
当注入assets时,注入的asset将被很好的本地化。查找最匹配的给当前区域制造,随后最终的Asset将表现出来
区域选择
每个请求的区域是从HTTP请求的头信息中被确定的。请求的区域反映web浏览器的环境或是用户在客户端进行的键盘选择。这可以很明确,例如,识别英式英语和美式英语。
Tapestry限定请求区域,将已知的内容放到请求清单内。Tapestry使用配置符号tapestry.supported-locales去选择有效的区域给每个请求。这个值是一个逗号分隔的区域名列表。Tapestry在列表中查找最匹配请求区域。例如,一个"fr_FR"请求区域将匹配”fr”而不是”de”。如果没有找到匹配的,那么在列表里的第一个区域名字被作为有效的区域(把这个当作默认的对应无匹配)。这样最根本的提供给讲法语的,就要将”fr”做为区域列表里的第一个。
转换区域
Tapestry目前不支持区域转换,但不久就会支持了。决心效仿Tapestry的行为:存储一个cookie在客户端在下次访问时提供默认的区域,并且在session中存储区域名(如果session存在)。
TODO:我相信这已经被Kent实现了。
分享到:
评论

相关推荐

    关于Tapestry的一些个人总结

    Tapestry简述: Tapestry是一个servle的扩展,它运行于servlet容器(Tomcat)或包含servlet容器的服务器(如Jboss) 通过使用Tapestry,开发者完全不需要使用JSP技术,用户只需要使用Tapestry提供的模板技术即可, ...

    深入浅出Tapestry

    资源名称:深入浅出Tapestry内容简介:本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在...

    tapestry-cometd:基于 CometD 的 Tapestry5 推送库

    基于库 特征: 无需编写一行 Javascript 即可创建推送应用程序 完全可配置 使用设置传入消息的... xmlns : p = " tapestry:parameter " &gt; &lt;!-- type a chat message in this form --&gt; &lt; form t :

    tapestry-5:Apache Tapestry 5的镜像

    Tapestry是一个面向组件的Java Web应用程序框架,专注于性能和开发人员的生产力。 组件只是页面的可重用部分。 创建自己的组件非常容易,Tapestry附带了许多可以使用的组件(窗体,循环,选择,复选框,网格,...

    tapestry-react:Apache Tapestry和React的集成

    挂毯React 将React( )与Tapestry( )一起使用。 该库提供了将Tapestry与JSX模板结合... define ( [ 't5/core/dom' , 'react' , 'react-dom' ] , function ( dom , React , ReactDOM ) { var HelloMessage = React

    (Tapestry)An infrastructure for Fault-Tolerant Wide-area Location and Routing.ppt

    (Tapestry)An infrastructure for Fault-Tolerant Wide-area Location and Routing.

    tapestry教程资料文档合集

    Tapestry5最新中文教程.doc 作者 Renat Zubairov & Igor Drobiazko译者 沙晓兰 发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf ...

    tapestry5以上的帮助事例,帮助文档与spring衔接文档

    Tapestry是一个基于控件的框架以致于用它开发Web应用类似开发传统的GUI应用。你用Tapestry开发Web应用时你无需关注以操作为中心的(Operation-centric) Servlet API.引用Tapestry网站上的一句话:"Tapestry用对象...

    tapestry官方中文文档

    Tapestry 4 官方文档中文版本,现在中文资料比较少,和大家共享一下

    tapestry 5.1.0.5 官方组件文档 天涯浪子

    来自:http://tapestry.apache.org/tapestry5.1/tapestry-core/ref

    tapestry:验证和编辑小型真核基因组装配体

    挂毯Tapestry是一种使用长序列阅读来验证和编辑小型真核基因组装配体的工具。 它旨在帮助识别接近完整的基因组装配体中的完整染色体,共生体,单倍型,复杂特征和错误。 在上有预印本。 它已被用来验证染色体。 ...

    tapestry-src-5.1.0.5.zip

    包含: tapestry 的源代码, tapestry集成spring2.0 tapestry快速启动 tapestry upload tapestry hibernate tapestry annotations

    Tapestry5.0.16_API文档

    Tapestry5.0.16文档和大家一起学习

    Maven + Tapestry5.3.8 + Spring4.0.5 + Oracle10g

    这是Tapestry5.3.8 版本的一个大Demo,集合Spring4.0, 采用Maven 项目管理工具,没有集合Hibernate。 之所以说是个大Demo,是因为这项目中包含的内容并不少,包含: 1)解决了Tapestry5.3.8中文Bug问题 2)Tapestry...

    tapestry 实例

    tapestry 实例tapestry 实例tapestry 实例tapestry 实例

    tapestry3开发指南,带tapestry3所有jar包

    tapestry3开发指南,带tapestry3所有jar包

    深入浅出tapestry

    本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在J2EE Web应用程序中应用Tapestry框架的...

    Tapestry4开发指南

    Tapestry4的雏形是Tapestry3.1,Tapestry的作者Howard,不光开发了Tapestry,还同时开发了一个轻量级框架Hivemind。所以Tapestry3.1的开发一开始就处于Hivemind框架之下。后来由于种种原因,Howard没有将Tapestry3.1...

    Tapestry4.1.2 入门-介绍

    不必关心链接!不必关心请求(http request)到了哪里!...Tapestry构建于底层的request-resonse模式,基于Servlet技术,抽象出面向组件开发的模型。Tapestry关心的是:页面、组件、事件、对象、方法、属性!

    Tapestry4.1.2入门-介绍

    Tapestry 不必关心链接!不必关心请求(http request)到了哪里!不必关心响应(http response)要转向哪里!Tapestry构建于底层的request-resonse模式,基于Servlet技术,抽象出面向组件开发的模型。Tapestry关心的是:...

Global site tag (gtag.js) - Google Analytics