Многоязычный проект класса asp.net - PullRequest
1 голос
/ 02 ноября 2010

У меня есть несколько проектов в решении Visual Studio 2010. Это структура:

alt text

В проекте WebSite под названием TerapiaFisica я использую localResources для поддержки мультиязычности, и это нормально.
Моя проблема в папке ModelosEF, где у меня есть несколько проектов entityFramework.
Вот именно моя проблема:

public void ModificarProducto(Dictionary<string, string> valores)
    {
        #region Obtencion de Datos y Validaciones de estos
        int productoID;
        try
        {
            productoID = Convert.ToInt32(valores["ProductoID"]);
        }
        catch (Exception)
        {
            throw new Exception("Debe seleccionarse una Categoría válida.");
        }

В этом методе я использую простой испанский в исключении, мне нужен способ изменить этот текст на английский максимально простым способом, если для lang установлено EN (Productos.aspx? Lang = EN). * Как я могу это сделать? Как я могу узнать, какой язык используется на Веб-сайте, чтобы я мог использовать соответствующий язык в классе ModeloInventarioLogica.cs? Должен ли я отправить текущую культуру по параметру, чтобы узнать, что это? и если да, то как я могу использовать Visual C #, чтобы выбрать соответствующий текст на языке откуда?
Множество вопросов, но только одно, сделайте мультиязычный проект класса!
Большое спасибо.

Ответы [ 3 ]

2 голосов
/ 02 ноября 2010

В вашей функции C # следующая переменная exceptionMessage :

string exceptionMessage = ResourcesNameSpace.ResourceFileName.strYouMustSelectAValidCategory;

может принимать правильное значение (текст на испанском или английском языке), если у вас есть ключ "strYouMustSelectAValidCategory" в обоих файлах ResourceFileName.resx и ResourceFileName.en-US.resx.

Итак, вы можете написать:

throw new Exception(exceptionMessage);

Приложение будет "знать" текущую культуру во время выполнения :)

Чтобы установить текущую культуру в вашем приложении, вы можете использовать, скажем, кнопку ссылки с выделенным кодом:

// Changes the CurrentUICulture of the current thread:
Thread.CurrentThread.CurrentUICulture = new CultureInfo( "en-US", false );

(источник: http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.currentuiculture.aspx)


Чтобы добавить файлы ресурсов в проект, вы можете щелкнуть правой кнопкой мыши значок вашего проекта (ModeloInventario), выбрать «Добавить новый элемент», выберите «Файл ресурсов» и введите имя для своего файла (я использую vs2008, надеюсь, он не слишком отличается!).

Ваш файл ресурсов по умолчанию может называться: MIResources.resx

Затем добавьте еще один и назовите его: MIResources.en-US.resx , для английского ... MIResources.fr для французского ... И так далее , один файл для каждого дополнительного языка, который вы хотите (коды языков здесь: http://msdn.microsoft.com/en-us/library/ms533052%28VS.85%29.aspx).

Файл ресурсов по умолчанию - это место по умолчанию, в котором выполняется поиск значения, когда элемент отсутствует в текущем файле ресурсов культуры или когда для текущей культуры нет файла ресурсов.

Затем вы начинаете с добавления ключей и значений в файл ресурсов по умолчанию (strYouMustSelectAValidCategory: Debe seleccionarse una Categoryoría válida.), и затем добавьте те же ключи в MIResources.en-US.resx с переходом (strYouMustSelectAValidCategory: вы должны выбрать валидную категорию.) ... Итак, одни и те же ключи, разные значения.

После всего этого вы можете получить значение ключа (строки) в любом месте приложения, используя:

string str = ResourcesNameSpace.MIResources.strYouMustSelectAValidCategory;

ResourcesNameSpace - это пространство имен, которое создается с файлом ресурсов, если оно есть! Вы можете проверить его или отредактировать в выделенном фрагменте файла ресурсов по умолчанию ... Если его нет, вам не нужно его использовать (если вы попадете в свою MIResources.strYouMustSelectAValidCategory).

2 голосов
/ 02 ноября 2010

Как упоминалось в других ответах, вы можете использовать ResourceManager, чтобы получить надлежащим образом локализованную строку для отображения.Чтобы ответить на ваш другой вопрос ... ASP.NET выберет текущую предпочтительную культуру, отправляемую браузером в заголовке Accept-Language.Например, мой браузер отправляет:

Accept-Language: en-ca, en-us; q = 0,7, en; q = 0,3

Использовать канадский английский, если доступен, в противном случае откат к СШААнглийский, потом английский.(Это могут быть также турецкий, французский, зулусский, а затем английский.) Это резервное поведение указывается в настройках вашего браузера.В FireFox Параметры ... Содержимое ... Языки ... Выбрать ...

Как я уже говорил, ASP.NET автоматически определяет этот выбор и устанавливает текущую культуру (и культуру пользовательского интерфейса) обработки запросанить соответственно.Проблема, которую вы должны рассмотреть, состоит в том, что, если вы хотите предоставить опцию на вашем сайте для переключения между языками?Вы, вероятно, не хотите заставлять пользователей менять язык по умолчанию для своего браузера.Вам необходимо предоставить кнопку, раскрывающийся список или другой механизм, который позволит вашему пользователю выбрать язык.Затем вам нужно сохранить этот выбор в файле cookie, в строке запроса, в скрытой переменной формы или в другом месте, чтобы его можно было установить в начале каждого запроса.

Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedCulture, false);
1 голос
/ 02 ноября 2010

Используйте ResourceManager , чтобы получить строку из XML-файла ресурса.

...