Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Quando limita a disponibilidade do seu produto a apenas um idioma, limita a sua base de potenciais clientes a uma fração dos 7,5 mil milhões de habitantes do nosso mundo. Se você deseja que seus aplicativos alcancem um público global, a localização econômica de seu produto é uma das melhores e mais econômicas maneiras de alcançar mais clientes.
Esta visão geral apresenta a globalização e a localização no Windows Presentation Foundation (WPF). Globalização é a conceção e desenvolvimento de aplicações que funcionam em vários locais. Por exemplo, a globalização suporta interfaces de usuário localizadas e dados regionais para usuários em diferentes culturas. O WPF fornece recursos de design globalizados, incluindo layout automático, montagens de satélites e atributos e comentários localizados.
Localização é a tradução de recursos do aplicativo em versões localizadas para as culturas específicas que o aplicativo suporta. Ao localizar no WPF, você usa as APIs no System.Windows.Markup.Localizer namespace. Essas APIs alimentam a ferramenta de linha de comando LocBaml Tool Sample . Para obter informações sobre como criar e usar o LocBaml, consulte Localizar um aplicativo.
Advertência
A ferramenta LocBaml só funciona com WPF para projetos .NET Framework, não funciona com WPF para .NET.
Práticas recomendadas para globalização e localização no WPF
Você pode aproveitar ao máximo a funcionalidade de globalização e localização incorporada ao WPF seguindo o design da interface do usuário e as dicas relacionadas à localização fornecidas nesta seção.
Práticas recomendadas para o design da interface do usuário do WPF
Ao criar uma interface do usuário baseada em WPF, considere implementar estas práticas recomendadas:
Escreva sua interface do usuário em XAML; evite criar a interface do usuário no código. Ao criar sua interface do usuário usando XAML, você a expõe por meio de APIs de localização internas.
Evite usar posições absolutas e tamanhos fixos para dispor o conteúdo; em vez disso, use o dimensionamento relativo ou automático.
Use SizeToContent e mantenha larguras e alturas definidas como
Auto.Evite usar Canvas para estruturar interfaces de utilizador.
Utilize Grid e a sua função de partilha de tamanho.
Forneça espaço extra nas margens porque o texto localizado geralmente requer mais espaço. Espaço extra permite possíveis personagens pendentes.
Ative TextWrapping no TextBlock para evitar corte.
Defina o
xml:langatributo. Este atributo descreve a cultura de um elemento específico e seus elementos filho. O valor dessa propriedade altera o comportamento de vários recursos no WPF. Por exemplo, ele altera o comportamento de hifenização, verificação ortográfica, substituição de algarismos, modelagem de escrita complexa e substituição de fonte. Consulte Globalização para WPF para obter mais informações sobre como definir a manipulação xml:lang em XAML.Crie uma fonte composta personalizada para obter um melhor controle das fontes usadas para diferentes idiomas. Por padrão, o WPF usa a fonte GlobalUserInterface.composite no diretório Windows\Fonts.
Ao criar aplicativos de navegação que podem ser localizados em uma cultura que apresenta texto em um formato da direita para a esquerda, defina explicitamente o FlowDirection de cada página para garantir que a página não herde FlowDirection do NavigationWindow.
Quando cria aplicações de navegação independentes hospedadas fora de um navegador, defina o StartupUri da sua aplicação inicial como um NavigationWindow em vez de uma página (por exemplo,
<Application StartupUri="NavigationWindow.xaml">). Este design permite-lhe alterar o FlowDirection da janela e da barra de navegação. Para obter mais informações e um exemplo, consulte Exemplo de página inicial da globalização.
Práticas recomendadas para localização do WPF
Ao localizar aplicativos baseados em WPF, considere implementar estas práticas recomendadas:
Use comentários de localização para fornecer contexto extra para localizadores.
Use atributos de localização para controlar a localização em vez de omitir Uid seletivamente propriedades em elementos. Consulte Atributos de localização e comentários para obter mais informações.
Use
msbuild -t:updateuide-t:checkuidpara adicionar e verificar Uid propriedades no seu XAML. Utilize as Uid propriedades para monitorizar alterações entre o desenvolvimento e a localização. Uid As propriedades ajudam a localizar novas alterações de desenvolvimento. Se você adicionar Uid propriedades manualmente a uma interface do usuário, a tarefa geralmente será tediosa e menos precisa.Não edite nem altere Uid propriedades depois de iniciar a localização.
Não use propriedades duplicadas Uid (lembre-se desta dica quando usar o comando copiar e colar).
Defina a localização
UltimateResourceFallbackem AssemblyInfo.* para especificar o idioma apropriado de fallback (por exemplo,[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]).Se decidires incluir o idioma de origem no assembly principal ao omitir a etiqueta
<UICulture>no ficheiro do projeto, define a localizaçãoUltimateResourceFallbackcomo o assembly principal em vez do satélite (por exemplo,[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]).
Localizar um aplicativo WPF
Quando você localiza um aplicativo WPF, você tem várias opções. Por exemplo, você pode vincular os recursos localizáveis em seu aplicativo a um arquivo XML, armazenar texto localizável em tabelas resx ou fazer com que seu localizador use arquivos XAML. Esta seção descreve um fluxo de trabalho de localização que usa a forma BAML de XAML, que oferece vários benefícios:
Você pode localizar depois de compilar.
Você pode atualizar para uma versão mais recente do formulário BAML de XAML com localizações de uma versão mais antiga do formulário BAML de XAML para que possa localizar enquanto desenvolve.
Você pode validar elementos de origem originais e semântica em tempo de compilação porque a forma BAML de XAML é a forma compilada de XAML.
Processo de compilação de localização
Quando você desenvolve um aplicativo WPF, o processo de compilação para localização é o seguinte:
O desenvolvedor cria e globaliza o aplicativo WPF. No arquivo de projeto, o desenvolvedor define
<UICulture>en-US</UICulture>para que, quando o aplicativo é compilado, um assembly principal neutro em termos de linguagem seja gerado. Este assembly tem um ficheiro satélite .resources.dll que contém todos os recursos localizáveis. Opcionalmente, você pode manter o idioma de origem no assembly principal porque nossas APIs de localização suportam a extração do assembly principal.Quando o ficheiro é incluído na build, o XAML é convertido para o formato BAML do XAML. Os arquivos culturalmente neutros
MyDialog.exee culturalmente dependentes (inglês)MyDialog.resources.dllsão liberados para o cliente de língua inglesa.
Fluxo de trabalho de localização
O processo de localização começa depois que o arquivo não localizado MyDialog.resources.dll é criado. Os elementos e propriedades da interface do usuário em seu XAML original são extraídos do formulário BAML de XAML em pares chave-valor usando as APIs em System.Windows.Markup.Localizer. Os localizadores usam os pares chave-valor para localizar o aplicativo. Você pode gerar um novo .resource.dll a partir dos novos valores após a conclusão da localização.
As chaves dos pares chave-valor são x:Uid valores colocados pelo desenvolvedor no XAML original. Esses x:Uid valores permitem que a API rastreie e mescle alterações que acontecem entre o desenvolvedor e o localizador durante a localização. Por exemplo, se o desenvolvedor alterar a interface do usuário depois que o localizador começar a localizar, você poderá mesclar a alteração de desenvolvimento com o trabalho de localização já concluído para que o trabalho de tradução mínimo seja perdido.
O gráfico a seguir mostra um fluxo de trabalho de localização típico baseado na forma BAML de XAML. Este diagrama pressupõe que o desenvolvedor escreve o aplicativo em inglês. O desenvolvedor cria e globaliza o aplicativo WPF. No arquivo de projeto, o desenvolvedor define <UICulture>en-US</UICulture> para que, na compilação, um assembly principal neutro de linguagem seja gerado com uma .resources.dll satélite contendo todos os recursos localizáveis. Como alternativa, pode-se manter o idioma de origem no assembly principal porque as APIs de localização do WPF suportam a extração do assembly principal. Após o processo de compilação, o XAML é compilado no BAML. Os MyDialog.exe.resources.dll culturalmente neutros são enviados para o cliente que fala inglês.
Exemplos de localização do WPF
Esta seção contém exemplos de aplicativos localizados para ajudá-lo a entender como criar e localizar aplicativos WPF.
Exemplo de caixa de diálogo Executar
Os gráficos a seguir mostram a saída do exemplo de caixa de diálogo Executar .
Inglês:
Alemão:
Criando uma caixa de diálogo Execução Global
Este exemplo produz uma caixa de diálogo Run usando WPF e XAML. Esta caixa de diálogo é equivalente à caixa de diálogo Executar que está disponível no menu Iniciar do Microsoft Windows.
Alguns destaques para criar caixas de diálogo globais são:
Layout automático
Em Window1.xaml:
<Window SizeToContent="WidthAndHeight">
A propriedade Window anterior redimensiona automaticamente a janela de acordo com o tamanho do conteúdo. Essa propriedade impede que a janela corte o conteúdo que aumenta de tamanho após a localização; Ele também remove espaço desnecessário quando o conteúdo diminui de tamanho após a localização.
<Grid x:Uid="Grid_1">
As propriedades Uid são necessárias para que as APIs de localização do WPF funcionem corretamente.
Eles são usados pelas APIs de localização do WPF para acompanhar alterações entre o desenvolvimento e a localização da interface de utilizador (UI).
Uid permitem mesclar uma versão mais recente da interface do usuário com uma localização mais antiga da interface do usuário. Você adiciona uma Uid propriedade executando msbuild -t:updateuid RunDialog.csproj num shell de comando. Este é o método recomendado para adicionar Uid propriedades porque adicioná-las manualmente é normalmente demorado e menos preciso. Você pode verificar se Uid as propriedades estão definidas corretamente executando msbuild -t:checkuid RunDialog.csproj.
A interface do usuário é estruturada usando o Grid controle, que é um controle útil para aproveitar o layout automático no WPF. Observe que a caixa de diálogo é dividida em três linhas e cinco colunas. Nenhuma das definições de linha e coluna tem um tamanho fixo; portanto, os elementos da interface do usuário que estão posicionados em cada célula podem se adaptar a aumentos e diminuições de tamanho durante a localização.
<Grid.ColumnDefinitions>
<ColumnDefinition x:Uid="ColumnDefinition_1" />
<ColumnDefinition x:Uid="ColumnDefinition_2" />
As duas primeiras colunas onde o rótulo Open: e ComboBox são colocados usam 10% da largura total da interface do usuário.
<ColumnDefinition x:Uid="ColumnDefinition_3" SharedSizeGroup="Buttons" />
<ColumnDefinition x:Uid="ColumnDefinition_4" SharedSizeGroup="Buttons" />
<ColumnDefinition x:Uid="ColumnDefinition_5" SharedSizeGroup="Buttons" />
</Grid.ColumnDefinitions>
Observe que o exemplo usa o recurso de dimensionamento compartilhado do Grid. As três últimas colunas aproveitam para se colocarem no mesmo SharedSizeGroup. Como seria de esperar do nome da propriedade, isso permite que as colunas compartilhem o mesmo tamanho. Então, quando o "Browse …" é localizado para a string mais longa "Durchsuchen …", todos os botões aumentam em largura em vez de haver um pequeno botão "OK" e um botão "Durchsuchen …" desproporcionalmente grande.
xml:lang
xml:lang="en-US"
Observe o tratamento xml:lang em XAML colocado no elemento raiz da interface do usuário. Esta propriedade descreve a cultura de um elemento dado e das suas crianças. Esse valor é usado por vários recursos no WPF e deve ser alterado adequadamente durante a localização. Esse valor altera o dicionário de idioma usado para hifenizar e verificar a ortografia das palavras. Isso também afeta a exibição de dígitos e como o sistema de fallback de fontes seleciona qual fonte usar. Finalmente, a propriedade afeta a maneira como os números são exibidos e a maneira como os textos escritos em scripts complexos são moldados. O valor padrão é "en-US".
Construindo um conjunto de recursos de satélite
Em .csproj:
Edite o .csproj arquivo e adicione a seguinte tag a um incondicional <PropertyGroup>:
<UICulture>en-US</UICulture>
Observe a adição de um UICulture valor. Quando isso é definido como um valor válido CultureInfo , como en-US, a construção do projeto gerará um conjunto de satélites com todos os recursos localizáveis nele.
<Resource Include="RunIcon.JPG">
<Localizable>False</Localizable>
</Resource>
O RunIcon.JPG não precisa ser localizado porque deve parecer o mesmo para todas as culturas.
Localizable é definido para false com o objetivo de permanecer na assemblagem principal neutra em termos de linguagem, em vez da assemblagem satélite. O valor padrão de todos os recursos não compiláveis é Localizable definido como true.
Localização da caixa de diálogo Executar
Analisar
Depois de criar a aplicação, o primeiro passo para localizá-la é extrair os recursos localizáveis a partir do assembly de satélite. Para os fins deste tópico, use a ferramenta LocBaml de exemplo que pode ser encontrada em LocBaml Tool Sample. Observe que o LocBaml é apenas uma ferramenta de exemplo destinada a ajudá-lo a começar a criar uma ferramenta de localização que se encaixa em seu processo de localização. Usando LocBaml, execute o seguinte para analisar: LocBaml /parse RunDialog.resources.dll /out: para gerar um "RunDialog.resources.dll. CSV".
Advertência
A ferramenta LocBaml só funciona com WPF para projetos .NET Framework, não funciona com WPF para .NET.
Localizar
Use seu editor CSV favorito que suporta Unicode para editar este arquivo. Filtre todas as entradas com uma categoria de localização de "Nenhuma". Você deve ver as seguintes entradas:
| Chave de recurso | Categoria de localização | Valor |
|---|---|---|
| Button_1:System.Windows.Controls.Button.$Content | Botão | OK |
| Botão_2:System.Windows.Controls.Botão.$Content | Botão | Cancelar |
| Button_3:System.Windows.Controls.Button.$Content | Botão | Navegar... |
| ComboBox_1:System.Windows.Controls.ComboBox.$Content | Caixa de Combinação | |
| TextBlock_1:System.Windows.Controls.TextBlock.$Content | Texto | Digite o nome de um programa, pasta, documento ou recurso da Internet e o Windows o abrirá para você. |
| TextBlock_2:System.Windows.Controls.TextBlock.$Content | Texto | Aberto: |
| Window_1:System.Windows.Window.Title | Título | Correr |
A localização do aplicativo para o alemão exigiria as seguintes traduções:
| Chave de recurso | Categoria de localização | Valor |
|---|---|---|
| Button_1:System.Windows.Controls.Button.$Content | Botão | OK |
| Botão_2:System.Windows.Controls.Botão.$Content | Botão | Cancelar |
| Button_3:System.Windows.Controls.Button.$Content | Botão | Durchsuchen... |
| ComboBox_1:System.Windows.Controls.ComboBox.$Content | Caixa de Combinação | |
| TextBlock_1:System.Windows.Controls.TextBlock.$Content | Texto | Geben Sie den Namen eines Programms, Ordners, Dokuments oder einer Internetresource an. |
| TextBlock_2:System.Windows.Controls.TextBlock.$Content | Texto | Öffnen: |
| Window_1:System.Windows.Window.Title | Título | Correr |
Gerar
A última etapa da localização envolve a criação do conjunto de satélites recém-localizado. Isso pode ser feito com o seguinte comando LocBaml:
LocBaml.exe /generate RunDialog.resources.dll /trans:RunDialog.resources.dll. CSV /saída: . /cul:de-DE
No Windows alemão, se esse resources.dll for colocado em uma pasta de-DE ao lado do assembly principal, esse recurso será carregado automaticamente em vez daquele na pasta en-US. Se você não tiver uma versão em alemão do Windows para testar isso, defina a cultura para qualquer cultura do Windows que você está usando (por exemplo, en-US) e substitua a DLL de recursos originais.
Carregamento de recursos de satélite
| MyDialog.exe | en-US\MyDialog.resources.dll | de-DE\MyDialog.resources.dll |
|---|---|---|
| Código | Original em Inglês BAML | BAML localizado |
| Recursos culturalmente neutros | Outros recursos em inglês | Outros recursos localizados em alemão |
O .NET escolhe automaticamente qual assembly de recursos de satélite carregar com base na aplicação Thread.CurrentUICulture. Por predefinição, corresponde à cultura do seu sistema operativo Windows. Se você estiver usando o Windows alemão, o arquivo de-DE\MyDialog.resources.dll será carregado. Se estiver a utilizar o Windows em inglês, o ficheiro en-US\MyDialog.resources.dll é carregado. Você pode definir o recurso de fallback final para seu aplicativo especificando o NeutralResourcesLanguage atributo no arquivo AssemblyInfo do seu projeto. Por exemplo, se especificar:
[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
em seguida, o arquivo en-US\MyDialog.resources.dll é usado com o Windows alemão se nenhum dos seguintes arquivos estiver disponível: de-DE\MyDialog.resources.dll ou de\MyDialog.resources.dll.
Página inicial da Microsoft Arábia Saudita
Os gráficos a seguir mostram uma página inicial em inglês e árabe. Para obter o exemplo completo que produz esses gráficos , consulte Exemplo de página inicial de globalização.
Inglês:
Árabe:
Criando uma home page global da Microsoft
Esta maquete do site da Microsoft na Arábia Saudita ilustra os recursos de globalização fornecidos para idiomas RightToLeft. Idiomas como hebraico e árabe têm uma ordem de leitura da direita para a esquerda, de modo que o layout da interface do usuário muitas vezes deve ser disposto de forma bastante diferente do que seria em idiomas da esquerda para a direita, como o inglês. Localizar de um idioma com escrita da esquerda para a direita para um idioma com escrita da direita para a esquerda ou vice-versa pode ser bastante desafiador. O WPF foi projetado para tornar essas localizações muito mais fáceis.
Direção do fluxo
Homepage.xaml:
<Page x:Uid="Page_1" x:Class="MicrosoftSaudiArabiaHomepage.Homepage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
FlowDirection="LeftToRight"
Localization.Comments="FlowDirection(This FlowDirection controls the actual content of the homepage)"
xml:lang="en-US">
Observe a FlowDirection propriedade em Page. Alterar esta propriedade para RightToLeft mudará a FlowDirection do Page e dos seus elementos filhos, para que o layout desta IU seja invertido, tornando-se da direita para a esquerda, como um utilizador árabe esperaria. Pode-se substituir o comportamento de herança especificando um explícito FlowDirection em qualquer elemento. A FlowDirection propriedade está disponível em qualquer FrameworkElement elemento relacionado ou documento e tem um valor implícito de LeftToRight.
Observe que até mesmo os pincéis de gradiente de plano de fundo são invertidos corretamente quando a raiz FlowDirection é alterada:
FlowDirection="Da esquerda para a direita"
FlowDirection="DaDireitaParaEsquerda"
Evite usar dimensões fixas para painéis e controles
Dê uma olhada em Homepage.xaml, observe que, além da largura e altura fixas especificadas para toda a interface do usuário na parte superior DockPanel, não há outras dimensões fixas. Evite usar dimensões fixas para evitar o recorte de texto localizado que pode ser maior do que o texto de origem. Os painéis e controles do WPF serão redimensionados automaticamente com base no conteúdo que eles contêm. A maioria dos controles também tem dimensões mínimas e máximas que você pode definir para mais controle (por exemplo, MinWidth="20"). Com Grid, você também pode definir larguras ou alturas relativas usando '*' (por exemplo, Width="0.25*") ou usar a sua função de partilha de tamanho de célula.
Comentários de localização
Há muitos casos em que o conteúdo pode ser ambíguo e difícil de traduzir. O desenvolvedor ou designer tem a capacidade de fornecer contexto extra e comentários aos localizadores por meio de comentários de localização. Por exemplo, Localization.Comments abaixo esclarece o uso do caractere '|'.
<TextBlock
x:Uid="TextBlock_2"
DockPanel.Dock="Right"
Foreground="White"
Margin="5,0,5,0"
Localization.Comments="$Content(This character is used as a decorative rule.)">
|
</TextBlock>
Este comentário fica associado ao conteúdo do TextBlock_1 e, no caso da ferramenta LocBaml (consulte Localizar um aplicativo), ele pode ser visto na 6ª coluna da linha TextBlock_1 no arquivo de .csv de saída:
| Chave de recurso | Categoria | Legível | Modificável | Comentário | Valor |
|---|---|---|---|---|---|
| TextBlock_1:System.Windows.Controls.TextBlock.$Content | Texto | VERDADEIRO | VERDADEIRO | Este caractere é usado como regra ornamental. | | |
Os comentários podem ser colocados no conteúdo ou propriedade de qualquer elemento usando a seguinte sintaxe:
<TextBlock
x:Uid="TextBlock_1"
DockPanel.Dock="Right"
Foreground="White"
Margin="5,0,5,0"
Localization.Comments="$Content(This is a comment on the TextBlock's content.)
Margin(This is a comment on the TextBlock's Margin property.)">
|
</TextBlock>
Atributos de localização
Muitas vezes, o desenvolvedor ou gerente de localização precisa de controle sobre o que os localizadores podem ler e modificar. Por exemplo, talvez você não queira que o localizador traduza o nome da sua empresa ou o texto legal. O WPF fornece atributos que permitem definir a legibilidade, a modificabilidade e a categoria do conteúdo ou propriedade de um elemento que sua ferramenta de localização pode usar para bloquear, ocultar ou classificar elementos. Para obter mais informações, consulte Attributes. Para os fins deste exemplo, a ferramenta LocBaml apenas produz os valores desses atributos. Todos os controles WPF têm valores padrão para esses atributos, mas você pode substituí-los. Por exemplo, o exemplo a seguir substitui os atributos de localização padrão para TextBlock_1 e define o conteúdo como legível, mas não modificável para especialistas em localização.
<TextBlock
x:Uid="TextBlock_1"
Localization.Attributes=
"$Content(Readable Unmodifiable)">
Microsoft Corporation
</TextBlock>
Além dos atributos de legibilidade e modificabilidade, o WPF fornece uma enumeração de categorias comuns da interface do usuário (LocalizationCategory) que podem ser usadas para dar mais contexto aos localizadores. As categorias padrão do WPF para controles de plataforma também podem ser substituídas em XAML:
<TextBlock x:Uid="TextBlock_2">
<TextBlock.ToolTip>
<TextBlock
x:Uid="TextBlock_3"
Localization.Attributes=
"$Content(ToolTip Readable Unmodifiable)">
Microsoft Corporation
</TextBlock>
</TextBlock.ToolTip>
Windows Vista
</TextBlock>
Os atributos de localização padrão que o WPF fornece também podem ser substituídos por meio de código, para que você possa definir corretamente os valores padrão corretos para controles personalizados. Por exemplo:
[Localizability(Readability = Readability.Readable, Modifiability=Modifiability.Unmodifiable, LocalizationCategory.None)]
public class CorporateLogo : TextBlock
{
// ...
}
Os atributos por instância definidos em XAML terão precedência sobre os valores definidos no código em controles personalizados. Para obter mais informações sobre atributos e comentários, consulte Atributos e comentários de localização.
Fallback de fonte e fontes compostas
Se você especificar uma fonte que não ofereça suporte a um determinado intervalo de pontos de código, o WPF fará fallback automaticamente para uma que o faça usando a Global User Interface.compositefont localizada no diretório Windows\Fonts. As fontes compostas funcionam como qualquer outra fonte e podem ser usadas explicitamente definindo o FontFamily de um elemento (por exemplo, FontFamily="Global User Interface"). Você pode especificar a sua própria preferência de recuo de fonte criando a sua própria fonte composta e especificando que fonte usar para intervalos específicos de pontos de código e idiomas.
Para obter mais informações sobre fontes compostas, consulte FontFamily.
Localização da página inicial da Microsoft
Você pode seguir as mesmas etapas que o exemplo Run Dialog para localizar este aplicativo. O arquivo localizado .csv para árabe está disponível para si no exemplo da Homepage de Globalização.
.NET Desktop feedback