2009-08-24 2 views
6

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

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

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

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


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

+0

Re: Редактировать: Вопрос счетчика: почему вы не используете стандартную систему FormLoad? Он встроен и невидим. –

+1

Потому что мне было интересно, есть ли лучший способ. – Svish

ответ

3

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

using System.Resources; 
using System.Reflection; 

Assembly assembly = this.GetType().Assembly; 
resman = new ResourceManager("StringResources.Strings", assembly); 
btnButton.Text = resman.GetString("ButtonName"); 
+3

Это было бы так же, как я уже это делал, кроме гораздо более сложного: p – Svish

+0

@Thomas: Я не думаю, что плакат означал привязку, как в «привязке данных». – MusiGenesis

+0

В VS2008 (и, вероятно, 2005) менеджер ресурсов по умолчанию, который вы получаете от добавления файла ресурсов в свой проект, выдает свойства, названные по ключевому значению, так что это будет просто «btnButton.Text = resman.ButtonName», экономя заботы о опечатках в Струна. –

0

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

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

0

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

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

1

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

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

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

+0

Это разумный подход к этой проблеме. Если бы они поддерживали португальский язык ... – MusiGenesis

+0

Вы также можете использовать VisualLocalize. Мы используем этот инструмент очень часто. Здесь вы можете проверить все ваши диалоги, если переведенный текст вписывается в элементы управления, и если вы не можете изменить размер элемента управления только на этом языке, а новые размеры будут храниться в стороне от локализованного текста в сборке сателлитов. – PVitt

1

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

Text1.Text= Resource.Home.ToString(); 
3

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

Для того, чтобы переместить все тексты в файл ресурсов формы - вам необходимо установить для свойства winform Localizable значение True. Вот и все. :) (c) Крышка. O.

Смежные вопросы