dll строкового ресурса для конкретной культуры не работает в .net compact framework, если приложение установлено с использованием cab-файла - PullRequest
3 голосов
/ 12 января 2011

Я создал приложение с локализацией, используя Visual Studio 2008 и .net compact Framework 3.5 на Windows Mobile 6.1.Чтобы добиться локализации, я использовал для этого много файлов ресурсов, по одному для каждого языка:

StringResources.de-DE.resx

StringResources.es-ES.resx

StringResources.en-GB.resx

StringResources.fr-FR.resx

StringResources.nl-NL.resx

У меня также есть файл StringResources.resx со строками по умолчаниюв качестве запасного варианта, если выбрана другая культура, не поддерживаемая моим приложением.

Я также создал CAB-файл, используя «SmartDeviceCabProject» (тип vdproj), чтобы выполнить установку этого приложения на устройстве. (используется msdn.microsoft.com/en-us/library/aa446504.aspx)

Вот проблема, с которой я сталкиваюсь: Когда я меняю культурук чему-либо, кроме nl-NL, я всегда получаю строки по умолчанию.

Обратите также внимание, что при копировании и вставке папки «bin» приложения в устройство видны все строки культуры.Проблема возникает только в том случае, если приложение установлено через файл cab.

Также, если я удаляю файл StringResources.nl-NL.resx и у него есть только

StringResources.de-DE.resx

StringResources.es-ES.resx

StringResources.en-GB.resx

StringResources.fr-FR.resx

в качестве культурыконкретные ресурсы и воссоздать cab-файл, теперь я вижу, что когда я изменяю культуру на что-либо, кроме fr-FR, я всегда получаю строки по умолчанию.Таким образом, всегда действует только последний файл культуры.

Просто чтобы убедиться, что я обнаружил библиотеки dll, которые были установлены в каждой из папок культуры, через файл cab на устройстве: de-DE \ Application.StringResources.dll

es-ES \ Application.StringResources.dll

en-GB \ Application.StringResources.dll

fr-FR \ Application.StringResources.dll

nl-NL \ Application.StringResources.dll

Странно, но я обнаружил, что все библиотеки одинаковые.Однако, если я различаю dll, присутствующие в папке «bin», они оказываются разными.

Таким образом, я считаю, что сборка файла .cab вызывает копирование одной и той же DLL в каждую папку..

С учетом вышеприведенного объяснения, пожалуйста, помогите мне:

** 1.Что я делаю, чтобы заставить cab-файл устанавливать правильные библиотеки DLL в папки?

  1. Есть ли другой способ разместить правильные dll?

  2. Есть ли другой способ добиться локализации? **

1 Ответ

6 голосов
/ 13 января 2011

Эта проблема зарегистрирована как ошибка в WizCab.exe: CAB-проект Smart Device содержит неверные локализованные ресурсы .

Я обнаружил, что наилучшим способом решения этой проблемы является:

  1. Добавление событий после сборки в проекты с локализованными ресурсами, которые копируют файлы ресурсов в уникальные (file) names:

    copy "$ (TargetDir) sv \ $ (TargetName) .resources.dll" "$ (TargetDir) sv \ sv _ $ (TargetName) .resources.dll"

    для каждого существующего языка.

  2. выполнить сборку и перезаписать эти уникальные файлы ресурсов пустым файлом - в противном случае графический интерфейс Visual Studio не позволит вам переименовать (шаг 4) добавленные файлы.

  3. Добавьте скопированные локализованные сборки в виде файлов (вместо этого щелкните правой кнопкой мыши на .cab-project и выберите «Просмотр» -> «Файловая система») в разделе «Папка приложения» вместо правильных папок локализации.использования ссылок на вывод проекта.

  4. Переименуйте добавленные сборки в «Представлении файловой системы» обратно к их исходным именам («YourProject.resources.dll».)

Не очень приятно, но это работает.

...