Подтвердить что ты не робот

Лучшая практика локализации ASP.NET MVC?

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

4b9b3361

Ответ 1

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

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

Ответ 2

Существует хорошее решение для этого доступного здесь

В этой статье рассматриваются все аспекты локализации asp.net mvc app

Ответ 3

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

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

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

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

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

В соответствии с вашим требованием он должен отображать представление для вас.

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

/// <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 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; }
    }

Ответ 4

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/

Ответ 5

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

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

Ответ 6

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

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

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