문자열 다국어화

문자열을 다국어화하려면 I18n 개체의 get 메서드를 사용하십시오. get 메서드의 유일한 필수 매개 변수는 국제화할 문자열입니다. 문자열은 Translator 사전의 문자열과 일치합니다. get 메서드는 사전에서 문자열을 검색하고 현재 언어에 대한 번역을 반환합니다.

get 메서드의 첫 번째 인수는 다음 규칙을 준수해야 합니다.

  • 값은 문자열 리터럴이어야 합니다. String 형식의 변수를 사용할 수 없습니다.
  • 문자열 리터럴은 한 줄에 표현해야 합니다.
  • 문자열은 대/소문자를 구분합니다.
i18n.get("Enter a search keyword");

번역 힌트 사용

국제화된 문자열의 번역 힌트를 지정하여 사전의 중복 문자열을 구별합니다. get 메서드의 두 번째 선택적 매개 변수를 사용하여 번역 힌트를 제공하십시오. 번역 힌트는 사전에 있는 항목의 주석 속성과 정확히 일치해야 합니다.

예를 들어, 사전에는 Request 문자열이 동사로 한 번, 명사로 한 번 두 번 포함되어 있습니다. 다음 코드에는 get 메서드의 인수로 번역 힌트가 포함되어 있습니다.

i18n.get("Request","A noun, as in a request for a web page");

현지화된 문장에 변수 포함

문장에 컨텍스트 의미를 만들려면 지역화된 문자열에 변수를 포함하십시오. 예를 들어 웹 애플리케이션에 로그인하면 홈 페이지에 "다시 관리자를 시작합니다"라는 메시지가 표시됩니다. 받은 편지함에 메시지가 두 개 있습니다." 페이지 컨텍스트에 따라 사용자 이름과 메시지 수가 결정됩니다.

사전에서 변수는 문자열로서 대괄호로 묶인 인덱스로 표시됩니다. 변수의 값을 get 메서드의 인수로 지정하십시오. 인수는 번역 힌트 다음에 배치되며 인덱스는 인수의 순서에 해당합니다.

i18n.get("Welcome back {0}. You have {1} messages.", "user name, number of messages", user.getDisplayName(), numItems);

국제화된 문자열 및 번역 힌트는 사전의 문자열 및 주석과 정확히 일치해야 합니다. 두 번째 인수로 null 값을 제공하여 지역화 힌트를 생략할 수 있습니다.

정적 Get 메서드 사용

I18N 클래스는 몇 개의 문자열을 현지화해야 하는 경우 유용한 정적 get 메서드를 정의합니다. 정적 메서드에는 개체의 get 메서드에 대한 매개 변수 외에 사용자의 기본 언어를 결정하는 방법에 따라 사용 중인 SlingHttpRequest 개체 또는 ResourceBundle이(가) 필요합니다.

  • 사용자의 언어 기본 설정 사용: SlingHttpRequest 를 첫 번째 매개 변수로 제공합니다.

    I18n.get(slingHttpRequest, "Welcome back {}. You have {} messages.", "user name, number of messages", user.getDisplayName(), numItems);

  • 페이지 언어 사용: ResourceBundle을 첫 번째 매개 변수로 제공합니다.

    I18n.get(resourceBundle,"Welcome back {}. You have {} messages.", "user name, number of messages", user.getDisplayName(), numItems);

JavaScript 코드의 문자열 다국어화

JavaScript API를 사용하면 클라이언트의 문자열을 현지화할 수 있습니다. Java™ 및 JSP 코드와 마찬가지로 JavaScript API를 사용하면 지역화할 문자열을 식별하고 지역화 힌트를 제공하며 지역화된 문자열에 변수를 포함할 수 있습니다.

granite.utils 클라이언트 라이브러리 폴더에서 JavaScript API를 제공합니다. API를 사용하려면 페이지에 이 클라이언트 라이브러리 폴더를 포함하십시오. 지역화 함수에서 Granite.I18n 네임스페이스를 사용합니다.

지역화된 문자열을 제공하기 전에 Granite.I18n.setLocale 함수를 사용하여 로케일을 설정하십시오. 함수에는 인수로 로케일의 언어 코드가 필요합니다.

Granite.I18n.setLocale("fr");

지역화된 문자열을 표시하려면 Granite.I18n.get 함수를 사용하십시오.

Granite.I18n.get("string to localize");

다음 예제에서는 문자열 "Welcome back"을 국제화합니다.

Granite.I18n.setLocale("fr");
Granite.I18n.get("string to localize", [variables], "localization hint");

함수 매개 변수는 Java™ I18n.get 메서드와 다릅니다.

  • 첫 번째 매개 변수는 현지화할 문자열 리터럴입니다.
  • 두 번째 매개 변수는 문자열 리터럴에 삽입할 값의 배열입니다.
  • 세 번째 매개 변수는 현지화 힌트입니다.

다음 예제에서는 JavaScript을 사용하여 "Welcome back Administrator"를 현지화합니다. 받은 편지함에 메시지가 두 개 있습니다." 문장:

Granite.I18n.setLocale("fr");
Granite.I18n.get("Welcome back {0}. You have {1} new messages in your inbox.", [username, numMsg], "user name, number of messages");

JCR 노드에서 문자열 다국어화

UI 문자열은 종종 JCR 노드 속성을 기반으로 합니다. 예를 들어 페이지의 jcr:title 속성은 일반적으로 페이지 코드에서 h1 요소의 콘텐츠로 사용됩니다. I18n 클래스는 이러한 문자열을 현지화하는 getVar 메서드를 제공합니다.

다음 예제 JSP 스크립트는 저장소에서 jcr:title 속성을 검색하고 페이지에 지역화된 문자열을 표시합니다.

<% title = properties.get("jcr:title", String.class);%>
<h1><%=i18n.getVar(title) %></h1>

JCR 노드에 대한 번역 힌트 지정

Java™ API의 번역 힌트와(과) 유사하게, 번역에 중복 문자열을 구별하는 번역 힌트를 제공할 수 있습니다. 번역 힌트를 국제화된 속성을 포함하는 노드의 속성으로 제공합니다. 힌트 속성의 이름은 _commentI18n 접미사를 사용하는 국제화된 속성 이름의 이름으로 구성됩니다.

${prop}_commentI18n

예를 들어 cq:page 노드에는 현지화되는 jcr:title 속성이 있습니다. 힌트는 jcr:title_commentI18n이라는 속성의 값으로 제공됩니다.

다국어화 범위 테스트

UI에서 모든 문자열을 국제화했는지 테스트합니다. 다루고 있는 문자열을 보려면 사용자 언어를 zz_ZZ로 설정하고 웹 브라우저에서 UI를 엽니다. 국제화된 문자열은 다음 형식의 스텁 번역과 함께 표시됩니다.

USR_*Default-String*_尠

다음 이미지는 AEM 홈 페이지에 대한 스텁 번역을 보여 줍니다.

AEM 홈 페이지에 대한 스텁 번역

사용자의 언어를 설정하려면 사용자 계정에 대한 환경 설정 노드의 언어 속성을 구성합니다.

사용자의 환경 설정 노드에는 다음과 같은 경로가 있습니다.

/home/users/<letter>/<hash>/preferences

Experience Manager