Как использовать файлы ресурсов форм Windows для локализации динамических данных - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть приложение, которое я разрабатываю и которое создано с помощью Window Forms.Для локализации всех моих ярлыков, ToolStripMenuItems, кнопок и т. Д. Я использую файлы ресурсов resx.Специально для локализации моего приложения на немецкий язык я открываю файл Main.en-CA.resx в winres.Затем я просматриваю все термины, найденные в форме, и меняю их на немецкий перевод.Затем я сохраняю файл в Main.de-DE.resx.Теперь у меня есть файл Main.en-CA.resx и файл Main.de-DE.resx.В моем коде мне нужно только изменить текущую культуру на тот язык, который я хочу, и применить изменение ко всем моим ярлыкам, элементам управления, кнопкам и т. Д. Например, что-то вроде этого:

        System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(language);

        // Must re-apply resources after changing the culture
        System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main));

        resources.ApplyResources(this, "$this");

        foreach (Control c in this.Controls)
        {
            resources.ApplyResources(c, c.Name);
        }

Это кажетсяотлично работает для всех ярлыков и т. д., которые не меняются.У меня, однако, есть записи, которые изменены.Например, у меня может быть выпадающий список ComboBox, который заполнен записями: «Apple», «Banana», «Orange».Или у меня могут быть некоторые сообщения об ошибках: «Отсутствует ввод», «Не удается найти файл XML», которые отображаются только иногда.Теперь я предполагаю, что, возможно, для сообщений об ошибках я мог бы просто иметь метки и выборочно изменять их видимость в зависимости от того, нужно ли их отображать, однако для выпадающего списка ComboBox эти записи могут изменяться в зависимости, скажем, от файла, который загружает пользователь.

Интересно, есть ли способ сохранить эти записи в файлах resx и затем получить к ним доступ из моего кода?Я попытался открыть файлы resx и добавить их вручную (т.е. без использования winres), но попытка сделать это привела к предупреждению:

Вы пытаетесь отредактировать файл ресурса, который является частью другого проектаэлемент (например, форма или элемент управления).Редактирование этого элемента может повредить элемент проекта, и вам придется восстановить его вручную.Кроме того, изменения, внесенные в этот файл ресурсов, могут быть потеряны, если в элемент проекта будут внесены дополнительные изменения.Вы действительно хотите отредактировать этот файл?

Это звучало как плохая идея, поэтому я больше не пробовал.Кроме того, я не уверен, каким образом я получу доступ к терминам в файле вручную.Я очень новичок в окнах форм и файлов ресурсов (я впервые их использую), поэтому я понимаю, что это может быть простой вопрос, но у меня возникли проблемы с поиском информации о том, как именно это сделать.

1 Ответ

0 голосов
/ 30 ноября 2018

Хорошо, как оказалось, я обнаружил, как я могу достичь того, что я ищу.Хорошо, из сообщения SO я могу получить доступ к любым строкам, хранящимся в файлах Resource.resx, с помощью кода:

myLabel.Text = Properties.Resources.MissingController;

, где MissingController - это ключ (то есть имя) в файле Resources.resx.

Поэтому все, что мне нужно сделать, это добавить дополнительные файлы ресурсов, такие как Resource.de-DE.resx в случае немецкого языка, и заполнить переводы (то есть значения в файле ресурсов), соответствующиете же ключи (то есть имена в файле ресурсов).

Файл Resources.resx выглядит следующим образом: enter image description here

, а файл Resources.de-DE.resx выглядит следующим образом: enter image description here

Как уже упоминалось в этом вопросе, я уже создал несколько файлов ресурсов для перевода моих форм, но я использовал winres.В то время как они были расположены в моем файле Main.cs [Design], ресурсы.resx и Resources.de-de.resx находятся в разделе Свойства.Поскольку я использовал winres для создания своих файлов resx, я думаю, это означало, что я не должен был редактировать их вручную, отсюда и предупреждение, которое он дал ??Я все еще не уверен на 100% в этом.

Несмотря на это, теперь я могу просто вручную добавить термины в мой файл Resource.resx, а также создать разные версии этого файла для разных языков, и локализация будет работать.Если щелкнуть правой кнопкой мыши «Свойства» и выбрать «Добавить» -> «Новый элемент», а затем выбрать «Ресурс», если вы не видите тип файла «Ресурс» в качестве параметра (как это случилось со мной), то это может означать, что вам нужно добавить инструменты разработки, которые не были получены.установлен с вашей версией Visual Studio.Вы можете добиться этого, просто снова запустив установщик Visual Studio и нажав кнопку Изменить и добавив инструменты разработки .NET.

enter image description here enter image description here

...