WPF의 전역화

이 항목에서는 글로벌 시장용 WPF(Windows Presentation Foundation) 애플리케이션을 작성할 때 알아야 하는 문제를 소개합니다. 전역화 프로그래밍 요소는 .NET의 System.Globalization 네임스페이스에 정의되어 있습니다.

XAML 전역화

XAML(Extensible Application Markup Language)은 XML을 기반으로 하며 XML 사양에 정의된 전역화 지원을 활용합니다. 다음 섹션에서는 알아 두어야 하는 몇 가지 XAML 기능에 대해 설명합니다.

문자 참조

문자 참조는 그것이 나타내는 특정 유니코드 문자의 UTF16 코드 단위를 10진수 또는 16진수로 제공합니다. 다음 예제에서는 COPTIC CAPITAL LETTER HORI 또는 'Ϩ'에 대한 10진수 문자 참조를 보여줍니다.

Ϩ

다음 예에서는 16진수 문자 참조를 보여줍니다. 16진수 앞에는 x가 있습니다.

Ϩ

Encoding

XAML에서 지원하는 인코딩은 ASCII, 유니코드 UTF-16 및 UTF-8입니다. 인코딩 문은 XAML 문서의 시작 부분에 있습니다. 인코딩 특성이 없으며 바이트 순서가 없으면 기본적으로 구문 분석기가 UTF-8로 설정됩니다. UTF-8과 UTF-16이 기본 인코딩입니다. UTF-7은 지원되지 않습니다. 다음 예제에서는 XAML 파일에서 UTF-8 인코딩을 지정하는 방법을 보여줍니다.

?xml encoding="UTF-8"?

언어 특성

XAML은 xml:lang을 사용하여 요소의 언어 특성을 나타냅니다. CultureInfo 클래스를 활용하려면 언어 속성 값이 CultureInfo에 의해 미리 정의된 문화권 이름 중 하나여야 합니다. xml:lang은 요소 트리에서 상속 가능하며(반드시 종속성 속성 상속성때문이 아니라 XML 규칙에 따름), 명시적으로 할당되지 않은 경우 기본값은 비어 있습니다.

언어 특성은 지역 언어를 지정하는 데 매우 유용합니다. 예를 들어, 프랑스, 퀘벡, 벨기에 및 스위스의 프랑스어에는 다른 철자, 어휘 및 발음이 있습니다. 또한 중국어, 일본어 및 한국어는 유니코드의 코드 포인트를 공유하지만 표의 문자 모양이 서로 다르고 완전히 다른 글꼴을 사용합니다.

다음 XAML(Extensible Application Markup Language) 예에서는 fr-CA 언어 특성을 사용하여 캐나다 프랑스어를 지정합니다.

<TextBlock xml:lang="fr-CA">Découvrir la France</TextBlock>

Unicode

XAML은 서로게이트를 포함한 모든 유니코드 기능을 지원합니다. 문자 집합을 유니코드에 매핑할 수 있는 한 지원됩니다. 예를 들어, GB18030에서는 중국어, 일본어 및 한국어(CFK) 확장 A와 B에 매핑되는 일부 문자와 서로게이트 쌍을 소개하므로 완전히 지원됩니다. WPF 애플리케이션은 서로게이트 쌍이 있는지 또는 결합 문자가 있는지를 이해하지 않고 문자열을 조작하는 데 사용할 StringInfo 수 있습니다.

XAML로 국가별 사용자 인터페이스 설계

이 섹션에서는 애플리케이션을 작성할 때 고려해야 하는 UI(사용자 인터페이스) 기능을 설명합니다.

국가별 텍스트

WPF에는 모든 Microsoft .NET Framework 지원 쓰기 시스템에 대한 기본 제공 처리가 포함되어 있습니다.

현재 지원되는 스크립트는 다음과 같습니다.

  • 아랍어

  • 벵골어

  • 데바나가리어

  • 키릴 자모

  • 그리스어

  • 구자라트어

  • 굴묵키어

  • 히브리어

  • 표의 문자 스크립트

  • 칸나다어

  • 라오어

  • 라틴어

  • 말라얄람어

  • 몽골어

  • 오리야어

  • 시리아어

  • 타밀어

  • 텔루구어

  • 타나 문자

  • 태국어*

  • 티베트어

* 이 릴리스에서는 태국어 텍스트의 표시 및 편집이 지원되며, 단어 구분은 지원되지 않습니다.

현재 지원되지 않는 스크립트는 다음과 같습니다.

  • 크메르어

  • 한국어 옛 한글

  • 미얀마

  • 스리랑카어

모든 쓰기 시스템 엔진은 OpenType 글꼴을 지원합니다. OpenType 글꼴에는 글꼴 작성자가 더 우수한 국가별 및 고급 활자체 글꼴을 설계할 수 있는 OpenType 레이아웃 테이블을 포함할 수 있습니다. OpenType 글꼴 레이아웃 테이블에는 문자 모양 대체, 문자 모양 위치 지정, 양쪽 맞춤 및 기준선 위치 지정에 대한 정보가 포함되어 있으므로, 텍스트 처리 애플리케이션이 텍스트 레이아웃을 향상시킬 수 있습니다.

OpenType 글꼴을 사용하면 유니코드 인코딩을 사용하여 큰 문자 모양 집합을 처리할 수 있습니다. 이러한 인코딩을 사용하면 글꼴 문자 모양 변형 외에도 광범위한 국가별 지원이 가능합니다.

WPF 텍스트 렌더링은 해상도 독립성을 지원하는 Microsoft ClearType 하위 픽셀 기술을 통해 구현됩니다. 이 기능을 통해 가독성이 크게 향상되며, 모든 스크립트에 대해 고품질 잡지 스타일 문서를 지원하는 기능을 제공합니다.

국가별 레이아웃

WPF는 가로, 양방향 및 세로 레이아웃을 지원하는 매우 편리한 방법을 제공합니다. 프레젠테이션 프레임워크에서는 FlowDirection 속성을 사용하여 레이아웃을 정의할 수 있습니다. 흐름 방향 패턴은 다음과 같습니다.

  • LeftToRight - 라틴어, 동아시아어 등을 위한 가로 레이아웃.

  • RightToLeft - 아랍어, 히브리어 등을 위한 양방향.

지역화 가능 애플리케이션 개발

글로벌 사용을 위해 애플리케이션을 작성할 때 애플리케이션을 지역화해야 한다는 점에 유의해야 합니다. 다음 항목에서는 고려할 사항을 제공합니다.

다국어 사용자 인터페이스

MUI(다국어 사용자 인터페이스)는 UI를 한 언어에서 다른 언어로 전환하는 Microsoft 지원입니다. WPF 애플리케이션에서는 어셈블리 모델을 사용하여 MUI를 지원합니다. 한 애플리케이션에는 언어 중립 어셈블리 외에도 언어별 위성 리소스 어셈블리도 포함됩니다. 진입점은 기본 어셈블리에서 관리되는 .EXE입니다. WPF 리소스 로더는 프레임워크의 리소스 관리자를 활용하여 리소스 조회 및 대체를 지원합니다. 여러 언어 위성 어셈블리는 동일한 기본 어셈블리와 작동합니다. 로드되는 리소스 어셈블리는 현재 스레드의 CurrentUICulture에 따라 다릅니다.

지역화할 수 있는 사용자 인터페이스

WPF 애플리케이션은 XAML을 사용하여 UI를 정의합니다. XAML을 사용하면 개발자가 속성 및 논리 집합을 사용하여 개체의 계층 구조를 지정할 수 있습니다. XAML의 주요 용도는 WPF 애플리케이션을 개발하는 것이지만 CLR(공용 언어 런타임) 개체의 계층 구조를 지정하는 데 사용할 수 있습니다. 대부분의 개발자는 XAML을 사용하여 애플리케이션의 UI를 지정하고 C#과 같은 프로그래밍 언어를 사용하여 사용자 상호 작용에 반응합니다.

리소스 관점에서 UI는 리소스 요소이므로 최종 배포 형식은 국가별 언어를 지원하도록 지역화할 수 있어야 합니다. XAML은 이벤트를 처리할 수 없기 때문에 많은 XAML 애플리케이션에 이 작업을 수행할 코드 블록이 포함되어 있습니다. 자세한 내용은 WPF의 XAML을 참조하세요. XAML 파일이 XAML의 BAML 양식으로 토큰화되면 코드가 제거되어 다른 이진 파일로 컴파일됩니다. XAML 파일의 BAML 양식, 이미지 및 기타 형식의 관리 리소스 개체는 위성 리소스 어셈블리에 포함되어 다른 언어로 지역화되거나, 지역화가 필요하지 않은 경우 기본 어셈블리에 포함됩니다.

참고

WPF 애플리케이션은 문자열 테이블, 이미지 등을 포함한 모든 FrameworkCLR 리소스를 지원합니다.

지역화 가능 애플리케이션 빌드

지역화는 UI를 다른 문화권에 맞게 조정하는 것입니다. WPF 애플리케이션을 지역화할 수 있도록 하려면 개발자가 지역화 가능한 리소스를 모두 리소스 어셈블리로 빌드해야 합니다. 리소스 어셈블리는 여러 다른 언어로 지역화되며, 코드 숨김에서는 리소스 관리 API를 사용하여 로드합니다. WPF 애플리케이션에 필요한 파일 중 하나는 프로젝트 파일(.proj)입니다. 애플리케이션에서 사용하는 모든 리소스는 프로젝트 파일에 포함되어야 합니다. .csprop 파일의 다음 예에서는 이 작업을 수행하는 방법을 보여줍니다.

<Resource Include="data\picture1.jpg"/>
<EmbeddedResource Include="data\stringtable.en-US.restext"/>

애플리케이션에서 리소스를 사용하려면 ResourceManager를 인스턴스화하고 사용할 리소스를 로드합니다. 다음 예제에서는 이 작업을 수행하는 방법을 보여 줍니다.

void OnClick(object sender, RoutedEventArgs e)
{
  ResourceManager rm = new ResourceManager ("MySampleApp.data.stringtable",
       Assembly.GetExecutingAssembly());
  Text1.Text = rm.GetString("Message");
}

지역화된 애플리케이션에서 ClickOnce 사용

ClickOnce는 Visual Studio 2005와 함께 제공되는 새로운 Windows Forms 배포 기술입니다. 애플리케이션 설치 및 웹 애플리케이션의 업그레이드를 수행할 수 있습니다. ClickOnce로 배포된 애플리케이션이 지역화되면 지역화된 문화권에서만 볼 수 있습니다. 예를 들어, 배포된 애플리케이션이 일본어로 지역화되면 일본어 Microsoft Windows에서만 볼 수 있고 영어 Windows에서는 볼 수 없습니다. 일본어 사용자가 영어 버전의 Windows를 실행하는 것은 일반적인 시나리오이므로 문제가 초래됩니다.

이 문제는 중립 언어 대체 특성을 설정하여 해결합니다. 애플리케이션 개발자가 선택적으로 기본 어셈블리에서 리소스를 제거하고 특정 문화권에 해당하는 위성 어셈블리에서 해당 리소스를 찾을 수 있게 지정할 수 있습니다. 이 프로세스를 제어하려면 NeutralResourcesLanguageAttribute를 사용합니다. NeutralResourcesLanguageAttribute 클래스의 생성자에는 두 개의 서명이 있습니다. 하나는 UltimateResourceFallbackLocation 매개 변수를 사용하여 ResourceManager가 대체 리소스를 추출해야 하는 위치(기본 어셈블리 또는 위성 어셈블리)를 지정합니다. 다음 예제에서는 이 특성을 사용하는 방법을 보여 줍니다. 최종 대체 위치를 위해 코드는 ResourceManager가 현재 실행 중인 어셈블리 디렉터리의 “de” 하위 디렉터리에서 리소스를 찾도록 합니다.

[assembly: NeutralResourcesLanguageAttribute(
    "de" , UltimateResourceFallbackLocation.Satellite)]

참고 항목