当前位置:首页 » struts2在线教程 » Struts2本地化/国际化(i18n)

Struts2本地化/国际化(i18n)

Struts2本地化/国际化(i18n)实例代码和在线教程。

国际化(i18n)的产品和服务,使他们能很容易地适应当地的具体语言和文化的规划和实施的过程中,这个过程被称为定位。在国际化的过程中有时也被称为翻译或本地化启用。国际化是简称i18n的,因为我和两端用一个n字打头,有18个字符之间的第i个和最后的n。

Struts2提供本地化,即国际化(i18n)支持,通过资源包,拦截器和标签库在以下地方:

  • UI标签

  • 消息和错误.

  • 使用动作类.

资源包:

Struts2的使用资源包的Web应用程序的用户提供多个语言和区域选项。您不必担心在不同的语言编写网页。所有你所要做的是创建一个资源包,你要为您的用户绑定某种语言。资源包将包含标题,消息和其他文本的语言。资源包文件,其中包含的键/值对您的应用程序的默认语言。

最简单的命名格式的资源文件是:

bundlename_language_country.properties

这里软件包名可能ActionClass的,接口,超类,模式,封装,全球资源属性。接下来的部分语言_代表该国的语言环境,例如es_ES和英语(美国)区域设置为代表的EN_US等在这里,你可以跳过全国部分是可选的,西班牙语(西班牙)区域表示。
当你引用一个消息元素Struts框架通过其键搜索相应的消息包按以下顺序:


  • ActionClass.properties

  • Interface.properties

  • SuperClass.properties

  • model.properties

  • package.properties

  • struts.properties

  • global.properties

在多语言开发应用程序,你将有多个属性文件,这些语言/区域设置,并定义相应的键/值对中的所有内容。例如,如果你要开发应用程序,西班牙语,英语(美国)(默认)和法语,你必须创建三个属性文件。在这里,我将只使用global.properties文件,你可以使用不同的属性文件来隔离不同类型的消息。

  1. global.properties: 默认情况下,英语(美国)将被应用

  2. global_fr.properties: 这将是对法语语言环境中使用。

  3. global_es.properties: 这将是西班牙语言环境中使用。

Access the messages:

有几种方法可以访问的信息资源,包括gettext,文本标签,UI标签的关键属性,以及对国际化标签。让我们来看看他们在短暂:
要显示i18n文本,使用gettext属性标记调用,或任何其他标记,如UI标签如下:
从默认的资源包,即文本标记检索消息。 struts.properties

<s:text name="some.key" />

i18n 标签,按下任意的资源包到值栈。其他标记的范围内对国际化标签可以显示该资源包的消息:

<s:i18n name="some.package.bundle">
     <s:text name="some.key" />
</s:i18n>

大部分的UI标签的key属性,可以用来检索信息从一个资源包:

<s:textfield key="some.key" name="textfieldName"/>

本地化示例:

让我们从前面的章节中多国语言的目标是创建的index.jsp。相同的文件将被写为如下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
   pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Employee Form with Multilingual Support</title>
</head>

<body>
   <h1><s:text name="global.heading"/></h1>

   <s:url id="indexEN" namespace="/" action="locale" >
      <s:param name="request_locale" >en</s:param>
   </s:url>
   <s:url id="indexES" namespace="/" action="locale" >
      <s:param name="request_locale" >es</s:param>
   </s:url>
   <s:url id="indexFR" namespace="/" action="locale" >
      <s:param name="request_locale" >fr</s:param>
   </s:url>

   <s:a href="%{indexEN}" >English</s:a>
   <s:a href="%{indexES}" >Spanish</s:a>
   <s:a href="%{indexFR}" >France</s:a>

   <s:form action="empinfo" method="post" namespace="/">
      <s:textfield name="name" key="global.name" size="20" />
      <s:textfield name="age" key="global.age" size="20" />
      <s:submit name="submit" key="global.submit" />
   </s:form>

</body>
</html>

我们将创建success.jsp文件,该文件将被调用的情况下定义的动作,返回SUCCESS。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Success - www.gitbook.net</title>
</head>
<body>
   <s:property value="getText('global.success')" />
</body>
</html>

Here we would need to create following two actions. (a) First action a to take care of Locale and display same index.jsp file with different language (b) Another action is to take care of submitting form itself. Both the actions will return SUCCESS, but we will take different actions based on return values because our purpose is different for both the actions:

Action to take care of Locale:

package com.tutorialspoint.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class Locale extends ActionSupport{
   public String execute() 
   {
       return SUCCESS;
   }
}

Action to submit the form:

package com.tutorialspoint.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class Employee extends ActionSupport{
   private String name;
   private int age;
   
   public String execute() 
   {
       return SUCCESS;
   }
   
   public String getName() {
       return name;
   }
   public void setName(String name) {
       this.name = name;
   }
   public int getAge() {
       return age;
   }
   public void setAge(int age) {
       this.age = age;
   }
}

现在让我们创建以下三个global.properties文件,将在CLASSPATH:

global.properties:

global.name = Name
global.age = Age
global.submit = Submit
global.heading = Select Locale
global.success = Successfully authenticated

global_fr.properties:

global.name = Nom d'utilisateur 
global.age = l'âge
global.submit = Soumettre des
global.heading = Sé lectionnez Local
global.success = Authentifi	é  avec succès

global_es.properties:

global.name = Nombre de usuario
global.age = Edad
global.submit = Presentar
global.heading = seleccionar la configuracion regional
global.success = Autenticado correctamente

我们将创建struts.xml中有两个动作如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
   <constant name="struts.devMode" value="true" />
   <constant name="struts.custom.i18n.resources" value="global" />

   <package name="helloworld" extends="struts-default" namespace="/">
      <action name="empinfo" 
         class="com.tutorialspoint.struts2.Employee"
         method="execute">
         <result name="input">/index.jsp</result>
         <result name="success">/success.jsp</result>
      </action>
      
      <action name="locale" 
         class="com.tutorialspoint.struts2.Locale"
         method="execute">
         <result name="success">/index.jsp</result>
      </action>
   </package>

</struts>

以下是web.xml文件中的内容:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id="WebApp_ID" version="3.0">

   <display-name>Struts 2</display-name>
   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>

   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.FilterDispatcher
      </filter-class>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
</web-app>

现在,右键点击项目名称,并单击“导出”> WAR文件创建一个WAR文件。然后,这WAR部署在Tomcat的webapps目录下。

最后,启动Tomcat服务器,并尝试访问URL http://localhost:8080/HelloWorldStruts2/index.jsp。这会给你以下画面:

现在选择的任何语言,让我们说,我们选择西班牙语,它会显示下面的结果:

你可以尝试用法语。最后,让我们试着点击“提交”按钮时,我们是在西班牙语言环境,它会显示以下画面:

恭喜你,现在有一个多语种的网页,你可以在全球范围内启动网站。