Internacionalização (i18n) em C# (.NET): guia completo

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

Internacionalização (i18n) em C# (.NET)

\n

Internacionalização (abreviada como i18n — do inglês "internationalization", onde 18 é o número de letras entre o primeiro "i" e o último "n") — é o processo de projetar software para adaptá-lo a diferentes idiomas, regiões e características culturais sem alterar o código-fonte. Na plataforma .NET (C#), a i18n é implementada por meio de mecanismos de localização e globalização, que são incorporados ao núcleo do framework.

\n\n

Conceitos principais de i18n no .NET

\n
    \n
  • Globalização — projetar o aplicativo considerando o suporte a múltiplas culturas (por exemplo, formatação de datas, números, moedas).
  • \n
  • Localização — adaptar a interface para uma cultura específica (tradução de textos, imagens, sons).
  • \n
  • Cultura (Culture) — combinação de idioma e configurações regionais, indicada por um código como ru-RU, en-US, de-DE.
  • \n
  • Arquivos de recurso (.resx) — arquivos XML contendo pares "chave-valor" para cada localidade.
  • \n
\n\n

Como funciona a i18n em C# (.NET)

\n

No .NET, a localização usa arquivos de recurso. O arquivo principal (por exemplo, Strings.resx) contém strings no idioma padrão (geralmente inglês). Para cada idioma adicional, é criado um arquivo separado com o sufixo do código de cultura: Strings.ru.resx (russo), Strings.de.resx (alemão). Durante a compilação, esses arquivos são convertidos em assemblies satélite, que são carregados dependendo da cultura atual da thread.

\n\n
// Exemplo de arquivo de recurso (Strings.resx)\n// Key: HelloMessage, Value: "Hello, World!"\n// Strings.ru.resx\n// Key: HelloMessage, Value: "Привет, мир!"\n
\n\n

Implementação passo a passo da localização em um aplicativo de console

\n
    \n
  1. Crie um arquivo de recurso no projeto: clique com o botão direito no projeto → Add → New Item → Resources File. Nomeie-o como Strings.resx.
  2. \n
  3. Adicione strings: insira a chave Greeting e o valor Hello, user!.
  4. \n
  5. Crie o arquivo para o idioma russo: Strings.ru.resx com a mesma chave e o valor Привет, пользователь!.
  6. \n
  7. Escreva o código para definir a cultura e obter a string localizada:
  8. \n
\n\n
using System.Globalization;\nusing System.Resources;\nusing System.Threading;\n\nclass Program\n{\n    static void Main()\n    {\n        // Define a cultura russa\n        Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru-RU");\n        Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU");\n\n        // Obtém o gerenciador de recursos\n        ResourceManager rm = new ResourceManager("YourNamespace.Strings", typeof(Program).Assembly);\n        string greeting = rm.GetString("Greeting");\n\n        Console.WriteLine(greeting); // Exibirá: "Привет, пользователь!"\n    }\n}\n
\n\n

Localização de aplicativos web ASP.NET Core

\n

No ASP.NET Core, a i18n é implementada por meio de middleware e serviços integrados. Vejamos um exemplo de configuração para MVC ou Razor Pages.

\n\n

1. Configuração no Program.cs

\n
using Microsoft.AspNetCore.Localization;\nusing System.Globalization;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddLocalization(options => options.ResourcesPath = "Resources");\nbuilder.Services.AddControllersWithViews()\n    .AddViewLocalization()\n    .AddDataAnnotationsLocalization();\n\nvar app = builder.Build();\n\nvar supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("ru-RU") };\napp.UseRequestLocalization(new RequestLocalizationOptions\n{\n    DefaultRequestCulture = new RequestCulture("en-US"),\n    SupportedCultures = supportedCultures,\n    SupportedUICultures = supportedCul                    

Recommendations