2012-06-05 1 views
1

Я работаю над веб-приложением .NET 4.0 MVC3. Приложение написано на английском языке и позволяет пользователям заполнять информацию о разных регионах. Для простоты предположим, что у нас есть два региона: Соединенные Штаты Америки и Западная Европа.Как реализовать пользовательский поставщик ресурсов, зависящий от разных критериев, чем культура пользовательского интерфейса?

Теперь в представлении я представляю строку, скажем, открытия проекта, но если пользователь работает на области США Я хотел бы, чтобы прочитать начало проекта.

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

Есть ли у кого-нибудь рецепт, как достичь того, чего я хочу?

Было бы также приятно, если в будущем я мог бы его прочитать, например. ExtendedDisplayAttribute(string displayName, int regionId) размещены над свойствами моих ViewModels.

EDIT

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

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

Я также не хочу использовать System.Resources.ResXResourceReader, потому что он относится к System.Windows.Forms.dll и является веб-приложением.

+0

Так как вы будете знать, следует ли использовать в США или Западной Европе, если это не зависит на культуре пользовательского интерфейса человека, смотрящего на него. Выберите культуру на сайте или это будет атрибут проекта? –

+0

Информация о регионе будет доступна в контроллере на основе URL-адреса. Имейте в виду, что я не хочу рассматривать это как часть моего ViewModel. –

+0

Я обновил свой вопрос –

ответ

0

На всякий случай кто-то хочет сделать то же самое в будущем. Эта статья оказалась очень полезной: http://www.jelovic.com/articles/resources_in_visual_studio.htm

Кусок кода, который я использую (VB) является:

<Extension()> 
Public Function Resource(Of TModel)(ByVal htmlHelper As HtmlHelper(Of TModel), resourceKey As String) As MvcHtmlString 
    Dim regionLocator As IRegionLocator = DependencyResolver.Current.GetService(GetType(IRegionLocator)) 

    Dim resources = New List(Of String) 
    If Not String.IsNullOrEmpty(regionLocator.RegionName) Then 
     resources.Add(String.Format("Website.Resources.{0}", regionLocator.RegionName)) 
    End If 
    resources.Add("Website.Resources") 

    Dim value = String.Empty 
    For Each r In resources 
     Dim rManager = New System.Resources.ResourceManager(r, System.Reflection.Assembly.GetExecutingAssembly()) 
     rManager.IgnoreCase = True 

     Try 
      value = rManager.GetString(resourceKey) 
      If Not String.IsNullOrEmpty(value) Then 
       Exit For 
      End If 
     Catch 

     End Try 
    Next 

    Return New MvcHtmlString(value) 
End Function 
Смежные вопросы