本地化
本地化全部是关于用正确的语言获得正确的文本给用户的。
本地化在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值被访问。当访问目录信息时Tapestry对key值不区分大小写。
信息目录的继承
如果一个组件类是另一个组件类的子类,那么它继承那个基类的信息目录。他自己的信息目录扩展和替换继承自基类的值。
这样,你可以有一个组件基类包含通用信息,并且在子类中扩展或者替换这些信息(就像你扩充或替换组件基类的方法一样)。当然这要工作在很多你愿意支持的继承层上。
应用信息目录
Tapestry 4支持一个大的应用信息目录,这在Tapestry5.05中提供了。.
<o:p>如果文件WEB-INF/AppName.properties存在于上下文内,它将被作为一个全局应用的信息目录。这个AppName源自你在web.xml文件中配置的过滤器的名字。查找这个文件区分大小写。这个属性文件可以被本地化。单独的页面和组件可以覆盖定义在这个消息目录中的值。</o:p>
本地化的组件模板
同样的查找机制应用于组件模板。Tapestry将在每个组件模板的版本中搜索一个本地版本然后应用最匹配的。这样你就可以用MyPage_fr.html给法国用户,MyPage.html给其他用户。
访问本地信息
上面讨论了创建什么样的文件和把他们放到哪里,但没涉及到如何使用这些信息。
可以有两种方式访问信息:
-
在组件模板中使用message:绑定前缀。
-
通过注入组件信息对象。
在第一种方案里,你可以使用message:绑定前缀给组件参数,或使用模板表达式。
- <t:layout title="message:page-title">
-
- ${message:greeting}, ${user.name}!
-
- . . .
- 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接口的实例
- @Inject
- private Messages _messages;
随后你可以get()信息,或者format()它们。
- public String getCartSummary()
- {
- if (_items.isEmpty())
- return _messages.get("no-items");
-
- return _messages.format("item-summary", _items.size());
- }
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实现了。
分享到:
- 2007-05-09 23:01
- 浏览 1763
- 评论(0)
- 论坛回复 / 浏览 (0 / 2219)
- 查看更多
相关推荐
### Tapestry 5:构建 Web 应用程序 #### 一、Tapestry 5 概述 Tapestry 5 是一个强大的 Java Web 开发框架,它为开发者提供了高效且简洁的方式去创建复杂的 Web 应用程序。本书《Tapestry 5:构建 Web 应用程序》...
### Tapestry开发知识点详解 #### 一、Tapestry简介及其背景 Tapestry是一种用于构建高度可伸缩且易于维护的Web应用程序的Java框架。它最初由Howard Lewis Ship开发,并于2000年发布。Tapestry的设计理念是为了...
"tapestry学习入门资料" Tapestry 是一个开源的基于 servlet 的应用程序框架,它使用组件对象模型来创建动态的、交互的 web 应用。 Tapestry 使得 Java 代码与 HTML 完全分离,利用这个框架开发大型应用变得...
1. **Tapestry Core**: 这是Tapestry框架的基础部分,包含了核心组件、服务容器(Tapestry IoC)和页面生命周期管理。通过源码分析,我们可以理解其如何实现页面组件的渲染、事件处理和依赖注入。 2. **Tapestry ...
### Tapestry字典知识点概述 #### 一、基础知识 (Using Forms) **1.1 page文件和class文件联系** - **概念**: 在Tapestry中,`page`文件指的是页面定义文件,通常为HTML模板;而`class`文件则是Java类文件,用于...
挂毯React 将React( )与Tapestry( )一起使用。 该库提供了将Tapestry与JSX模板结合... define ( [ 't5/core/dom' , 'react' , 'react-dom' ] , function ( dom , React , ReactDOM ) { var HelloMessage = React
《Tapestry 5:构建Web应用程序》是关于Tapestry 5框架的一本权威指南。Tapestry 5是一个强大的Java Web应用框架,由Apache软件基金会开发并维护,它致力于提供一种更高效、更优雅的方式来构建动态、交互式的Web应用...
### Tapestry5:构建Web应用程序 #### 一、Tapestry5概述 Tapestry5是一种先进的、基于Java的Web开发框架,它以其强大的功能、灵活性以及易用性著称。该框架由Howard Lewis Ship创建,并由Apache软件基金会维护。...
Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它强调了组件化、模块化和可重用性,使得开发复杂的Web应用变得更加简单。本文将深入介绍Tapestry 4的相关知识点。 1. **组件化编程**: ...
Tapestry是一个分布式系统基础设施,专门设计用于实现容错性的广域定位和路由。这个系统由Ben Y. Zhao、John Kubiatowicz和Anthony D. Joseph等人在加州大学伯克利分校的计算机科学部开发,旨在应对无处不在计算的...
2. **Tapestry Core**:`tapestry-core-5.3.8.jar`是Tapestry框架的核心库,包含了框架的基础组件、服务和API。它提供了页面、组件、事件处理、URL映射等功能,是构建Tapestry应用的基础。 3. **Plastic**:`...
这个压缩包包含了多个以"Tapestry"开头的子文件,如 "tapestry-core", "tapestry-hibernate", "tapestry-ioc", "tapestry-upload", 和 "tapestry-spring",这些都是Tapestry框架的不同模块或插件。这些文件的后缀是...
资源名称:深入浅出Tapestry内容简介:本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在...
Tapestry是一款强大的Java Web应用程序框架,由Apache软件基金会维护,它提供了一种基于组件的模型来构建动态、数据驱动的Web应用。本教程将帮助初学者了解Tapestry的基本概念,带你逐步入门并掌握其核心组件的使用...
基于库 特征: 无需编写一行 Javascript 即可创建推送应用程序 完全可配置 使用设置传入消息的... xmlns : p = " tapestry:parameter " > <!-- type a chat message in this form --> < form t :
- **tapestry-core**:Tapestry的核心库,包含了框架的主要功能和API。 - **tapestry-test**:测试支持模块,提供了针对Tapestry应用的单元测试和集成测试工具。 - **tapestry-spring**:Tapestry与Spring框架的...
《深入理解 Tapestry 4.1.5:项目实例与核心库解析》 Tapestry 是一个基于 Java 的开源Web 应用程序框架,它强调组件化开发,提供了一种强大的方式来构建动态、高性能的Web 应用。在"tapestry-project-4.1.5"这个...
**Tapestry 3 开发指南** Tapestry 3 是一个开源的Java Web应用程序框架,它在20世纪90年代末至21世纪初非常流行,由Apache软件基金会维护。这个框架提供了组件化、事件驱动和声明式编程模型,帮助开发者构建动态、...
3. **本地化模板(Localization of Templates):** - 可以为不同的语言版本创建不同的模板文件。 4. **本地化资源(Localized Assets):** - 支持根据当前语言选择适当的图像和其他静态资源。 5. **切换语言(Locale ...