Internacionalização (i18n) em C# (.NET)
\nInternacionalizaçã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\nConceitos 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
Como funciona a i18n em C# (.NET)
\nNo .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.
// Exemplo de arquivo de recurso (Strings.resx)\n// Key: HelloMessage, Value: "Hello, World!"\n// Strings.ru.resx\n// Key: HelloMessage, Value: "Привет, мир!"\n\n\nImplementação passo a passo da localização em um aplicativo de console
\n- \n
- 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. \n - Adicione strings: insira a chave
Greetinge o valorHello, user!. \n - Crie o arquivo para o idioma russo:
Strings.ru.resxcom a mesma chave e o valorПривет, пользователь!. \n - Escreva o código para definir a cultura e obter a string localizada: \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\nLocalização de aplicativos web ASP.NET Core
\nNo 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\n1. Configuração no Program.cs
\nusing 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 Também na biblioteca
Cheerio para JavaScript (Node.js): guia completo com exemplos
Geração de PDF em Rust: visão geral das bibliotecas e exemplos de código
Trabalho com XML em C++: bibliotecas PugiXML e RapidXML
Configuração de aplicações Rust: biblioteca `config` para configuração flexível
Trabalhando com Apache Kafka em C# (.NET): biblioteca Confluent.Kafka