Примеры Delphi и C# из жизни

Примеры программирования на языках Delphi, C#

 




Определение доступных локализаций .NET | C#

Как известно, локализация в. NET программах реализуется очень просто. Фактически, чтобы программа могла получить доступ к локализованным значениям для какого-то языка, должны быть доступны так называемые сателлитные сборки (satellite assemblies), которые содержат только локализованные данные и не содержат кода. Эти сборки располагаются в подпапках с именами соответсвующих культур (в народе, языков локализации) - ru для русской, uk - для украинской, fr - для французской. Сборки такого типа называются нейтральными, так как содержат данные без специфики конкретного языка страны. Сборки вида ru-RU(русский-Россия), en-US(английский-Америка) - указывают на конкретный язык снутри страны.

Но, поскольку, такая сборка просто файл в каталоге, то его можно по ошибке удалить. А программа будет пытаться честно установить не существующий уже язык. Правда, если все реализовано корректно, будет просто установлена культура по умолчанию и приложение продолжит работу.

Вариант нахождения доступных приложению локализаций привожу ниже:
Assembly assembly;
List cultures; // здесь будут строки названий культур
// перебираем поддерживаемые системой нейтральные культуры (к примеру)
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.NeutralCultures)){ 
 try {
 //если соответствующая культура не найдена, выбрасывается исключение, которое мы просто игнорируем
 assembly = Assembly.GetExecutingAssembly().GetSatelliteAssembly(ci);
 // собираем строки названий вида русский(ru)
 cultures.Add(ci.NativeName + "(> + ci.TwoLetterISOLanguageName+")");
 }
 catch (Exception){ } 
}