Как вы локализуете / интернационализируете контроллер MVC при использовании поставщика локализации на основе SQL? - PullRequest
2 голосов
/ 17 марта 2010

Надеюсь, это не слишком глупый вопрос.В MVC, по-видимому, есть много поддержки локализации в представлениях.Однако, как только я добираюсь до контроллера, он становится темным.

  • Использование meta: resourcekey = "blah" отсутствует, то же самое с <% $ Resources: PageTitle.Text%> .
  • ASP.NET MVC - Помощники локализации - предлагаемые расширения для вспомогательных классов Html, такие как Resource(this Controller controller, string expression, params object[] args).Точно так же Локализуйте ваш MVC с легкостью предложил немного другое расширение, как Localize(this System.Web.UI.UserControl control, string resourceKey, params object[] args)

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

    public static string Localize (System.Type theType, string resourceKey, params object[] args) {
         string resource = (HttpContext.GetLocalResourceObject(theType.FullName, resourceKey) ?? string.Empty).ToString();
         return mergeTokens(resource, args);
    }

Мысли?Комментарии?

Ответы [ 3 ]

3 голосов
/ 10 марта 2011

У меня был такой же вопрос . В этом посте были показаны различные способы решения проблемы: http://carrarini.blogspot.com/2010/08/localize-aspnet-mvc-2-dataannotations.html

В конце я использовал шаблон T4 для генерации класса ресурсов. У меня также есть метод HtmlHelper для доступа к моим ресурсам:

public static string TextFor(this HtmlHelper html, string resourceName, string globalResourceName, params object [] args)
{
    object text = HttpContext.GetGlobalResourceObject(globalResourceName, resourceName);
    return text != null ? string.Format(text.ToString(), args) : resourceName;
}

Другая версия генерирует локализованную версию из Controller и View:

public static string LocalTextFor(this HtmlHelper html, string resourceName, params object [] args)
{
    string localResourceName = string.Format("{0}.{1}", html.ViewContext.RouteData.Values["controller"],
                                                 html.ViewContext.RouteData.Values["action"]);
    object text = HttpContext.GetGlobalResourceObject(localResourceName, resourceName);
    return text != null ? string.Format(text.ToString(), args) : langName;
}
0 голосов
/ 17 марта 2010

Что вы хотите локализовать в вашем контроллере? Обычно локализуется только то, что показано пользователю. И то, что показано пользователю, должно быть внутри представления, поэтому вернемся к помощникам.

0 голосов
/ 17 марта 2010

Я использую строго типизированные ресурсы, используя PublicResXFileCodeGenerator в качестве Custom Tool (выбирается в свойствах файла .resx). Если у меня есть ресурс с именем «AreYouSure» и «Вы уверены?» значение, к нему можно обратиться, вызвав ResourceClass.AreYouSure, как в контроллере, так и в представлениях. Это работает довольно хорошо.

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