Элементы управления пользователя не читают файлы ресурсов ... Правильно ли организовывать файлы ресурсов в WebForms .NET? - PullRequest
2 голосов
/ 24 августа 2011

Сейчас я работаю над проектом, в котором есть файлы aspx в корневой папке и одна папка с именем «UserControls», которая содержит все файлы ascx. Мне пришлось локализовать его, поэтому я использовал App_GlobalResources и App_LocalResources для файлов ресурсов. Однако у меня была проблема с пользовательскими элементами управления, потому что они не читают свои соответствующие файлы ресурсов. Я начал делать некоторые тесты и понял, что они читают файлы ресурсов только в том случае, если они помещены во вложенную папку App_LocalResources внутри соответствующей папки, а не в корневой папке. Поскольку у меня слишком много подкаталогов с пользовательскими элементами управления, я бы не хотел помещать каждый локальный файл ресурсов в его основную папку. Это просто не имеет смысла. У кого-нибудь есть идеи? Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 24 августа 2011

Не глядя на файлы вашего проекта, я бы предположил, что страницы, которые не читают свои ресурсы из корневой папки App_LocalResources, - это те, чье имя файла совпадает с другой страницей. Например. если у вас есть /cart/Default.aspx, а также /myaccount/Default.aspx, то ASP.NET не будет знать, какой из них соответствует /App_LocalResources/Default.aspx.resx. Вот почему требуется, чтобы файлы ресурсов этих страниц находились в своих собственных подпапках: чтобы было понятно, какой странице они соответствуют.

Я думаю, что если вы хотите избежать этого, у вас есть три варианта:

  1. Измените все на глобальные ресурсы. Это не так уж и плохо, если вы убедитесь, что имена ресурсов хорошо организованы, и очевидно, к какой странице они относятся.
  2. Измените имена файлов страниц, чтобы они были уникальными. Это довольно уродливо, так как это может нарушить перенаправления в приложении, а также в SEO.
  3. Не используйте ресурсы ASP.NET для локализации, сверните свое собственное решение. Серьезно, ресурсы - это одна из многих полезных, казалось бы, полезных функций в ASP.NET (см. Также «Темы», «Мобильная поддержка», «Роли»), которые, по моему опыту, плохо масштабируются для крупных проектов, и их лучше игнорировать в пользу пользовательских решений. , Например, что произойдет, если ваше приложение ASP.NET вызывает библиотеку DLL среднего уровня, которая должна возвращать локализованный текст? В этом случае гораздо лучше иметь собственную систему локализации ресурсов более низкого уровня.
0 голосов
/ 29 февраля 2012

Убедитесь, что каталог App_LocalResources находится в той же папке, что и usercontrol.

...