Winform UserControl Свойство Описание Локализация по ResourceManager В PropertyGrid - PullRequest
0 голосов
/ 07 апреля 2020

Я создаю 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, показывающий правильное значение.

enter image description here

Я что-то упустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...