Globalização do WPF

Este tópico apresenta problemas que você deve estar ciente ao escrever aplicativos Windows Presentation Foundation (WPF) para o mercado global. Os elementos de programação de globalização são definidos em .NET no System.Globalization namespace.

Globalização XAML

A linguagem XAML (Extensible Application Markup Language) é baseada em XML e aproveita o suporte à globalização definido na especificação XML. As seções a seguir descrevem alguns recursos XAML que você deve conhecer.

Referências de Caractere

Uma referência de caractere fornece a unidade de código UTF16 do caractere Unicode específico que ele representa, em decimal ou hexadecimal. O exemplo a seguir mostra uma referência de caractere decimal para a letra maiúscula copta hori ou 'Ϩ':

Ϩ

O exemplo a seguir mostra uma referência de caractere hexadecimal. Observe que ele tem um x na frente do número hexadecimal.

Ϩ

Codificação

A codificação suportada pelo XAML é ASCII, Unicode UTF-16 e UTF-8. A instrução de codificação está no início do documento XAML. Se nenhum atributo de codificação existe e não há nenhuma ordem de bytes, o analisador padrão é UTF-8. UTF-8 e UTF-16 são as codificações preferenciais. UTF-7 não tem suporte. O exemplo a seguir demonstra como especificar uma codificação UTF-8 em um arquivo XAML.

?xml encoding="UTF-8"?

Atributo de idioma

XAML usa xml:lang para representar o atributo language de um elemento. Para aproveitar a CultureInfo classe, o valor do atributo language precisa ser um dos nomes de cultura predefinidos pelo CultureInfo. xml:lang é herdável na árvore de elementos (pelas regras de XML, não necessariamente devido a herança de propriedade de dependência) e seu valor padrão será uma cadeia de caracteres vazia se ele não for definido explicitamente.

O atributo language é muito útil para especificar idiomas regionais. Por exemplo, francês tem ortografia, vocabulário e pronúncia diferentes na França, Bélgica, Quebec e Suíça. Também chinês, japonês e coreano compartilham pontos de código em Unicode, mas as formas ideográficas são diferentes e usam fontes totalmente diferentes.

O exemplo XAML (Extensible Application Markup Language) a seguir usa o atributo language para especificar o fr-CA francês canadense.

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

Unicode

O XAML oferece suporte a todos os recursos Unicode, incluindo substitutos. Desde que o conjunto de caracteres possa ser mapeado para Unicode, ele é suportado. Por exemplo, GB18030 apresenta alguns caracteres que são mapeados para o chinês, japonês e coreano (CFK), extensão A e B e pares substitutos, portanto, ele é totalmente com suporte. Um aplicativo WPF pode ser usado StringInfo para manipular cadeias de caracteres sem entender se elas têm pares substitutos ou caracteres combinados.

Criando uma Interface do usuário internacional com XAML

Esta seção descreve os recursos da interface do usuário (UI) que você deve considerar ao escrever um aplicativo.

Texto internacional

O WPF inclui processamento interno para todos os sistemas de gravação suportados pelo Microsoft .NET Framework.

Os scripts a seguir tem suporte atualmente:

  • Árabe

  • Bengali

  • Devanagari

  • Cirílico

  • Grego

  • Guzerate

  • Gurmukhi

  • Hebraico

  • Scripts ideográficos

  • canarim

  • Lao

  • Latim

  • Malaiala

  • Mongol

  • Oriá

  • Siríaco

  • Tâmil

  • Télugo

  • Thaana

  • Tailandês*

  • Tibetano

* Nesta versão, a exibição e edição de texto em tailandês tem suporte; quebra de palavras não tem suporte.

Os scripts a seguir não têm suporte atualmente:

  • Khmer

  • Hangul antigo coreano

  • Mianmar

  • Sinhala

Todos os mecanismos do sistema de gravação suportam fontes OpenType. As fontes OpenType podem incluir as tabelas de layout OpenType que permitem que os criadores de fontes criem fontes tipográficas internacionais e high-end melhores. As tabelas de layout de fonte OpenType contêm informações sobre substituições de glifos, posicionamento de glifos, justificativa e posicionamento de linha de base, permitindo que aplicativos de processamento de texto melhorem o layout de texto.

As fontes OpenType permitem a manipulação de grandes conjuntos de glifos usando codificação Unicode. Tal codificação permite um amplo suporte internacional, bem como para variantes tipográficas de glifos.

A renderização de texto WPF é alimentada pela tecnologia de subpixel Microsoft ClearType que oferece suporte à independência de resolução. Isso significativamente melhora a legibilidade e fornece a capacidade de dar suporte a documentos no estilo de revista de alta qualidade para todos os scripts.

Layout internacional

O WPF fornece uma maneira muito conveniente de oferecer suporte a layouts horizontais, bidirecionais e verticais. Na estrutura de apresentação, a FlowDirection propriedade pode ser usada para definir o layout. Os padrões de direção de fluxo são:

  • LeftToRight -layout horizontal para latim, Leste da Ásia e assim por diante.

  • RightToLeft -bidirecional para árabe, hebraico e assim por diante.

Desenvolver aplicativos localizáveis

Quando você escreve um aplicativo para consumo global, você deve considerar que o aplicativo deve ser localizável. Os tópicos a seguir destacam coisas a se considerar.

Interface do Usuário Multilíngue

Multilingual User Interfaces (MUI) é um suporte da Microsoft para alternar interfaces do usuário de um idioma para outro. Um aplicativo WPF usa o modelo de assembly para oferecer suporte a MUI. Um aplicativo contém assemblies de com neutralidade de idioma, bem como assemblies satélite dependentes de idioma em recursos. O ponto de entrada é .EXE gerenciado no assembly principal. O carregador de recursos do WPF aproveita o gerenciador de recursos do Framework para oferecer suporte à pesquisa e ao fallback de recursos. Vários assemblies satélite funcionam com o mesmo assembly principal. O assembly de recurso que é carregado depende do CurrentUICulture thread atual.

Interface do usuário localizável

Os aplicativos WPF usam XAML para definir sua interface do usuário. O XAML permite que os desenvolvedores especifiquem uma hierarquia de objetos com um conjunto de propriedades e lógica. O principal uso do XAML é desenvolver aplicativos WPF, mas ele pode ser usado para especificar uma hierarquia de qualquer objeto CLR (Common Language Runtime). A maioria dos desenvolvedores usa XAML para especificar a interface do usuário do aplicativo e usa uma linguagem de programação como C# para reagir à interação do usuário.

Do ponto de vista do recurso, uma interface do usuário é um elemento de recurso e, portanto, seu formato de distribuição final deve ser localizável para oferecer suporte a idiomas internacionais. Como o XAML não pode manipular eventos, muitos aplicativos XAML contêm blocos de código para fazer isso. Para obter mais informações, consulte XAML no WPF. O código é removido e compilado em binários diferentes quando um arquivo XAML é tokenizado no formato BAML de XAML. O formulário BAML de arquivos XAML, imagens e outros tipos de objetos de recursos gerenciados são inseridos no assembly de recursos satélite, que pode ser localizado em outros idiomas ou o assembly principal quando a localização não é necessária.

Observação

Os aplicativos WPF oferecem suporte a todos os recursos do FrameworkCLR, incluindo tabelas de cadeia de caracteres, imagens e assim por diante.

Construindo aplicativos localizáveis

Localização significa adaptar uma interface do usuário a diferentes culturas. Para tornar um aplicativo WPF localizável, os desenvolvedores precisam criar todos os recursos localizáveis em um assembly de recursos. O assembly de recursos é localizado em idiomas diferentes e o code-behind usa a API de gerenciamento de recursos para carregar. Um dos arquivos necessários para um aplicativo WPF é um arquivo de projeto (.proj). Todos os recursos que você usa em seu aplicativo devem ser incluídos no arquivo de projeto. O exemplo de um arquivo. csproj a seguir mostra como fazer isso.

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

Para usar um recurso em seu aplicativo, instancie um ResourceManager e carregue o recurso que deseja usar. O exemplo a seguir demonstra como fazer isso.

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

Usando o ClickOnce com aplicativos localizados

O ClickOnce é uma nova tecnologia de implantação do Windows Forms que será fornecida com o Visual Studio 2005. Ele permite a instalação do aplicativo e a atualização de aplicativos da Web. Quando um aplicativo que foi implantado com o ClickOnce é localizado, ele somente pode ser exibido na cultura localizada. Por exemplo, se um aplicativo implantado estiver localizado para japonês, ele só poderá ser exibido no Microsoft Windows japonês, não no Windows em inglês. Isso apresenta um problema porque é um cenário comum para usuários japoneses executar uma versão em inglês do Windows.

A solução para esse problema é configurar o atributo de fallback de idioma neutro. Um desenvolvedor de aplicativos pode, opcionalmente, remover recursos do assembly principal e especificar que os recursos podem ser encontrados em um assembly satélite correspondente a uma cultura específica. Para controlar esse processo, use o NeutralResourcesLanguageAttribute. O construtor da classe tem duas assinaturas, uma que usa um UltimateResourceFallbackLocation parâmetro para especificar o local onde o ResourceManager deve extrair os recursos de NeutralResourcesLanguageAttribute fallback: assembly principal ou assembly satélite. O exemplo a seguir mostra como usar o atributo. Para o local de fallback final, o código faz com que o ResourceManager procure os recursos no subdiretório "de" do diretório do assembly em execução no momento.

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

Confira também