Ни одна из вышеперечисленных попыток полностью не ответила на мой вопрос.Итак, я потратил пару дней (которых я хотел избежать), читая о локализации в .Net, и вот что я собираюсь сделать.
Я написал крошечное консольное приложение, которое позволяет мне создавать собственную культуруна основе существующего и укажите новое CultureName, CultureEnglishName, CultureNativeName и зарегистрирует его на компьютере Windows.Это будет один из этапов настройки приложения.
public static void Main(string[] args)
{
string operation = args[0];
string newCultureName = args[1];
string sourceCultureName = args[2];
string newCultureDescriptiveName = args[3];
try
{
if (operation == "Register")
{
CultureAndRegionInfoBuilder crib = new CultureAndRegionInfoBuilder(newCultureName, CultureAndRegionModifiers.None);
crib.LoadDataFromCultureInfo(new CultureInfo(sourceCultureName));
crib.LoadDataFromRegionInfo(new RegionInfo(sourceCultureName));
crib.CultureEnglishName = newCultureDescriptiveName;
crib.CultureNativeName = newCultureDescriptiveName;
crib.Register();
}
else if (operation == "Unregister")
{
CultureAndRegionInfoBuilder.Unregister(newCultureName);
}
else
throw new ArgumentException("The only accepted values are: Register; Unregister", "operation");
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message);
}
catch (ArgumentException ex)
{
Console.WriteLine(ex.Message);
}
catch (Exception ex)
{
throw;
}
}
Например, я могу создать культуру под названием en-CA-Company, вызвав консольное приложение следующим образом:
consoleapp Register "en-CA-Company", "en-CA", "English (Canada) Company"
Требовалось задать описательное имя, поскольку свойства CultureEnglishName, CultureNativeName остались бы такими же, как в исходной культуре, что могло бы создать путаницу, когда, например, в Visual Studio вы выпадаете из списка языков для локализованной формы.и увидеть две записи "Английский (Канада)".Я не знаю, какое из свойств VS использует для отображения имени языка, поэтому я догадался о английском и родном имени.
Теперь, когда моя пользовательская культура зарегистрирована на компьютере, я вижу егов Visual Studio в поле Language
свойств формы при включении локализации Localizable = True
.
Когда я выбираю свою новую пользовательскую культуру, VS создаст отдельный файл ресурсов, который будет содержать все изменения, которые я делаю для любых ярлыков ... пока выбрана эта культура.
Комучтобы получить этот конкретный файл ресурсов (и строки в нем), я просто должен:
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-CA-Company");
где-нибудь, когда приложение инициализируется.