Struts2-현지화, 국제화 (i18n)

국제화 (i18n)는 제품과 서비스를 특정 현지 언어와 문화에 쉽게 적용 할 수 있도록 계획하고 구현하는 프로세스로,이를 로컬라이제이션이라고합니다. 국제화 프로세스를 번역 또는 현지화 지원이라고합니다.

국제화는 축약됩니다. i18n 단어가 문자로 시작하기 때문에 “i” 그리고 끝 “n”, 첫 번째 i와 마지막 n 사이에는 18 개의 문자가 있습니다.

Struts2는 다음 위치에서 리소스 번들, 인터셉터 및 태그 라이브러리를 통해 지역화, 즉 국제화 (i18n) 지원을 제공합니다.

  • UI 태그

  • 메시지 및 오류.

  • 액션 클래스 내.

리소스 번들

Struts2는 자원 번들을 사용하여 웹 애플리케이션 사용자에게 여러 언어 및 로케일 옵션을 제공합니다. 다른 언어로 페이지를 작성하는 것에 대해 걱정할 필요가 없습니다. 원하는 각 언어에 대한 리소스 번들을 생성하기 만하면됩니다. 리소스 번들에는 사용자 언어로 된 제목, 메시지 및 기타 텍스트가 포함됩니다. 리소스 번들은 애플리케이션의 기본 언어에 대한 키 / 값 쌍이 포함 된 파일입니다.

리소스 파일의 가장 간단한 이름 지정 형식은 다음과 같습니다.

bundlename_language_country.properties

여기, bundlenameActionClass, Interface, SuperClass, Model, Package, Global 리소스 속성이 될 수 있습니다. 다음 부분language_country 국가 로케일을 나타냅니다. 예를 들어 스페인어 (스페인) 로케일은 es_ES로 표시되고 영어 (미국) 로케일은 en_US 등으로 표시됩니다. 여기서 선택적인 국가 부분을 건너 뛸 수 있습니다.

키로 메시지 요소를 참조 할 때 Struts 프레임 워크는 다음 순서로 해당 메시지 번들을 검색합니다.

  • ActionClass.properties
  • Interface.properties
  • SuperClass.properties
  • model.properties
  • package.properties
  • struts.properties
  • global.properties

애플리케이션을 여러 언어로 개발하려면 해당 언어 / 로케일에 해당하는 여러 속성 파일을 유지하고 키 / 값 쌍의 관점에서 모든 콘텐츠를 정의해야합니다.

예를 들어, 미국 영어 (기본값), 스페인어 및 프랑스어 용 응용 프로그램을 개발하려는 경우 세 개의 속성 파일을 만들어야합니다. 여기서는global.properties 파일에 한해 다른 속성 파일을 사용하여 다른 유형의 메시지를 분리 할 수도 있습니다.

  • global.properties − 기본적으로 영어 (미국)가 적용됩니다.

  • global_fr.properties − 이것은 Franch 로케일에 사용됩니다.

  • global_es.properties − 이것은 스페인어 로케일에 사용됩니다.

메시지에 액세스

getText, 텍스트 태그, UI 태그의 키 속성 및 i18n 태그를 포함하여 메시지 자원에 액세스하는 여러 방법이 있습니다. 간단히 살펴 보겠습니다.

표시하려면 i18n 문자, 전화 사용 getText 속성 태그 또는 다음과 같은 UI 태그와 같은 다른 태그에서-

<s:property value = "getText('some.key')" />

그만큼 text tag 기본 자원 번들 (예 : struts.properties)에서 메시지를 검색합니다.

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

그만큼 i18n tag임의의 리소스 번들을 값 스택에 푸시합니다. i18n 태그 범위 내의 다른 태그는 해당 리소스 번들의 메시지를 표시 할 수 있습니다.

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

그만큼 key 대부분의 UI 태그의 속성은 리소스 번들에서 메시지를 생성하는 데 사용할 수 있습니다-

<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</title>
   </head>
   
   <body>
      <s:property value = "getText('global.success')" />
   </body>
</html>

여기에서 다음 두 가지 작업을 만들어야합니다. (a) 첫 번째 조치 a는 로케일을 처리하고 동일한 index.jsp 파일을 다른 언어로 표시합니다. (b) 또 다른 조치는 양식 제출 자체를 처리하는 것입니다. 두 작업 모두 SUCCESS를 반환하지만 두 작업에 대한 목적이 다르기 때문에 반환 값에 따라 다른 작업을 수행합니다.

로케일을 돌보는 조치

package com.tutorialspoint.struts2;

import com.opensymphony.xwork2.ActionSupport;

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

양식 제출 조치

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>

이제 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 Export > WAR FileWar 파일을 만듭니다. 그런 다음 Tomcat의 webapps 디렉토리에이 WAR을 배포합니다. 마지막으로 Tomcat 서버를 시작하고 URL에 액세스하십시오.http://localhost:8080/HelloWorldStruts2/index.jsp. 다음 화면이 생성됩니다.

이제 언어 중 하나를 선택하고 Spanish, 다음 결과를 표시합니다-

프랑스어로도 시도 할 수 있습니다. 마지막으로Submit 스페인어 로케일에서 버튼을 누르면 다음 화면이 표시됩니다.

축하합니다. 이제 다국어 웹 페이지가 생겼습니다. 웹 사이트를 전 세계적으로 시작할 수 있습니다.