Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Локализация ресурсов


Автор: HalkaR 28.4.2008, 12:37
Такой вопрос. Можно ли как-то реализовать следующее: есть приложение. К нему имеется набор локализации. Причем локализация изменяется путем замены файла в папке приложения. Очень хотелось бы чтоб этот файл был текстовым, а не бинарным. Есть ли стандартные средства? Спасибо!

Автор: mr.DUDA 28.4.2008, 13:52
Стандартные средства - есть. Если нужно локализовать форму, просто ставь Localizable=true и меняй Culture на другой язык - автоматически создадутся ресурсные файлы (.resx) и всё что поменяется на форме, будет сохранено в resx-файл для текущей культуры. Если нужно локализовать строки - добавляем в проект Add new item / Resource File, забиваем туда строки (можно напрямую редактировать resx или в виде таблицы, в студии), добавляем ещё один Resource File с тем же именем и суффиксом перед .resx (например Resource1.ru.resx) переводим строки на другой язык.

Программно получить строку для текущей культуры можно через статические свойства одноимённого класса (имя ресурсного файла = имя класса, а имя строки в ресурсе = имени свойства класса, например Resource1.myString). 

Наконец, изменить во время выполнения приложения текущую культуру можно через свойство Thread.CurrentThread.CurrentUICulture или установив свойство Culture класса ресурса:
Код
            Resource1.Culture = CultureInfo.GetCultureInfo("ru");

//или

            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("ru");


.resx это обычный XML-файл вида:
Код
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
... тут объявление схемы и прочая фигня ...
-->
  <data name="String1" xml:space="preserve">
    <value>asdasd</value>
  </data>
</root>


Автор: HalkaR 28.4.2008, 15:32
mr.DUDA, это не совсем удобно для меня. Мне желательно иметь один общий файл со всеми локализованными строками и язык определяется не через код, а через файл лежащий в папке. Мне не надо распространять много языков вместе с приложением. Нужен только один. Причем язык должен определяться без перекомпиляции приложения.

Добавлено через 54 секунды
Про этот способ я естественно знаю, но он мне не очень удобен. + приложение на WPF.

Автор: mr.DUDA 28.4.2008, 15:36
При стандартной локализации, рядом с приложением будет лежать длл с тем же именем что у локализованного exe/dll и суффиксом .ru и т.п., хоть это и бинарный файл, конечно. Я так понимаю, такой вариант не катит.

Автор: HalkaR 28.4.2008, 15:38
Боюсь что нет. Можно конечно банально класть рядом с exe xml который будет читаться кастомным парсером.

Автор: HalkaR 28.4.2008, 17:22
Вопщем написал руками загрузку из resx файлов с помощью ResXResourceReader.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)