Существуют ли рекомендации по организации нестроковых ресурсов для локализации приложений .net? - PullRequest
2 голосов
/ 04 августа 2011

Предположим,

My.dll 
- Resources
  - MyResources.resx
    embeds MyFile.ext with key MyFile
  - MyResources.de.resx
    should embed MyFile.de.ext with key MyFile

Я пытался использовать поисковые системы, но безрезультатно.

Я считаю, что если оба файла resx не находятся в одной папке, весь механизм переключения культур по какой-то причине не работает. Так что это убило мою идею иметь подпапку с именем de, содержащую resX и все связанные ресурсы.

My.dll
- Resources
  - MyResources.resx
  - MyResources.de.resx
  - en-US
    - all en-US non-string resources
  - de
    - all de non-string resources

Для версии de я копирую и вставляю нейтральную (en-US) версию. Затем я должен вручную удалить en-US [Res], добавить de [Res] и затем переименовать для каждого нестрокового ресурса (например, изображения, CSV или другие файлы)

Это как это должно быть сделано?

1 Ответ

1 голос
/ 04 августа 2011

Я считаю, что если оба файла resx не находятся в одной папке, механизм переключения культур не работает по какой-то причине. Чтобы убил мою идею иметь подпапку под названием de, содержащую resX и все связанные ресурсы.

Это верно. Это связано с тем, что при перемещении файла .RESX в другую папку VS автоматически создает имя пространства имен для сгенерированного класса .resx в виде полного пути к файлу .RESX. То есть если LocResources.resx находится в папке $ PROJECT $ \ MyResources \ de \, то автоматически сгенерированным полным именем класса будет $ PROJECT_BASE_NAMESPACE $ .MyResources.de.LocResources.

Ключ 1 здесь заключается в том, что имя встроенного ресурса для каждого .RESX будет равно его полному имени типа кода после + ".resources".

Ключ 2 здесь заключается в том, что при использовании локализации на основе спутниковых сборок (по умолчанию) ResourceManager загружает ресурсы по своему (статическому) полному имени, но из разных спутниковых сборок для каждого языка.

Таким образом, если вы переместите xxx.de.resx из папки, в которой хранятся все .RESX, пространство имен (и встроенный ресурс имя ) для этого ресурса будет изменено, и ResourceManager не найдет его в спутниковая сборка.

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