📜  GWT国际化

📅  最后修改于: 2021-01-02 12:50:30             🧑  作者: Mango

GWT国际化

介绍:

  • 以一种可以与不同地区或国家/地区语言兼容的方式设计应用程序的技术。
  • 国际化,要求其是要国际到属性文件中的使用数据的分离。
  • 它与Java编程语言类似,在Java编程语言中,国际化是通过Resource Bundles实现的。为每个需要支持的语言环境创建.properties文件的位置。

国际化技术的类型

  • 静态字符串国际化
  • 动态字符串国际化
  • 可本地化的界面

静态字符串国际化

  • 这是转换常量和参数化字符串的好技术。
  • 这是最简单的实现方法,因为它不需要太多的开销。
  • 它使用标准Java属性文件存储转换后的字符串和参数化消息。

动态字符串国际化

  • 动态字符串国际化比静态字符串国际化慢,但更灵活。
  • 使用此技术的应用程序看起来模块主页中的本地化字符串。由于这种技术,添加新的语言环境时不需要重新编译它们。

可本地化的界面

  • 这是实现接口的最强大的技术。
  • 这是一种很少使用的高级国际化技术
  • 我们需要高级来实现Localizable接口以实现简单的字符串替换。它还会创建自定义类型的本地化版本。

GWT国际化的实施

步骤1:实施I18N:扩展模块XML文件中的语言环境值,以提及应用程序要支持的每个语言环境值,如下所示。








步骤2:为每个语言环境创建.properties文件:所有资源包都必须具有相同的基本名称,并且后缀必须不同,以指示语言环境。消息查找算法考虑消息的基本名称,当前语言环境和密钥。将所有.properties文件放在src包中。

AppConstants.properties适用于默认语言环境,即英语,具有如下所示的键/值对。

username: Username
password: Password
login: Login

AppConstants_fr.properties支持法语语言环境。键/值对如下。

username: Nom d'utilisateur
password: Mot de passe
login: connexion

步骤3:创建与属性文件相对应的接口:

  • 创建一个扩展GWT常量接口的接口。
  • 通过将资源束绑定到此接口,可以使用它们。
  • 属性文件的基本名称和接口名称必须相同。
  • 界面中的每个方法都对应于属性文件中的键。
public interface AppConstants extends Constants {

String username();
String password();
String login();

}

步骤4:设置入口点类

public void onModuleLoad() {
// Getting the values from resource bundle through interface methods
        Label username=new Label(constants.username());
        Label passsword=new Label(constants.password());
        TextBox ubox=new TextBox();
        PasswordTextBox pbox=new PasswordTextBox();
        Button button = new Button(constants.login());
    }

码:

public class LoginI18nDemo implements EntryPoint {
public LoginI18nDemo () {}
AppConstants constants=(AppConstants)GWT.create(AppConstants.class);
public void onModuleLoad() {
Label username=new Label(constants.username());
Label passsword=new Label(constants.password());
TextBox ubox=new TextBox();
PasswordTextBox pbox=new PasswordTextBox();
Button button = new Button(constants.login());
Grid g=new Grid(3,2);
g.setWidget(0,0,username);
g.setWidget(0,1,ubox);
g.setWidget(1, 0, passsword);
g.setWidget(1,1,pbox);
g.setWidget(2, 1, button);
HorizontalPanel links=new HorizontalPanel();
Anchor french=new Anchor("French",GWT.getHostPageBaseURL()+"?locale=fr");
Anchor hindi=new Anchor("Hindi",GWT.getHostPageBaseURL()+"?locale=hi");
links.add(french);
links.add(hindi);
links.setSpacing(5);
RootPanel.get().add(g);
RootPanel.get().add(links);
    }
}

输出: