Как вы обрабатываете интернационализацию статического списка в asp.net mvc? - PullRequest
0 голосов
/ 13 июля 2011

Скажем, я хочу, чтобы мое приложение было полностью интернационализировано ... и пользователь должен выбирать из списка (раскрывающийся список) стран в форме ...

Страны не являются (в настоящее время) таблицейв моей базе данных, но я хочу изменить это, хотя я не уверен, что это лучшая идея.

например, в испанской Германии это Alemania.

многие страны имеют разные названия, так что это должно бытьна разных языках.

Как я могу это сделать?пожалуйста, помогите.

отредактируйте для уточнения:

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

  • Пользователь, которыйРодившийся в Германии и использующий приложение на английском языке, выберет Германию из выпадающего списка

  • Пользователь, родившийся в Германии и использующий приложение на испанском языке, выберет Alemania из выпадающего списка.

Переключатель языка работает просто отлично.Любой пользователь может выбрать любой язык для отображения приложения, и он будет сохранен в URL.

Ответы [ 2 ]

1 голос
/ 14 июля 2011

Чтобы получить список стран, более или менее поддерживаемых .Net, вы можете использовать CultureInfo и RegionInfo следующим образом:

List<RegionInfo> allRegions = new List<RegionInfo>();
var specificCultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
foreach (CultureInfo culture in specificCultures)
{
    var info = new RegionInfo(culture.LCID);
    allRegions.Add(info);
}

Это даст вам все страны, некоторые из них несколько раз (поскольку разныеиспользуются языки).

RegionInfo имеет несколько интересных свойств:

  • NativeName, что даст вам переведенное название страны, но, к сожалению, одно, соответствующее данному идентификатору локали (LCID)«Польша» для Польши, «Германия» для Германии и т. д .;некоторые будут переведены на несколько языков (это интересно, потому что США видны как Соединенные Штаты и как Estados Unidos)
  • DisplayName что должно быть тем, что вы ищете, но, к сожалению, нет - Microsoft "забыла"чтобы перевести его в .Net Framework (возможно, все в порядке, потому что тогда это не должно быть свойство)
  • Имя, которое, в отличие от имени, предполагает, даст вам двухбуквенный код страны.

Так что вы можете сделать с этой информацией?Теоретически вы можете использовать переведенные названия стран - в этом случае вы просто создаете словарь (Dictionary<int, string>) и добавляете LCID с соответствующей строкой NativeName и используете его в качестве источника для вашего выпадающего меню.
Теоретически тот, кто родился вСтрана должна быть в состоянии понимать хотя бы один из ее языков (по крайней мере, это происходит в большинстве случаев).

В действительности вы, вероятно, хотите, чтобы уникальный список стран был переведен на любой язык, который ваше приложение отображает в данный момент.Вы можете использовать метод выше, чтобы получить список стран и использовать, например, DisplayName (или EnglishName).Во время выполнения вы можете преобразовать его в переведенное имя, как и любую другую строку.Поскольку это должно происходить в бэкэнде, вы должны добавить другой файл ресурсов (может быть помещен в App_GlobalResources, не имеет значения) и прочитать его в своем коде.Не нужно больше теории, требуется некоторый пример кода:

const string RESOURCE_FILE = "Countries";
Dictionary<string, string> countryNames = new Dictionary<string, string>();

var specificCultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
foreach (CultureInfo culture in specificCultures)
{
    var info = new RegionInfo(culture.LCID);
    var name = info.EnglishName;
    var translated = GetGlobalResourceObject(RESOURCE_FILE, name).ToString();
    countryNames[name] = translated;
}

Если вы хотите прочитать имя на определенном языке (кроме CurrentUICulture), передайте объект CultureInfo в качестве третьего параметра в GetGlobalResourceObject().

0 голосов
/ 13 июля 2011

Пользователь выбирает свой регион, вы сохраняете его в своем сеансе или URL-адрес, используя маршрут, содержащий код региона. Вы можете прочитать его в фильтре действий, например, здесь:

ASP.Net MVC Переключение культур после компиляции для начальной загрузки

Если вы выбираете метод маршрута

Интернационализация маршрутов ASP.NET (MVC)

но для вашего сценария это немного сложнее, поэтому первая ссылка будет вашим лучшим выбором.

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