Что такое локализация в контексте разработки приложений?

«Что такое локализация в контексте разработки приложений?» — вопрос из категории ASP.NET Core, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

**Локализация (L10n)** — это процесс адаптации приложения для конкретных языков и культурных регионов. Это не просто перевод текста, а также корректное форматирование дат, чисел, валют, календарей и учёт других локальных соглашений. В **ASP.NET Core** локализация построена вокруг следующих ключевых компонентов: * **Файлы ресурсов (.resx):** XML-файлы, хранящие строки для разных культур (например, `Resources.fr-FR.resx` для французского). * **`IStringLocalizer` и `IHtmlLocalizer`:** Основные интерфейсы для извлечения локализованных строк в коде и представлениях. * **ПО промежуточного слоя (Middleware) для локализации:** Автоматически определяет и устанавливает культуру запроса. **Базовая настройка в `Program.cs`:** ```csharp builder.Services.AddLocalization(options => options.ResourcesPath = "Resources"); builder.Services.Configure(options => { var supportedCultures = new[] { "en-US", "fr-FR", "de-DE" }; options.SetDefaultCulture("en-US"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; // Стратегии определения культуры: из QueryString, Cookie, заголовка Accept-Language options.ApplyCurrentCultureToResponseHeaders = true; }); app.UseRequestLocalization(); ``` **Использование в классе:** ```csharp public class HomeController : Controller { private readonly IStringLocalizer _localizer; public HomeController(IStringLocalizer localizer) { _localizer = localizer; } public IActionResult Index() { ViewData["Greeting"] = _localizer["HelloWorld"]; return View(); } } ``` **Использование в представлении (Razor):** ```html @using Microsoft.AspNetCore.Mvc.Localization @inject IViewLocalizer Localizer

@Localizer["WelcomeHeader"]

@DateTime.Now.ToString("D")

``` **Ключевые различия:** * **`CultureInfo.CurrentCulture`** (Культура) — влияет на форматирование (даты, числа). * **`CultureInfo.CurrentUICulture`** (Культура интерфейса) — влияет на выбор файла ресурсов для строк. **Best Practice:** Всегда используйте интерфейсы локализации (`IStringLocalizer`), а не прямое обращение к `ResourceManager`. Это обеспечивает более гибкую архитектуру и упрощает тестирование.