Partilhar via


Globalização para 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 namespace System.Globalization.

Globalização do XAML

Extensible Application Markup Language (XAML) é baseado 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 estar ciente.

Referências de personagens

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 decimal de caracteres 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 existir e não houver ordem de bytes, o analisador assume como padrão UTF-8. UTF-8 e UTF-16 são as codificações preferidas. UTF-7 não é suportado. O exemplo a seguir demonstra como especificar uma codificação UTF-8 em um arquivo XAML.

?xml encoding="UTF-8"?

Atributo de idioma

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

O atributo language é muito útil para especificar idiomas regionais. Por exemplo, o francês tem ortografia, vocabulário e pronúncia diferentes na França, Quebec, Bélgica e Suíça. Também chineses, japoneses e coreanos 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 fr-CA language para especificar o francês canadense.

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

Unicode

O XAML suporta todos os recursos Unicode, incluindo substitutos. Desde que o conjunto de caracteres possa ser mapeado para Unicode, ele é suportado. Por exemplo, GB18030 introduz alguns caracteres que são mapeados para as extensões A e B chinesas, japonesas e coreanas (CFK) e pares substitutos, portanto, é totalmente suportado. Uma aplicação WPF pode usar StringInfo para manipular cadeias de caracteres sem compreender se têm pares substitutos ou caracteres combinados.

Projetando uma interface de 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 escrita suportados pelo Microsoft .NET Framework.

Os seguintes scripts são suportados atualmente:

  • Árabe

  • Bengalês

  • Devanagari

  • Cirílico

  • Grego

  • Guzerate

  • Gurmukhi

  • Hebraico

  • Escritas ideográficas

  • Canarês

  • Laos

  • Latim

  • Malaiala

  • Mongol

  • Odia

  • Siríaco

  • Tâmil

  • Telugu

  • Thaana

  • Tailandês*

  • Tibetano

*Nesta versão, a exibição e edição de texto tailandês são suportadas, mas não a divisão de palavras.

Os seguintes scripts não são suportados atualmente:

  • Khmer

  • Hangul Velho Coreano

  • Mianmar

  • Cingalês

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

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

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

Esquema Internacional

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

  • LeftToRight - disposição horizontal para Latim, Leste Asiático, etc.

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

Desenvolvimento de Aplicações Localizáveis

Ao escrever um aplicativo para consumo global, você deve ter em mente que o aplicativo deve ser localizável. Os tópicos a seguir apontam coisas a serem consideradas.

Interface de utilizador multilingue

Multilingual User Interfaces (MUI) é um suporte da Microsoft para alternar UIs de um idioma para outro. Um aplicativo WPF usa o modelo de assembly para oferecer suporte a MUI. Uma aplicação contém assemblies de idioma neutro, assim como assemblies de recursos satélite dependentes do idioma. O ponto de entrada é um .EXE gerenciado no assembly principal. O carregador de recursos do WPF utiliza o gestor de recursos do Framework para suportar a pesquisa e substituição de recursos. Assemblagens satélite em vários idiomas funcionam com a mesma assemblagem principal. O assembly de recursos que é carregado depende da CurrentUICulture do thread atual.

Interface de 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 quaisquer objetos 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 na forma BAML de XAML. A forma BAML de ficheiros XAML, imagens e outros tipos de objetos de recursos geridos são incorporados no conjunto de recursos satélite, que pode ser traduzido para outros idiomas, ou no conjunto principal quando a localização não é necessária.

Observação

Os aplicativos WPF suportam 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 conjunto de recursos é localizado em diferentes idiomas, e o código subjacente usa a API de gestão 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 a seguir de um arquivo .csproj 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

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

A solução para esse problema é definir o atributo de fallback de linguagem neutra. 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 NeutralResourcesLanguageAttribute tem duas assinaturas: uma que aceita um parâmetro UltimateResourceFallbackLocation para especificar o local de onde o ResourceManager deve extrair os recursos de fallback: o assembly principal ou o 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)]

Ver também