Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Ресурсы приложения


Автор: makaka 19.7.2011, 22:07
Всем привет

Встала необходимость забить в приложение много строк для пользовательского интерфейса. Делаю приложение Silverlight - там есть возможность вставлять файлы .resx
В файлах есть возможность вставлять пары ключ-значение
Для извлечения значения нужно в коде прописывать ключ... При этом сам ключ нельзя использовать в качестве значения...

к сожалению это не всегда подходит. У меня есть необходимость вбить названия валют и их кодировки:
"rur" - "российский рубль"
"eur" - "евро"
и т.д.
Всего около 100шт.
Сохранять эти значения и ключи в .resx, потом писать в коде сто строк на каждую валюту в отдельности - маразм...
Очевидно, что необходимо хранить эти строки так, чтобы можно было пройтись по ним foreach, вытаскивая две строки - ключ(rur) и значение(российский рубль)


Как цивилизованно сохранять пары типа ("rur" - "российский рубль"), чтобы можно было использовать в пользовательском интерфейсе и ключ, и значение?

Автор: AlexNagits 19.7.2011, 22:36
Dictionary<string, string> не подойдет?
Сохранение: сериализация
Можно "пройтись по ним foreach"

Автор: makaka 20.7.2011, 11:33
Цитата(AlexNagits @  19.7.2011,  22:36 Найти цитируемый пост)
Dictionary<string, string> не подойдет?
Сохранение: сериализация
Можно "пройтись по ним foreach"


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

Еще нужно иметь инфраструктуру, которая будет эти данные считывать. Для .resx VS2010 сама генерирует весь код. Вручную делать не хочется.

Но к сожалению если в .resx забить пару ("rur" - "российский рубль"), то будет сгенерирован метод аля  ApplicationStrings.get_rur(), который будет возвращать "российский рубль".
А мне нужно использовать в интерфейсе не только "российский рубль", но и "rur"...

Автор: gambit 20.7.2011, 12:08
Сериализуй в xml.
Да да, дикшенери на прямую не сериализуется в xml, но пути есть всегда, буквально на днях видел дикшенери который сериализовался

Автор: jonie 20.7.2011, 12:15
Цитата(makaka @  20.7.2011,  12:33 Найти цитируемый пост)

Но к сожалению если в .resx забить пару ("rur" - "российский рубль"), то будет сгенерирован метод аля  ApplicationStrings.get_rur(), который будет возвращать "российский рубль".

ну потому что это две разные строки одна длинное название, второе - короткое.

Локализация методами сателиных сборок достаточно удобна.... чем она вам не нравится? Если вы взглянете внутрь ApplicationStrings.get_rur() то там просто вызывается ResourceManager с передачей ему строки-ключа.... Ну и "пройтись" тоже можно как по коллекции - посмотрите его методы

Автор: eugene123 2.8.2011, 17:18
Цитата(makaka @  20.7.2011,  11:33 Найти цитируемый пост)
Вручную делать не хочется

как правило, то что сделано вручную более подходит для конкретной задачи

создай простой xml файл со своими данными и читай его при старте в словарь

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