GWT笔记(5)

简介: GWT笔记(5) Internationalization 国际化 (I18N) 国际化(简写为i18n)是一个附加框架的过程,它让你的应用程序支持不同国家的语言。

GWT笔记(5)


Internationalization 国际化 (I18N)
国际化(简写为i18n)是一个附加框架的过程,它让你的应用程序支持不同国家的语言。
Localization 本地化(L10N)
本地化(简写为l10n)为当使用框架定制应用程序的每一种语言时。
GWT提供了完整的和可伸缩的国际化支持工具。
还有拼写检查和语法错误检查等。
实现国际化的标准Java方法是通过资源绑定和配置文件来实现。GWT也是如此。
一、Constants,Messages and Dictionary
GWT为本地化文本提供了4种选择。
1)常量 Constants
这种类型只能用于文本中且不能替换。例如域标签或菜单名,还有数字、布尔值和映射等。
2)ConstantsWithLookup
者是同样的常量接口,且你可以用动态字符串来查找它。
3)Message
这是通常的字符串,可以包括占位符。
4)Dictionary
这是最灵活的,在所有选择中最低效的,字典接口支持动态指定现场(locale)。
前三者更高效一些,因为能提前决定现场,再编译到应用程序。GWT编译器为每一个现场产生一个不同的.cache.html文件,并在运行时加载适合的版本。
消息接口对大多数应用程序来说是最好的选择,下面将显示它的用法。
它们的API是相似的。在应用程序中使用多个风格是可能的。
二、建立属性配置文件(Property File)
下面用一个简单的程序开始,使用消息代替硬编码的(hard-coded)字符串来转换它,原始程序如下:
I18NProject/src/com/xyz/client/I18NOrig.java
--------------------------------------------------
public class I18NOrig implements EntryPoint{
  privae Button m_clickMeButton;
  public void onModuleLoad(){
    RootPanel rootPanel=RootPanel.get();
    {
      m_clickMeButton=new Button();
      rootPanel.add(m_clickMeButton);
      m_clickMeButton.setText("Click me!");
      m_clickMeButton.addClickListener(new ClickListener(){
        public void onClick(Widget sender){
          Window.alert("Hello, GWT World!");
        }
      });
    }
  }
}
--------------------------------------------------
第一步是查找所有的字符串并复制它们到属性配置文件。它使用标准的name = value 格式。注释用“#”开始,用于代替参数的占位符用{0},{1}等等来指定。下面是用于转换程序的属性配置文件:
I18NProject/src/com/xyz/client/AppMessages.properties
--------------------------------------------------
m_clickMeButton_text=Click me!
m_helloAlert_text=Hello,{0} World!
--------------------------------------------------
在客户端,这个文件是必须的。这是缺省的语言文件,英语或其它语言。要提供翻译成其它语言,使用ISO语言和国家代码后缀,如:“_fr”指法语,“_fr_CA”指加拿大法语。
I18NProject/src/com/xyz/client/AppMessages_fr.properties
--------------------------------------------------
m_clickMeButton_text=Cliquez-moi!
m_helloAlert_text=Bonjour, Monde de {0}!
三、创建存取器类(Accessor Class)
如果你熟悉标准Java消息,你就知道它们是靠字符串来访问的。
要得到已翻译的消息,调用方法getString("m_clickMeButton_text")。但这种方法有两个问题,一是消息键要和消息值一样长或比它长;二是如果消息中有错误,则只能在运行时才能发现。
GWT改进了消息工作方式。它通过Java方法来引用消息,而不是靠字符串。这需要建立一个新的Java类,对每一个消息有一个相一致的方法。
I18NProject/src/com/xyz/client/AppMessages.java
--------------------------------------------------
package com.xyz.client;
import com.google.gwt.i18n.client.Messages;
public interface AppMessages extends Messages{
  String m_clickMeButton_text();
  String m_helloAlert_text(String toolkit);
}
--------------------------------------------------
注意:不管你的应用程序要支持多少种语言,这里只能有一个存取器类。
四、引用消息
下一步就是在代码中用引用新消息来取代静态字符串。使用GWT.create来得到一个对存取器类的引用后,调用新方法来检索消息文本。例:
I18NProject/src/com/xyz/client/I18N.java
--------------------------------------------------
public class I18N implements EntryPoint{
  private static final AppMessages MESSAGES=(AppMessages) Gwt.create(AppMessages.class);
  private Button m_clickMeButton;
  public void onModuleLoad(){
    RootPanel rootpanel=RootPanel.get();
    {
      m_clickMeButton=new Button();
      rootpanel.add(m_clickMeButton);
      m_clickMeButton.setText(MESSAGES.m_clickMeButton_text());
      m_clickMeButton.addClickListener(new ClickListener(){
        public void onClick(Widget sender){
          Window.alert(MESSAGES.m_helloAlert_text("GWT"));
        }
      });
    }
  }
}
--------------------------------------------------
五、改动模块
模块文件要完成转变,有两个小改动是必须的。首先,需要告诉GWT从I18N模块继承的功能性;其次,需要定义要翻译成的哪种语言。例:
I18NProject/src/com/xyz/I18N.gwt.xml
--------------------------------------------------

 
 
 

--------------------------------------------------
六、运行例子
首先在主机模式下运行例子。
要尝试法语版本,在浏览器中编辑URL并增加后缀?locale=fr。按回车键刷新页面,将显示用法语代替英语。点击按钮,也显示法语文本。
在HTML文件中选择现场的另一种方法是嵌入它作为元标记(meta tag)。如:

在服务器端动态产生HTML可能更方便,就像JSP文件一样。
 

目录
相关文章
|
人工智能 Rust 开发者
【MCP教程系列】使用Python在阿里云百炼创建基于UVX的MCP服务完整指南
本文介绍如何使用基于uvx工具链的Python项目,结合阿里云百炼平台实现小红书文案审核助手的MCP服务开发与部署。首先通过安装uv工具初始化项目并配置虚拟环境,编写server.py文件调用qwen-plus模型完成内容审核功能。随后将项目打包上传至PyPI,供全球开发者访问。接着在阿里云百炼平台上配置并部署该MCP服务,解决可能的依赖问题。最后,在智能体应用中引入此MCP服务进行测试验证,确保其正常运行。
2788 0
|
数据安全/隐私保护 Python
解决CondaHTTPError:HTTP 000 CONNECTION FAILED for url<https://mirrors.tuna.tsinghua.edu.cn/anaconda***
今天做项目的时候,Python导入一个包一直有各类问题,而后最终锁定问题是CondaHTTPError:HTTP 000 CONNECTION FAILED for url<https://mirrors.tuna.tsinghua.edu.cn/anaconda*** 这就是清华的源出问题了,配置没配对。
解决CondaHTTPError:HTTP 000 CONNECTION FAILED for url<https://mirrors.tuna.tsinghua.edu.cn/anaconda***
|
存储 安全 前端开发
|
自然语言处理 供应链 数据可视化
大数据在市场营销中的应用案例:精准洞察,驱动增长
【8月更文挑战第25天】大数据在市场营销中的应用案例不胜枚举,它们共同展示了大数据技术在精准营销、市场预测、用户行为分析等方面的巨大潜力。通过深度挖掘和分析数据,企业能够更加精准地洞察市场需求,优化营销策略,提升市场竞争力。未来,随着大数据技术的不断发展和普及,其在市场营销领域的应用将更加广泛和深入。
3172 3
|
数据库 数据安全/隐私保护
RBAC用户权限管理数据库设计
原文来自:http://minjiechenjava.iteye.com/blog/1759482 最近正在为下一项目版本设计权限管理的。看到了这篇文章,可以参考参考! RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。
8099 1
|
NoSQL Linux Redis
Redis安装与配置指南:适用于Windows、Mac和Linux系统的详细教程
Redis安装与配置指南:适用于Windows、Mac和Linux系统的详细教程
2297 0
|
3天前
|
云安全 人工智能 自然语言处理
AI说的每一句话,都靠谱吗?
阿里云提供AI全栈安全能力,其中针对AI输入与输出环节的安全合规挑战,我们构建了“开箱即用”与“按需增强”相结合的多层次、可配置的内容安全机制。