Globalização para WPF
Este tópico apresenta problemas que você deve estar ciente ao escrever aplicativos do WPF (Windows Presentation Foundation) para o mercado global. Os elementos de programação de globalização são definidos no .NET no namespace System.Globalization.
Globalização XAML
A 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 estar ciente.
Referências de Caracteres
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 compatível com 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 byte, o analisador usará como padrão UTF-8. UTF-8 e UTF-16 são as codificações preferenciais. Não há suporte para UTF-7. O exemplo a seguir demonstra como especificar uma codificação UTF-8 em um arquivo XAML.
?xml encoding="UTF-8"?
Atributo de linguagem
O XAML usa xml:lang para representar o atributo de linguagem de um elemento. Para aproveitar a classe CultureInfo, o valor do atributo de linguagem precisa ser um dos nomes de cultura predefinidos por CultureInfo. xml:lang é herdável na árvore de elementos (por regras XML, não necessariamente por causa da herança da propriedade de dependência) e seu valor padrão é uma cadeia de caracteres vazia se não for atribuída explicitamente.
O atributo de idioma é 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. Além disso, chinês, japonês e coreano compartilham pontos de código no Unicode, mas as formas ideográficas são diferentes e eles usam fontes totalmente diferentes.
O exemplo de XAML (Extensible Application Markup Language) a seguir usa o atributo de idioma fr-CA
para especificar o francês canadense.
<TextBlock xml:lang="fr-CA">Découvrir la France</TextBlock>
Unicode
O XAML dá suporte a todos os recursos unicode, incluindo substitutos. Desde que o conjunto de caracteres possa ser mapeado para Unicode, ele terá suporte. Por exemplo, GB18030 apresenta alguns caracteres mapeados para a extensão chinesa, japonesa e coreana (CFK) A e B e pares substitutos, portanto, é totalmente compatível. Um aplicativo WPF pode usar StringInfo para manipular cadeias de caracteres sem entender se elas têm pares substitutos ou caracteres combinantes.
Criando uma interface do usuário internacional com XAML
Esta seção descreve os recursos de interface do usuário que você deve considerar ao escrever um aplicativo.
Texto Internacional
O WPF inclui processamento interno para todos os sistemas de gravação compatíveis com o Microsoft .NET Framework.
No momento, há suporte para os seguintes scripts:
Árabe
Bengalês
Devanágari
Cirílico
Grego
Guzerate
Gurmukhi
Hebraico
Scripts ideográficos
Kannada
Lao
Latim
Malaiala
Mongol
Odia
Siríaco
Tâmil
Telugu
Thaana
Tailandês*
Tibetano
Neste lançamento, há suporte para exibição e edição de texto tailandês; a quebra de palavras não é suportada.
No momento, não há suporte para os seguintes scripts:
Khmer
Hangul Antigo Coreano
Myanmar
Sinhala
Todos os mecanismos de sistema de gravação dão suporte a fontes OpenType. As fontes OpenType podem incluir as tabelas de layout OpenType que permitem que os criadores de fonte projetem fontes tipográficas de ponta e internacionais melhores. As tabelas de layout de fonte OpenType contêm informações sobre substituições de glifo, posicionamento de glifo, justificativa e posicionamento de linha de base, permitindo que aplicativos de processamento de texto melhorem o layout de texto.
As fontes OpenType permitem o tratamento de grandes conjuntos de glifos usando a codificação Unicode. Essa codificação permite amplo suporte internacional, bem como para variantes de glifo tipográfico.
A renderização de texto do WPF é impulsionada pela tecnologia de sub-pixel do Microsoft ClearType que oferece suporte à independência de resolução. Isso melhora significativamente a legibilidade e fornece a capacidade de dar suporte a documentos de estilo de revista de alta qualidade para todos os scripts.
Layout Internacional
O WPF fornece uma maneira muito conveniente de dar suporte a layouts horizontais, bidirecionais e verticais. Na estrutura de apresentação, a propriedade FlowDirection pode ser usada para definir o layout. Os padrões de direção de fluxo são:
lefttoright - layout horizontal para latino, leste asiático e assim por diante.
RightToLeft - bidirecional para árabe, hebraico e assim por diante.
Desenvolvendo aplicativos 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 do Usuário Multilíngue
MUI (Interfaces de Usuário Multilíngue) é um suporte da Microsoft para alternar interfaces de usuário de um idioma para outro. Um aplicativo WPF usa o modelo de assembly para dar suporte ao MUI. Um aplicativo contém assemblies neutros em relação à linguagem, bem como assemblies de recursos satélite que dependem da linguagem. O ponto de entrada é um executável (.EXE) gerenciado no assembly principal. O carregador de recursos do WPF aproveita o gerenciador de recursos do Framework para dar suporte à pesquisa e ao fallback de recursos. Assemblies de satélite de múltiplas linguagens funcionam com o mesmo assembly principal. O assembly de recurso que é carregado depende do CurrentUICulture do thread atual.
Interface do usuário localizável
Aplicativos WPF usam XAML para definir a interface do usuário. O XAML permite que os desenvolvedores especifiquem uma hierarquia de objetos com um conjunto de propriedades e lógica. O uso principal 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 usar 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 dar suporte a idiomas internacionais. Como o XAML não pode lidar com 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 arquivos XAML, imagens e outros tipos de objetos de recurso gerenciados é incorporada ao assembly de recursos satélite, que pode ser localizado em outras linguagens, ou ao assembly principal quando a localização não é necessária.
Nota
Os aplicativos WPF dão suporte a todos os recursos do FrameworkCLR, incluindo tabelas de cadeia de caracteres, imagens e assim por diante.
Criando aplicativos localizáveis
A 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 nos idiomas diferentes, e o código subjacente 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 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, crie uma instância de um ResourceManager e carregue o recurso que você 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á enviada com o Visual Studio 2005. Ele habilita a instalação do aplicativo e a atualização de aplicativos Web. Quando um aplicativo implantado com o ClickOnce é localizado, ele só pode ser exibido na cultura localizada. Por exemplo, se um aplicativo implantado for localizado em japonês, ele só poderá ser exibido no Microsoft Windows japonês e não no Windows inglês. Isso apresenta um problema porque é um cenário comum para os 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. Opcionalmente, um desenvolvedor de aplicativos pode 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 recebe um parâmetro UltimateResourceFallbackLocation para especificar o local de onde o ResourceManager deve extrair os recursos do fallback: assemblagem principal ou assemblagem 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)]
Consulte também
.NET Desktop feedback