Понимание того, как локализовать ресурсы - PullRequest
12 голосов
/ 19 мая 2011

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

MyResources.ResourceManager.GetString(name + "IdentString");

, теперь я искал способ хранения дополнительных языков.Ресурсы обернуты в провайдера (в настоящее время около двенадцати провайдеров, но это количество будет расти в будущем), используемого приложением ASP.Net MVC (без представления!)

Насколько я знаю, естьдва способа архивировать это:

  • Спутниковая сборка для каждого языка, содержащего ресурс
  • Файловый ResourceManager, где у каждого языка есть свой собственный двоичный файл ресурсов

И, насколько я понимаю, я должен использовать внешние инструменты в обоих сценариях и либо должен связать некоторые спутниковые сборки с ресурсом источника (каждый для одного языка), которые автоматически загружаются менеджером ресурсов, либо у меня естьиспользовать FilebasedResourceManager , который загружает файл ресурсов (двоичная версия для каждого языка) из внешнего местоположения.Это означает, что в обоих случаях только исходный ресурс встраивается в проект, а остальные просто присоединены в некотором роде.Правильно ли я понял или я совершенно не прав?

Некоторая дополнительная информация

Нет необходимости говорить, что я понятия не имею, какую из них взять или какони действительно работают или если есть даже другие способы.Когда я начал искать это, я подумал о том, чтобы просто присвоить имя файлу ресурса после соглашения, подобного fr-resource.resx или de-resource.resx, чтобы менеджер ресурсов мог взять культуру потока или данную и попытаться извлечь строку из этого ресурса илиоткат к дефолту.Но я нашел кое-что о спутниках (которые просто напоминают мне чертову песню), которые должны быть зарегистрированы на web.config, но должны быть собраны только внешними инструментами ...

1 Ответ

10 голосов
/ 19 мая 2011

Вы на правильном пути, переименовывая файлы resx в соответствии с культурой. Однако вы бы назвали их так:

  • resources.resx (Это будет запасной вариант по умолчанию.)
  • resources.de.resx (Это будут культурные нейтральные немецкие ресурсы.)

Если вы поместите эти файлы рядом с resx по умолчанию и включите их в проект, то компилятор позаботится о создании сборок спутника, а менеджер ресурсов позаботится о их поиске.

Сборки спутника будут помещены в подпапку с названием культуры. Так что если у вас есть \myApp.exe в качестве вывода, вы также получите \de\myApp.resources.dll

Вам не нужно будет что-то делать, чтобы связать эти файлы с исходной сборкой. Если вы «забудете» предоставить эти сборки спутников, ваше приложение просто не будет иметь немецких ресурсов и вернется к значению по умолчанию.

...