지역화를 준비하는 방법(HTML)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

앱의 지역화를 준비하려면 여기에 설명된 단계와 모범 사례를 따르세요. 시작하기 전에 세계화에 대한 검사 목록을 읽고 앱이 다른 시장, 지역 또는 언어용으로 준비가 되어 있는지 확인합니다.

지침

리소스 파일 및 한정자 사용

리소스 파일에서 문자열 리소스를 지정해야 합니다. 자세한 내용은 빠른 시작: UI 리소스 번역을 참조하세요.

파일 또는 폴더에서 적절한 언어 태그를 사용하여 이미지 또는 다른 파일 리소스를 지정합니다. 이미지, 오디오 및 비디오를 지역화하려면 많은 양의 시스템 리소스가 필요하므로 가능하면 중립 미디어 자산을 사용하는 것이 좋습니다. 자세한 내용은 한정자를 사용하여 리소스 이름을 지정하는 방법을 참조하세요.

문맥에 맞는 설명 추가

앱의 리소스 파일에 지역화 설명을 추가합니다. 설명은 로컬라이저에게 표시되며, 로컬라이저가 리소스를 정확하게 번역하는 데 도움이 되는 문맥에 맞는 정보를 제공해야 합니다. 또한 설명은 번역으로 인해 소프트웨어가 중단되지 않도록 리소스에 대한 충분한 제약 조건 정보를 제공해야 합니다. 선택적으로 Makepri.exe 도구로 설명을 기록할 수 있습니다.

ResJSON은 밑줄로 시작하는 필드에서 메타데이터(예: 설명)를 허용합니다.

{
    "String"  : "Hello World",
    "_String1.comment" : "This is a comment to the localizer"
}

단어 대신 문장 지역화

다음 문자열을 예로 들어봅니다. "The {0} could not be synchronized."

{0} 자리에 약속, 작업, 문서 등 다양한 단어가 올 수 있습니다. 이 예가 영어에는 적절한 것으로 보이지만 독일어의 해당 문장에 대해서는 모든 경우에 적합하지 않습니다. 다음 독일어 문자에서 템플릿 문자열의 일부 단어("Der", "Die", "Das")가 매개 변수가 있는 단어와 일치해야 합니다.

영어 독일어
약속을 동기화할 수 없습니다. Der Termin konnte nicht synchronisiert werden.
작업을 동기화할 수 없습니다. Die Aufgabe konnte nicht synchronisiert werden.
문서를 동기화할 수 없습니다. Das Dokument konnte nicht synchronisiert werden.

 

또 다른 예로 "Remind me in {0} minute(s)" 문장을 고려합니다. 영어에서는 단어 "minute(s)"가 사용되지만 다른 언어에서는 다른 단어를 사용할 수 있습니다. 예를 들어 폴란드어에서는 문맥에 따라 "minuta", "minuty" 또는 "minut"를 사용합니다.

이 문제를 해결하려면 단어 하나가 아닌 문장 전체를 지역화합니다. 이렇게 하려면 추가 작업이 필요하여 유용한 솔루션이 아닌 것처럼 보일 수도 있지만, 다음과 같은 이유로 인해 가장 적합한 솔루션입니다.

  • 모든 언어에 대해 완전한 오류 메시지가 표시됩니다.
  • 로컬라이저가 대체할 문자열에 대해 질문할 필요가 없습니다.
  • 앱을 완성한 후에 이러한 문제가 발생할 경우 많은 비용을 들여서 코드 수정을 구현할 필요가 없습니다.

올바른 매개 변수 순서 확인

모든 언어에서 매개 변수가 동일한 순서로 사용된다고 생각하지 마세요. 예를 들어 "Every %s %s" 문자열을 고려합니다. 여기서 첫 번째 %s는 월 이름으로 대체되고, 두 번째 %s는 날짜로 대체됩니다. 이 예는 영어에서는 적합하지만 날짜와 월이 역순으로 표시되는 독일어로 앱을 지역화할 경우에는 적합하지 않습니다.

이 문제를 해결하려면 언어에 따라 순서를 교체할 수 있도록 문자열을 "Every %1 %2"로 변경합니다.

과도한 지역화 금지

태그가 아니라 특정 문자열을 지역화하세요. 다음 예를 참조하세요.

과도한 지역화 문자열 적절한 지역화 문자열
<link>서비스 계약</link> 서비스 계약
<link>개인 정보 취급 방침</link> 개인 정보 취급 방침

 

리소스에 위의 <link> 태그를 포함하면 이 역시 지역화되므로 태그가 잘못 렌더링됩니다. 문자열 자체만 지역화해야 합니다. 일반적으로 태그를 지역화 가능한 콘텐츠와 구분되어야 하는 코드라고 생각해야 합니다. 하지만 일부 긴 문자열은 컨텍스트와 순서를 유지하기 위해 태그를 포함해야 합니다.

다른 컨텍스트에서 동일한 문자열 사용 금지

문자열을 다시 사용하는 것이 가장 좋은 솔루션처럼 보일 수도 있지만, 동일한 단어 또는 구문이 다른 의미나 컨텍스트로 사용될 수 있는 경우 지역화 문제가 발생할 수 있습니다.

두 컨텍스트가 동일한 경우 문자열을 다시 사용할 수 있습니다. 예를 들어 소리 효과 볼륨과 음악 볼륨은 모두 소리의 세기를 나타내므로 두 경우 모두에 대해 "Volume" 문자열을 다시 사용할 수 있습니다. 하드 디스크 볼륨을 나타낼 때는 컨텍스트와 의미가 다르고 단어가 다르게 번역될 수 있으므로 동일한 문자열을 다시 사용해서는 안 됩니다.

또는 "on" 및 "off" 문자열 사용을 예로 들 수 있습니다. 영어에서는 비행기 모드, Bluetooth 및 장치를 전환하는 데 "on" 및 "off"를 사용할 수 있습니다. 하지만 이탈리아어에서는 켜거나 끌 항목의 컨텍스트에 따라 다르게 번역됩니다. 컨텍스트별로 문자열 쌍을 만들어야 합니다.

또는 "text" 또는 "fax"와 같은 문자열은 영어에서 동사와 명사 모두로 사용될 수 있으므로 번역 과정에서 혼동될 수 있습니다. 대신 동사 형식과 명사 형식 모두에 대해 별도의 문자열을 만듭니다. 컨텍스트가 동일한지 확실하지 않은 경우 만전을 기하여 고유한 문자열을 사용하는 것이 제일입니다.

고유한 특성으로 리소스 식별

리소스 식별자는 대/소문자를 구분하지 않으며 리소스 파일별로 고유해야 합니다. 리소스에 액세스할 때 리소스의 실제 값이 아닌 리소스 식별자를 사용합니다. 리소스 식별자는 변경되지 않지만, 리소스의 실제 값은 언어에 따라 변경됩니다.

의미 있는 리소스 식별자를 사용하여 번역을 위한 추가 컨텍스트를 제공해야 합니다.

문자열 리소스를 번역으로 보낸 이후에는 리소스 식별자를 변경하지 마세요. 지역화 팀은 리소스 식별자를 사용하여 리소스의 추가, 삭제, 업데이트를 추적합니다. 리소스 식별자를 변경하면—"리소스 식별자 전환"이라고도 함—문자열을 삭제하고 다른 문자열을 추가한 것처럼 보이므로 문자열을 다시 번역해야 합니다.

적절한 번역 방법 선택

문자열을 리소스 파일로 구분한 후에 번역할 수 있습니다. 일반적으로 프로젝트를 종료할 때 프로젝트의 문자열을 완료한 이후에 문자열을 번역하는 것이 좋습니다. 번역 프로세스에 접근하는 방식은 여러 가지가 있습니다. 이는 번역할 문자열의 볼륨, 번역할 언어 수 및 번역을 수행할 방식(사내 및 외부 공급업체 고용)에 따라 달라집니다.

다음 옵션을 고려하세요.

  • 리소스 파일을 프로젝트에서 직접 열어서 번역할 수 있습니다. 이 방법은 문자열의 볼륨이 작고 두 개 또는 세 개의 언어로 번역해야 하는 프로젝트에 적합합니다. 또한 개발자가 여러 언어를 사용하고 번역 프로세스를 처리하려고 하는 경우에 적합할 수 있습니다. 이 방법은 빠르고 도구가 필요 없으며 번역을 잘못할 위험이 최소화된다는 이점이 있지만 확장할 수 없습니다. 특히, 다른 언어의 리소스가 동기화되지 않아서 잘못된 사용자 환경과 유지 관리 문제가 발생할 수 있습니다.
  • 문자열 리소스 파일은 XML 또는 ResJSON 텍스트 형식이므로 텍스트 편집기를 사용하여 번역용으로 제공될 수 있습니다. 그런 다음 번역된 파일을 프로젝트로 복사합니다. 이 방법은 번역자가 XML 태그를 실수로 편집할 위험이 있지만, Microsoft Visual Studio 프로젝트 외부에서 번역 작업을 수행할 수 있습니다. 이 방법은 적은 수의 언어로 번역해야 하는 프로젝트에 적합합니다. XLIFF 형식은 지역화에 사용하도록 특별히 제작된 XML 형식이며 일부 지역화 공급업체 또는 지역화 도구에서 잘 지원됩니다. 다국어 앱 도구 키트를 사용하여 .resw 또는 .resjson 등, 다른 리소스 파일에서 XLIFF 파일을 생성할 수 있습니다.

이미지 또는 오디오 파일과 같은 다른 파일용으로 로컬라이저에게 제공해야 할 수 있습니다. 일반적으로 문화적으로 종속된 파일은 지역화하기 어려우므로 만들지 않는 것이 좋습니다.

또한 다음 제안을 고려하세요.

  • 지역화 도구를 사용합니다. 많은 지역화 도구를 사용하여 리소스 파일을 구문 분석하고 번역자가 번역 가능한 문자열만 편집하도록 허용할 수 있습니다. 이 접근 방식은 번역자가 실수로 XML 태그를 편집하는 위험을 줄여줍니다. 단, 로컬리제이션 프로세스에 새로운 도구나 프로세스를 도입해야 하는 단점이 있습니다. 지역화 도구는 문자열의 양이 많지만 언어 수가 적은 프로젝트에 적합합니다. 자세한 내용은 다국어 앱 도구 키트(영문)를 참조하세요.
  • 지역화 공급업체를 사용합니다. 프로젝트에 많은 양의 문자열이 포함되어 있고 프로젝트를 많은 언어로 번역해야 하는 경우에 지역화 공급업체를 사용해 보세요. 지역화 공급업체는 리소스 파일 번역은 물론, 도구 및 프로세스에 대해서도 알려줄 수 있습니다. 이 방법은 이상적인 솔루션이지만, 가장 많은 비용이 들고 번역된 콘텐츠에 대한 소요 시간이 늘어날 수 있습니다.
  • 로컬라이저에게 정보를 제공합니다. 로컬라이저에게 명사 또는 동사로 간주될 수 있는 문자열에 대해 알립니다. 용어 도구를 사용하여 로컬라이저에게 꾸며진 단어에 대해 설명합니다. 혼동을 방지하기 위해 문자열을 문법적으로 정확하고 모호하지 않으면서 최대한 기술적이지 않게 유지합니다.

액세스 키 및 레이블

두 문자열 리소스가 두 개의 개별 섹션으로 분류되므로 지역화 과정에서 접근성에 사용되는 액세스 키를 지역화된 액세스 키 표시와 "동기화"하는 데는 어려움이 있습니다. 아래에 표시된 구현을 따르고 레이블 문자열을 적절하게 설명하여 액세스 키 정의에 연결해야 합니다.

<label id="theLabel" data-win-res="{accessKey: 'theLabelAccessKey'}" for="xPrinterRedirection" accessKey="L">The <u>L</u>abel</label>
<input type="checkbox" value="OFF" id="xPrinterRedirection" name="xPrinterRedirection" />

다음과 같은 설명을 제공해야 합니다. Make sure that <u>L</u> is synchronized with the access key "theLabelAccessKey"

정렬 가능한 일본어 문자열에 대해 후리가나 지원

일본어 간지 문자는 단어 및 사용되는 컨텍스트에 따라 발음이 달라지는 고유한 속성이 있습니다. 따라서 일본어로 명명된 개체(예: 응용 프로그램 이름, 파일, 노래, 등)를 정렬할 때 문제가 발생합니다. 과거에는 일본어 간지가 컴퓨터 인식이 가능한 XJIS라는 순서로 주로 정렬되었습니다. 이 정렬 순서는 발음을 따르지 않으므로 사람에게는 적합하지 않습니다.

후리가나는 사용자 또는 생성자가 사용 중인 문자에 대한 발음을 지정하도록 허용하여 이 문제를 해결합니다. 아래 절차에 따라 앱 이름에 후리가나를 추가하면 후리가나가 앱 목록의 적절한 위치에 정렬됩니다. 앱 이름에 간지 문자가 포함되어 있고 사용자의 UI 언어 또는 정렬 순서가 일본어로 설정되어 있을 때 후리가나가 제공되지 않는 경우 Windows에서 적절한 발음을 생성합니다. 거의 사용되지 않거나 고유한 읽기를 포함하는 앱 이름을 일반적인 읽기 순서에 따라 정렬할 수 있습니다. 그러므로 일본어 응용 프로그램(특히 이름에 간지 문자를 포함하는 응용 프로그램)을 위한 모범 사례는 앱 이름의 후리가나 버전을 일본어 지역화 프로세스의 일부로 제공하는 것입니다.

  1. "ms-resource:Appname"을 패키지 표시 이름과 응용 프로그램 표시 이름으로 추가합니다.

  2. 문자열 폴더 아래에 ja-JP 폴더를 만들고 두 리소스 파일을 다음과 같이 추가합니다.

    strings\
        en-us\
        ja-jp\
            Resources.altform-msft-phonetic.resw
            Resources.resw
    
  3. 일반 ja-JP용 Resources.resw: Appname "希蒼"에 대한 문자열 리소스를 추가합니다.

  4. 일본어 후리가나 리소스용 Resources.altform-msft-phonetic.resw: AppName "のあ"에 대한 후리가나 값을 추가합니다.

사용자는 후리가나 값 "のあ"(noa) 및 발음 값(IME(입력기)에서 GetPhonetic 함수 사용) "まれあお"(mare-ao)를 모두 사용하여 앱 이름 "希蒼" 을 검색할 수 있습니다.

정렬은 국가별 옵션 제어판 형식을 따릅니다.

  • 일본어 사용자 로캘 아래에
    • 후리가나가 사용하도록 설정되어 있는 경우 "希蒼"이 "の" 아래에 정렬됩니다.
    • 후리가나가 없는 경우 "希蒼"이 "ま" 아래에 정렬됩니다.
  • 일본어 이외 사용자 로캘 아래에
    • 후리가나가 사용하도록 설정되어 있는 경우 "希蒼"이 "の" 아래에 정렬됩니다.
    • 후리가나가 없는 경우 "希蒼"이 "漢字" 아래에 정렬됩니다.