Локализация ресурсов изображений в Windows Forms - PullRequest
4 голосов
/ 05 декабря 2011

Я использую C # 3.5 и Windows Forms Telerik * , если это имеет значение). Как получить кнопку для использования трех разных картинок (одна для режима ожидания, одна для наведения мыши и одна для нажатия) на трех (или N ..) разных языках?

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

Теперь вопрос: Как я могу изменить изображение кнопки на каждом языке на правильное изображение, если я не могу дать им одно и то же имя (например, a.jpg в resource.resx, a.jpg в resources-foo.resx и т. Д.)

Я не думаю, что реально проверить в коде текущую культуру, а затем с помощью имен ресурсов изображений в OnMouseEnter / Leaves / Down реализовать переключение между тремя картинками.

Поскольку в среднем приложении более 100 кнопок, должен быть простой и легкий способ сделать это, о котором я просто не могу придумать (или найти ...) ...

Ответы [ 2 ]

3 голосов
/ 06 декабря 2011

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

Visual Studio позволяет легко добавлять изображения в файл ресурсов. Редактор ресурсов имеет кнопку в верхнем левом углу (см. Ниже), которая позволяет просматривать различные типы ресурсов, содержащихся в файле resx, которые могут быть строками (наиболее распространенный выбор, с которыми большинство из нас знакомо), изображениями и больше.

enter image description here

Эта ссылка MSDN объясняет все это. Вот один пример, который я взял из него и который показывает, как получить локализованное изображение из ваших ресурсов:

rm = new ResourceManager("Images", this.GetType().Assembly);
pictureBox1.Image = (System.Drawing.Image)rm.GetObject("flag");
0 голосов
/ 05 декабря 2011

Я бы использовал файлы ресурсов. Они работают примерно так: «если вы используете этот язык, загрузите« Button1A.jpg », если вы используете другой язык, загрузите« Button1B.jpg »и т. Д. Я не уверен в синтаксисе или в том, как их реализовать, но я Я уверен, что вы можете указать язык / локаль где-нибудь (или, возможно, он будет указан для вас в зависимости от настроек Windows), и вы просто предоставите, какое изображение использовать, когда это будет, и он сделает все остальное за вас.

Определенно ищите файлы ресурсов.

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

Надеюсь, я понял, извините, что не привел пример.

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