Лучшая практика локализации ASP.NET MVC? - PullRequest
18 голосов
/ 19 декабря 2008

Мне нужна помощь с лучшими практиками для локализации приложений asp mvc, Я видел в Oxite базовый метод с именем Localize в BaseController, но является ли локализация задачей для представления или контроллера? Или я должен использовать файлы resx / или использовать таблицы БД?

Ответы [ 6 ]

14 голосов
/ 19 декабря 2008

Создайте свой собственный помощник Html и используйте его как <%= Html.Resource("Name") %>

Подробности в блоге пост.

10 голосов
/ 23 февраля 2010

Для этого есть хорошее решение здесь

эта статья охватывает все аспекты локализации приложения asp.net mvc

4 голосов
/ 17 октября 2012

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

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

Второй я считаю Satelite Assemblies. Он также похож на Resource, но он дает свободу редактировать сборки снаружи и помещать обратно в папку bin. Это также требует много усилий для клиента / разработчика.

В-третьих, я рассмотрел хранение в БД. Этот подход хорош, и у нас есть некоторый механизм для чтения данных с сервера. Это требует единовременных усилий, а у клиента нет надежного.

Я переопределяю пользовательский DisplayNameAttributre, и из конструктора я передам DB и получу данные для рендеринга

По вашему требованию он должен отображать вид для вас.

Диспетчер ресурсов

/// <summary>
    ///  Extended display attribute which will handles the request
    ///  It will call every time when the property is rendered (return View() - from controller)
    /// </summary>
    public class ResourceManagerAttribute : DisplayNameAttribute
    {
        public ResourceManagerAttribute(string resourceKey, string resourceNameSpace = "")
            : base(GetDisplayName(resourceKey, resourceNameSpace))
        { }

        private static string GetDisplayName(string resourceKey, string resourceNameSpace = "")
        {
            // get the browser's prefered language.

            string browserLanguage = HttpContext.Current.Request.UserLanguages.First();

            // Get the locale data for that property and displays.
            switch (browserLanguage)
            {
                case "en-US": return "Eng " + resourceKey;
             // calls db based on resource key
                case "hi": return "Hin " + resourceKey;

            }
            return "-- Not Implemented Now -- ";
        }

ViewModel

public class HomeViewModel
    {
        //calls the resource
        [ResourceManager("MID")]
        public int MID { get; set; }
        [ResourceManager("Name")]
        public string Name { get; set; }
        [ResourceManager("Addess")]
        public string Addess { get; set; }
    }
3 голосов
/ 25 февраля 2011

MVC действительно больше об использовании правильного представления для правильной работы. Помещение всего в файл ресурса чрезвычайно полезно. Полезно использовать файлы ресурсов для небольших вещей, но для больших страниц, таких как страницы описания, лучше иметь представление в каждой культуре с большим количеством контента. Например, используя следующую структуру: ~ / Views / EN-US / Главная / index.aspx ~ / Views / PT-BR / Главная / index.aspx или эта структура: ~ / Views / Home / Index.en-US.aspx ~ / Views / Home / Index.en-US.aspx

Прочтите блог, как это сделать: http://blog.oimae.com/2011/02/20/cultured-view-engine-for-mvc/

0 голосов
/ 21 февраля 2013

Я бы лучше пошел для создания собственного MetadataProvider и использования соглашения для моделей. Что-то вроде 1 файла ресурсов по пространству имен модели и соглашению типа ModelName.PropertyName -> value

Для валидаторов, общих кнопок и т. Д. Файла ресурсов.

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

0 голосов
/ 20 декабря 2008

Если локализуемая строка генерируется представлением (например, меткой перед текстовым полем), то ее локализация должна быть в представлении.

Если строка сгенерирована Контроллером, там должна быть и ее локализация.

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