C #: Как привязать текст кнопки winforms к ресурсу - PullRequest
6 голосов
/ 24 августа 2009

У нас есть файл ресурсов с множеством переведенных строк, которые используются в разных местах нашего приложения. Есть ли лучший способ связать, например, текст кнопки с определенной строкой?

В настоящее время мы обычно просто делаем что-то подобное в конструкторе, в обработчике события Load или в методе, вызываемом одним из них:

someButton.Text = CommonTexts.SomeString;
someMenuItem.Text = CommonTexts.SomeOtherString;

Есть ли лучший способ сделать это? Может в дизайнере? Или это рекомендуемый способ сделать это?


Просто чтобы вы знали, как мы выполняем настоящий перевод: у нас есть один проект библиотеки классов, который содержит только файлы resx. Основные файлы resx написаны на английском языке (конечно). Затем мы открываем эти базовые файлы resx в приложении под названием ResEx , где мы (или кто-то еще) выполняем перевод на другие языки. При компиляции Visual Studio автоматически создает сборки для каждого языка, которые используются автоматически в зависимости от текущего набора культур. Это работает довольно хорошо, поэтому мне не нужна информация о том, как сделать перевод и тому подобное (хотя мне всегда любопытно, конечно, улучшения). Я спрашиваю, есть ли лучший способ получить эти переведенные строки из сборки ресурса во все различные свойства Text.

Ответы [ 6 ]

3 голосов
/ 28 марта 2013

Я понимаю, это старый вопрос, но, тем не менее, у меня была такая же проблема (VS 2010), и одна из первых ссылок в Google - эта тема.

Чтобы переместить все тексты в файл ресурсов форм - необходимо установить для свойства winform Localizable значение True. И это все. :) (в) Кап. О.

3 голосов
/ 24 августа 2009

Вы можете сделать:

using System.Resources;
using System.Reflection;

Assembly assembly = this.GetType().Assembly;
resman = new ResourceManager("StringResources.Strings", assembly);
btnButton.Text = resman.GetString("ButtonName");
1 голос
/ 16 июня 2012

Это извлечет значение ключевого слова Home и заполнит поле Text1.

Text1.Text= Resource.Home.ToString();
1 голос
/ 24 августа 2009

Существует хороший инструмент под названием LingoBit Localizer , который выполняет работу за долю времени, которое потребуется для создания всех файлов ресурсов.

Вам не нужно заботиться о других языках в процессе разработки, вы просто программируете и устанавливаете свойства, как если бы вы программировали для одноязычного программного обеспечения. После того, как вы закончите или когда захотите, вы запустите LingoBit Localizer через приложение DLL или приложение Windows Form. Это выведет отображаемые пользователем строки в сетку для вас в своем графическом интерфейсе. Теперь, возможно, профессиональный переводчик мог бы использовать для перевода слов, если ваши программисты не знают язык, на который должно быть переведено приложение. Затем вы просто сохраняете проект, когда закончите. Это создаст файл DLL, который вы просто добавите в бинарный каталог развертывания, после чего ваше приложение автоматически установит правильный язык в зависимости от текущей информации о культуре, в которой находится приложение. установлен или около того. Это экономит много времени на программирование и головные боли.

Надеюсь, это поможет, даже если это решение не на основе ресурсов.

0 голосов
/ 24 августа 2009

Попробуйте это:

someButton.DataBindings.Add ("Текст", CommonTexts, "SomeString");

0 голосов
/ 24 августа 2009

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

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

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