當前位置:首頁 » 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。這會給你以下畫麵:

現在選擇的任何語言,讓我們說,我們選擇西班牙語,它會顯示下麵的結果:

你可以嘗試用法語。最後,讓我們試著點擊“提交”按鈕時,我們是在西班牙語言環境,它會顯示以下畫麵:

恭喜你,現在有一個多語種的網頁,你可以在全球範圍內啟動網站。