Я создаю windows usercontrol, пытающийся локализовать описание свойства в PropertyGrid во время разработки. Я фиксирую исходный код здесь https://github.com/oudiorg/WinControlLocalization, в проекте WinControlLocalization
я создаю usercontrol с именем UserControl1
, имеющий одно свойство с именем TextLocalization
и добавляю атрибут SRDescription
.
SRDescriptionAttribute
inherid DescriptionAttribute
и переопределить описание. в классе SR
есть ResourceManager
для получения ресурсов проекта, метод GetString
для получения ресурса в соответствии с текущей культурой. Я создаю Resources
и другие Культурные ресурсы Resources.en-US
и Resources.zh-CN
, в Ресурсах есть TextLocalization
с другим значением cluture.
Когда я перетаскиваю пользовательский элемент управления на Form1
и выбираю control, чтобы увидеть свойство элемента управления в PropertyGrid, оно всегда возвращает значение ресурса по умолчанию. Я принудительно добавил информацию о культуре в SR и Debug. Запишите ее значение, но оно возвращает значение по умолчанию (не спецификацию культуры c).
public sealed class SR
{
private static SR loader;
private ResourceManager resources;
public const string ControlTextLocalization = "TextLocalization";
public SR()
{
resources = new ResourceManager("WinControlLocalization.Properties.Resources", typeof(SR).Assembly);
}
private static SR GetLoader()
{
if (SR.loader == null) SR.loader = new SR();
return SR.loader;
}
public static ResourceManager Resources
{
get
{
return SR.GetLoader().resources;
}
}
public static string GetString(string name)
{
var culture=System.Globalization.CultureInfo.GetCultureInfo("zh-CN");
System.Diagnostics.Debug.WriteLine(string.Format("CultureName {0} {1}={2}", culture.Name, name, SR.Resources.GetString(name, culture)));
culture = System.Globalization.CultureInfo.GetCultureInfo("en-US");
System.Diagnostics.Debug.WriteLine(string.Format("CultureName {0} {1}={2}", culture.Name, name, SR.Resources.GetString(name, culture)));
return SR.Resources.GetString(name, System.Threading.Thread.CurrentThread.CurrentCulture);
}
}
Я загружаю ResX Resource Manager, показывающий правильное значение.
Я что-то упустил?