Загрузить ресурсы ".resx" из папки в Silverlight - PullRequest
2 голосов
/ 08 сентября 2010

У меня есть мультиязычное приложение, и клиент хочет редактировать файлы Resources.resx так, как он хочет. Я создал проект silverlight и добавил несколько файлов:

  1. Resources.resx
  2. Resources.en-US.resx1.
  3. Resources.uk-UA.resx2.

Все они имеют действие сборки "Embedded Resource"

Все работает, но эти файлы встроены в файл XAP. И клиент не может их редактировать.

Мой менеджер ресурсов у меня вот так:

   private static ResourceManager manager;
        public static ResourceManager Manager
        {
            get
            {
                if (manager == null)
                    manager =  new ResourceManager("Project.Resources", Assembly.GetExecutingAssembly());
                return manager;
            }
        }

Как я могу получить эти ресурсы из какой-то папки, а не собрать их в файл .xap ???

Ответы [ 2 ]

3 голосов
/ 08 сентября 2010

Поскольку это проблема только локализации строк, и вам просто нужна гибкость выбора всего набора локализованного контента, существует несколько способов привязки ваших строк к менеджеру ресурсов. Большинство из них слишком сложны для достижения желаемого результата :

Учитывая следующее:

  • Для большинства решений, которые я видел, требуется обязательное утверждение длиной около 80 символов для каждой записи .Сюда не входит умное использование конвертера.
  • В большинстве решений, которые я видел, каждая строка реализует свойство notify (это кажется огромными издержками для строк, которые почти никогда не меняются).
  • Локализация обычно делаетне требует мгновенного обновления (вы всегда можете обновить текущую страницу).

Гораздо более простой подход состоит в том, чтобы просто поместить ваши строки в виде пар имя-значение в глобальный словарь приложения и ссылаться на них черезshort / simple StaticResource привязка, например

Text={StaticResource L_MenuHome}

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

  • Поместите строки языков по умолчанию непосредственно в ваш App.xaml (это помогает в разработке, так как пропущенные ключи приведут к исключению).
  • Снимите любой новый выбранный язык со своего сервера через любой удобныйозначает (файл XML, файл XAML, CSV или из базы данных через веб-сервис)
  • Заменитьсловарные записи с недавно загруженными данными.Единственное, что вы должны сделать, это убедиться, что ключ уже присутствует, или вы должны добавить вместо него запись или установить ее.
  • Перезагрузить текущую страницу (вернуть их на домашнюю страницу после смены языка?)

Я не знаю, почему всем, кажется, нравятся действительно сложные решения, когда StaticResources отлично справляются со своей работой и требуют гораздо меньше усилий.Мы также склонны использовать веб-сервис для извлечения набора языковых строк из базы данных, так как обычно он меньше 200 КБ, а базы данных гораздо более гибкие для обновлений.

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

Надеюсь, это поможет.

2 голосов
/ 08 сентября 2010

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

Так как в вашем файле resx есть только строки, я бы посоветовал вам скопировать элементы ресурса в простой текст с некоторым предварительно заданным форматом и прочитать его оттуда.Дайте мне знать, если вам нужна помощь по каким-либо конкретным деталям реализации.

...