Struts2 - Localizzazione, internazionalizzazione (i18n)
L'internazionalizzazione (i18n) è il processo di pianificazione e implementazione di prodotti e servizi in modo che possano essere facilmente adattati a lingue e culture locali specifiche, un processo chiamato localizzazione. Il processo di internazionalizzazione è chiamato abilitazione alla traduzione o alla localizzazione.
L'internazionalizzazione è abbreviata i18n perché la parola inizia con la lettera “i” e termina con “n”e ci sono 18 caratteri tra il primo i e l'ultimo n.
Struts2 fornisce supporto per la localizzazione, ovvero l'internazionalizzazione (i18n) tramite bundle di risorse, intercettatori e librerie di tag nei seguenti luoghi:
I tag dell'interfaccia utente
Messaggi ed errori.
All'interno delle classi di azione.
Pacchetti di risorse
Struts2 utilizza bundle di risorse per fornire più opzioni di lingua e locale agli utenti dell'applicazione web. Non devi preoccuparti di scrivere pagine in lingue diverse. Tutto quello che devi fare è creare un pacchetto di risorse per ogni lingua che desideri. I bundle di risorse conterranno titoli, messaggi e altro testo nella lingua dell'utente. I pacchetti di risorse sono il file che contiene le coppie chiave / valore per la lingua predefinita dell'applicazione.
Il formato di denominazione più semplice per un file di risorse è:
bundlename_language_country.properties
Qui, bundlenamepotrebbe essere ActionClass, Interface, SuperClass, Model, Package, Global resource properties. Parte successivalanguage_country rappresenta la locale locale, ad esempio, la lingua spagnola (Spagna) è rappresentata da es_ES e la locale inglese (Stati Uniti) è rappresentata da en_US ecc. dove è possibile saltare la parte del paese che è facoltativa.
Quando si fa riferimento a un elemento del messaggio tramite la sua chiave, il framework Struts cerca un pacchetto di messaggi corrispondente nel seguente ordine:
- ActionClass.properties
- Interface.properties
- SuperClass.properties
- model.properties
- package.properties
- struts.properties
- global.properties
Per sviluppare l'applicazione in più lingue, è necessario mantenere più file di proprietà corrispondenti a tali lingue / impostazioni locali e definire tutto il contenuto in termini di coppie chiave / valore.
Ad esempio, se hai intenzione di sviluppare la tua applicazione per l'inglese americano (predefinito), lo spagnolo e il francese, dovrai creare tre file delle proprietà. Qui useròglobal.properties solo file, puoi anche utilizzare diversi file di proprietà per separare diversi tipi di messaggi.
global.properties - Per impostazione predefinita, verrà applicato l'inglese (Stati Uniti)
global_fr.properties - Questo verrà utilizzato per la lingua francese.
global_es.properties - Questo verrà utilizzato per la lingua spagnola.
Accedi ai messaggi
Esistono diversi modi per accedere alle risorse del messaggio, inclusi getText, il tag di testo, l'attributo chiave dei tag dell'interfaccia utente e il tag i18n. Vediamoli in breve:
Per visualizzare i18n testo, usa una chiamata a getText nel tag della proprietà o in qualsiasi altro tag, come i tag dell'interfaccia utente come segue:
<s:property value = "getText('some.key')" />
Il text tag recupera un messaggio dal bundle di risorse predefinito, ovvero struts.properties
<s:text name = "some.key" />
Il i18n taginserisce un bundle di risorse arbitrario nello stack di valori. Altri tag nell'ambito del tag i18n possono visualizzare i messaggi da quel resource bundle
<s:i18n name = "some.package.bundle">
<s:text name = "some.key" />
</s:i18n>
Il key l'attributo della maggior parte dei tag dell'interfaccia utente può essere utilizzato per generare un messaggio da un pacchetto di risorse -
<s:textfield key = "some.key" name = "textfieldName"/>
Esempio di localizzazione
Miriamo a creare index.jspdal capitolo precedente in più lingue. Lo stesso file verrebbe scritto come segue:
<%@ 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>
Creeremo success.jsp file che verrà richiamato nel caso in cui l'azione definita ritorni 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</title>
</head>
<body>
<s:property value = "getText('global.success')" />
</body>
</html>
Qui avremmo bisogno di creare le seguenti due azioni. (a) Prima azione a per occuparsi delle impostazioni locali e visualizzare lo stesso file index.jsp con una lingua diversa (b) Un'altra azione è occuparsi dell'invio del modulo stesso. Entrambe le azioni restituiranno SUCCESSO, ma intraprenderemo azioni diverse in base ai valori di ritorno perché il nostro scopo è diverso per entrambe le azioni
Azione per prendersi cura di Locale
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class Locale extends ActionSupport {
public String execute() {
return SUCCESS;
}
}
Azione per inviare il modulo
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;
}
}
Ora creiamo i seguenti tre global.properties file e inserire il file in 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
Creeremo il nostro struts.xml con due azioni come segue:
<?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>
Di seguito è riportato il contenuto di web.xml file -
<?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>
Ora, fai clic con il pulsante destro del mouse sul nome del progetto e fai clic Export > WAR Fileper creare un file War. Quindi distribuire questo WAR nella directory webapps di Tomcat. Infine, avvia il server Tomcat e prova ad accedere all'URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Questo produrrà la seguente schermata:
Ora seleziona una delle lingue, diciamo che selezioniamo Spanish, visualizzerebbe il seguente risultato:
Puoi provare anche con la lingua francese. Infine, proviamo a fare clicSubmit quando siamo in lingua spagnola, verrà visualizzata la seguente schermata:
Congratulazioni, ora che hai una pagina web multilingue, puoi lanciare il tuo sito web a livello globale.