Struts2 - Lokalisasi, internasionalisasi (i18n)
Internasionalisasi (i18n) adalah proses perencanaan dan penerapan produk dan layanan sehingga dapat dengan mudah disesuaikan dengan bahasa dan budaya lokal tertentu, proses yang disebut lokalisasi. Proses internasionalisasi disebut pemberdayaan terjemahan atau lokalisasi.
Internasionalisasi disingkat i18n karena kata tersebut dimulai dengan huruf “i” dan diakhiri dengan “n”, dan ada 18 karakter antara i pertama dan n terakhir.
Struts2 menyediakan lokalisasi, yaitu, internasionalisasi (i18n) dukungan melalui kumpulan sumber daya, interseptor dan pustaka tag di tempat-tempat berikut -
Tag UI
Pesan dan Kesalahan.
Di dalam kelas aksi.
Kumpulan Sumber Daya
Struts2 menggunakan bundel sumber daya untuk menyediakan beberapa pilihan bahasa dan lokal kepada pengguna aplikasi web. Anda tidak perlu khawatir tentang menulis halaman dalam berbagai bahasa. Yang harus Anda lakukan adalah membuat bundel sumber daya untuk setiap bahasa yang Anda inginkan. Paket sumber daya akan berisi judul, pesan, dan teks lain dalam bahasa pengguna Anda. Paket sumber daya adalah file yang berisi pasangan kunci / nilai untuk bahasa default aplikasi Anda.
Format penamaan paling sederhana untuk file sumber daya adalah -
bundlename_language_country.properties
Sini, bundlenamebisa berupa ActionClass, Interface, SuperClass, Model, Package, Properti sumber daya global. Bagian selanjutnyalanguage_country mewakili lokal negara misalnya, lokal Spanyol (Spanyol) diwakili oleh es_ES, dan lokal Inggris (Amerika Serikat) diwakili oleh en_US dll. di mana Anda dapat melewati bagian negara yang bersifat opsional.
Saat Anda mereferensikan elemen pesan dengan kuncinya, kerangka kerja Struts mencari bundel pesan yang sesuai dengan urutan berikut -
- ActionClass.properties
- Interface.properties
- SuperClass.properties
- model.properties
- package.properties
- struts.properties
- global.properties
Untuk mengembangkan aplikasi Anda dalam berbagai bahasa, Anda harus mempertahankan beberapa file properti yang sesuai dengan bahasa / lokal tersebut dan menentukan semua konten dalam istilah pasangan kunci / nilai.
Misalnya, jika Anda akan mengembangkan aplikasi untuk bahasa Inggris AS (Default), Spanyol, dan Prancis, Anda harus membuat tiga file properti. Di sini saya akan menggunakanglobal.properties file saja, Anda juga dapat menggunakan file properti yang berbeda untuk memisahkan jenis pesan yang berbeda.
global.properties - Secara default, bahasa Inggris (Amerika Serikat) akan diterapkan
global_fr.properties - Ini akan digunakan untuk lokasi Franch.
global_es.properties - Ini akan digunakan untuk bahasa Spanyol.
Akses pesannya
Ada beberapa cara untuk mengakses sumber daya pesan, termasuk getText, tag teks, atribut kunci dari tag UI, dan tag i18n. Mari kita lihat secara singkat -
Menampilkan i18n teks, gunakan panggilan ke getText di tag properti, atau tag lainnya, seperti tag UI sebagai berikut -
<s:property value = "getText('some.key')" />
Itu text tag mengambil pesan dari paket sumber daya default, yaitu struts.properties
<s:text name = "some.key" />
Itu i18n tagmendorong paket sumber daya arbitrer ke tumpukan nilai. Tag lain dalam cakupan tag i18n dapat menampilkan pesan dari paket sumber daya itu−
<s:i18n name = "some.package.bundle">
<s:text name = "some.key" />
</s:i18n>
Itu key atribut sebagian besar tag UI dapat digunakan untuk membuat pesan dari paket sumber daya -
<s:textfield key = "some.key" name = "textfieldName"/>
Contoh Pelokalan
Mari kita targetkan untuk berkreasi index.jspdari bab sebelumnya dalam berbagai bahasa. File yang sama akan ditulis sebagai berikut -
<%@ 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>
Kami akan membuat success.jsp file yang akan dipanggil jika tindakan yang ditentukan kembali 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>
Di sini kita perlu membuat dua tindakan berikut. (a) Tindakan pertama a untuk mengurus Lokal dan menampilkan file index.jsp yang sama dengan bahasa yang berbeda (b) Tindakan lain adalah menangani pengiriman formulir itu sendiri. Kedua tindakan tersebut akan mengembalikan SUKSES, tetapi kami akan mengambil tindakan berbeda berdasarkan nilai pengembalian karena tujuan kami berbeda untuk kedua tindakan tersebut.
Tindakan untuk menjaga Lokal
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class Locale extends ActionSupport {
public String execute() {
return SUCCESS;
}
}
Tindakan Untuk Mengirimkan Formulir
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;
}
}
Sekarang mari kita buat tiga hal berikut global.properties file dan memasukkannya 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
Kami akan membuat struts.xml dengan dua tindakan sebagai berikut -
<?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>
Berikut ini adalah konten dari 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>
Sekarang, klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Ini akan menghasilkan layar berikut -
Sekarang pilih salah satu bahasa, katakanlah kita pilih Spanish, itu akan menampilkan hasil sebagai berikut -
Anda juga dapat mencoba dengan bahasa Prancis. Terakhir, mari kita coba klikSubmit tombol ketika kita berada di Bahasa Spanyol, itu akan menampilkan layar berikut -
Selamat, sekarang Anda memiliki halaman web multibahasa, Anda dapat meluncurkan situs web Anda secara global.