UI 문자열 다국어화 internationalizing-ui-strings

Java™ 및 JavaScript API를 사용하면 다음 유형의 리소스에서 문자열을 국제화할 수 있습니다.

  • Java™ 소스 파일.
  • JSP 스크립트.
  • 클라이언트측 라이브러리 또는 페이지 소스의 JavaScript.
  • 대화 상자 및 구성 요소 구성 속성에 사용되는 JCR 노드 속성 값입니다.

다국어화 및 현지화 프로세스에 대한 개요는 구성 요소 다국어화.

Java™ 및 JSP 코드의 문자열 다국어화 internationalizing-strings-in-java-and-jsp-code

다음 com.day.cq.i18n Java™ 패키지를 사용하면 UI에 지역화된 문자열을 표시할 수 있습니다. 다음 I18n 클래스에서 제공하는 get Adobe Experience Manager(AEM) 사전에서 지역화된 문자열을 검색하는 메서드입니다. 의 유일한 필수 매개 변수 get 메서드는 영어의 문자열 리터럴입니다. UI의 기본 언어는 영어입니다. 다음 예제에서는 Search:

i18n.get("Search");

영어에서 문자열 식별은 ID가 문자열을 식별하고 런타임 시 문자열을 참조하는 데 사용되는 일반적인 국제화 프레임워크와 다릅니다. 영어 문자열 리터럴을 사용하면 다음과 같은 이점이 있습니다.

  • 코드는 쉽게 이해할 수 있습니다.
  • 기본 언어의 문자열은 항상 사용할 수 있습니다.

사용자 언어 확인 determining-the-user-s-language

사용자가 선호하는 언어를 결정하는 방법에는 두 가지가 있습니다.

  • 인증된 사용자의 경우 사용자 계정의 환경 설정에서 언어를 결정합니다.
  • 요청한 페이지의 로케일.

사용자 계정의 언어 속성이 더 신뢰할 수 있으므로 선호되는 방법입니다. 그러나 이 방법을 사용하려면 사용자가 로그인해야 합니다.

I18n Java™ 개체 만들기 creating-the-i-n-java-object

I18n 클래스는 두 개의 생성자를 제공합니다. 사용자의 기본 언어를 결정하는 방법에 따라 사용할 생성자가 결정됩니다.

사용자 계정에 지정된 언어로 문자열을 표시하려면 가져온 후 다음 생성자를 사용하십시오 com.day.cq.i18n.I18n):

I18n i18n = new I18n(slingRequest);

생성자는 SlingHTTPRequest 를 클릭하여 사용자의 언어 설정을 검색합니다.

페이지 로케일을 사용하여 언어를 결정하려면 먼저 요청된 페이지의 언어에 대한 ResourceBundle 을 가져옵니다.

Locale pageLang = currentPage.getLanguage(false);
ResourceBundle resourceBundle = slingRequest.getResourceBundle(pageLang);
I18n i18n = new I18n(resourceBundle);

문자열 다국어화 internationalizing-a-string

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

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

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

번역 힌트 사용 using-translation-hints

다음을 지정합니다. 번역 힌트 디렉터리의 중복 문자열을 구분하는 다국어화된 문자열. 의 두 번째 선택적 매개 변수 사용 get 번역 힌트를 제공하는 방법입니다. 번역 힌트는 사전에 있는 항목의 주석 속성과 정확히 일치해야 합니다.

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

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

현지화된 문장에 변수 포함 including-variables-in-localized-sentences

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

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

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

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

정적 Get 메서드 사용 using-the-static-get-method

다음 I18N 클래스는 static을 정의합니다. 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 코드의 문자열 다국어화 internationalizing-strings-in-javascript-code

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 노드에서 문자열 다국어화 internationalizing-strings-from-jcr-nodes

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

다음 예제 JSP 스크립트는 jcr:title 를 눌러 페이지의 현지화된 문자열을 표시합니다.

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

JCR 노드에 대한 번역 힌트 지정 specifying-translation-hints-for-jcr-nodes

과 유사 java™ API의 번역 힌트를 통해 번역에 중복 문자열을 구별할 수 있는 번역 힌트를 제공할 수 있습니다. 번역 힌트를 국제화된 속성을 포함하는 노드의 속성으로 제공합니다. 힌트 속성의 이름은 가 있는 국제화된 속성 이름의 _commentI18n 접미어:

${prop}_commentI18n

예: cq:page 노드에는 현지화 중인 jcr:title 속성이 포함됩니다. 힌트는 jcr:title_commentI18n이라는 속성의 값으로 제공됩니다.

다국어화 범위 테스트 testing-internationalization-coverage

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

USR_*Default-String*_尠

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

chlimage_1

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

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

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

chlimage_1-1

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2