Preparando código C# para o mundo global: internacionalização de aplicações

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que sua aplicação C# precisa de internacionalização?

\n

Imagine: você escreveu um ótimo serviço para gerenciar notas. Tudo funciona, a interface é limpa, os usuários estão satisfeitos. Mas apenas os falantes de russo. Assim que você entra no mercado dos EUA ou da Alemanha, o projeto para. Não porque o código é ruim, mas porque o botão «Сохранить» não se transforma em «Save», e a mensagem «Ошибка ввода» assusta o estrangeiro.

\n

Esse é o problema da localização. No mundo .NET, a solução é chamada de internacionalização C# (ou i18n — da palavra "internationalization", onde 18 é o número de letras entre i e n). Se você usa C# e a plataforma .NET (Core, 5/6/7/8/9), já tem sob o capô um poderoso conjunto de ferramentas para tornar sua aplicação multilíngue. Neste artigo, vamos explorá-lo na prática: desde recursos simples até a troca de idioma "em tempo real".

\n\n

Fundamentos: o que é cultura e idioma neutro

\n

Antes de escrever código, vamos entender os termos. No .NET, a localização é gerenciada por duas classes principais do namespace System.Globalization:

\n
    \n
  • CultureInfo — objeto que descreve o idioma e os padrões regionais (por exemplo, ru-RU, en-US, de-DE).
  • \n
  • CurrentUICulture — a cultura atual da interface do usuário. É nela que o sistema se baseia ao procurar traduções.
  • \n
  • CurrentCulture — formato de datas, números, moeda. Também pode ser alterado, mas para traduções, o primeiro é o importante.
  • \n
\n

Em aplicações C#, normalmente usamos arquivos de recurso (.resx). São arquivos XML que armazenam strings, imagens e outros dados vinculados a uma cultura específica. Por exemplo:

\n
    \n
  • Messages.resx — strings padrão (geralmente inglês).
  • \n
  • Messages.ru.resx — tradução para russo.
  • \n
  • Messages.de.resx — tradução para alemão.
  • \n
\n

Quando a aplicação é iniciada, o .NET seleciona automaticamente o arquivo correspondente à UICulture atual. Se não houver correspondência exata, usa o arquivo neutro (base).

\n\n

Criando o primeiro arquivo de recurso no Visual Studio

\n

Suponha que temos um aplicativo de console ou um projeto ASP.NET Core. Vamos adicionar uma pasta Resources e, dentro dela, o arquivo Strings.resx. Preencha-o:

\n
Nome          | Valor\n-------------|-------------------\nWelcomeMsg   | Welcome to our app!\nGoodbyeMsg   | Goodbye!\n
\n

Agora, crie Strings.ru.resx:

\n
Nome          | Valor\n-------------|-------------------\nWelcomeMsg   | Добро пожаловать в наше приложение!\nGoodbyeMsg   | До свидания!\n
\n

Observe: os nomes das chaves devem coincidir. Após salvar, o Visual Studio gerará automaticamente a classe Strings com acesso às strings por meio de propriedades estáticas.

\n\n

Alternância programática de idioma

\n

Para que a internacionalização C# funcione, você precisa definir a cultura desejada no início da execução da aplicação (por exemplo, em Main ou Startup). Veja como fica:

\n
using System.Globalization;\nusing System.Threading;\n\n// Define o idioma da interface como russo\nCultureInfo culture = new CultureInfo("ru-RU");\nThread.CurrentThread.CurrentUICulture = culture;\nThread.CurrentThread.CurrentCulture = culture; // para formatos de data/número\n\n// Agora acessa os recursos\nConsole.WriteLine(Strings.WelcomeMsg);  // Exibe: Добро пожаловать в наше приложение!\n
\n

Se você quiser permitir que o usuário alterne o idioma "em tempo real" (sem reiniciar), basta chamar essas linhas novamente após a mudança de cultura. No ASP.NET Core, usa-se middleware para isso:

\n
app.UseRequestLocalization(new RequestLocalizationOptions\n{\n    DefaultRequestCulture = new RequestCulture("en-US")                

Blogs

Book Recommendations