Создание пользовательских CultureInfo для страны, языковой комбинации
Я работаю над приложением.net 4.5, которое должно быть многоязычным с поддержкой нескольких культур и т. Д.
Ниже приведен примерный список стран / языков
- Россия Русский
- Бельгия / Французский
- Бельгия / Голландский
Для всего вышеперечисленного есть объект CultureInfo, который может быть создан на основе указанных выше названий культур.
- р-RU
- FR-BE
- NL-BE
Когда пользователь заходит на сайт, я устанавливаю Thread.CurrentThread.CurrentCulture и Thread.CurrentThread.CurrentUICulture для культуры, созданной с указанными выше именами, например.
Thread.CurrentThread.CurrentCulture = new CultureInfo("nl-BE", false)
Thread.CurrentThread.CurrentUICulture = new CultureInfo("nl-BE", false)
Все вышеперечисленные названия являются действительными названиями культур.
Нет, однако, мне нужно добавить другое название культуры, английский язык в России. Но проблема в том, что код en-RU недействителен, поэтому при создании new CultureInfo("en-RU", false)
Я получаю исключение CultureNotFoundException, так как en-RU недействителен.
В этой культуре я хочу, чтобы форматирование и т. Д. В России включало цифры, даты и т. Д., Но я хочу, чтобы язык на сайте был английский. Возможно ли создание пользовательских объектов CultureInfo для недопустимых названий культур с поведением страны (Россия)?
3 ответа
Можно ли создавать собственные объекты CultureInfo для недопустимого имени культуры?
Да.
Использовать CultureAndRegionInfoBuilder
чтобы помочь создать кастом CultureInfo
, (NB. Как только у вас есть код для создания культуры, настройки для этого можно сохранить в XML и затем загрузить, например, из ресурса, который должен нуждаться в меньшем количестве кода во время выполнения.)
Возможно, вам придется смешивать, смешивать и сочетать - иметь объект культуры для английского языка, который вы используете для английского текста, но объект культуры ru-Ru (русский) для числового форматирования.
Или даже лучше создать собственную культуру, комбинирующую
Вы должны использовать CultureInfo.InvariantCulture
Имущество
Инвариантная культура нечувствительна к культуре; это связано с английским языком, но не с какой-либо страной / регионом. Вы указываете инвариантную культуру по имени, используя пустую строку ("") при вызове метода создания экземпляров CultureInfo. CultureInfo.InvariantCulture также извлекает экземпляр инвариантной культуры. Его можно использовать практически в любом методе пространства имен System.Globalization, для которого требуется культура. Объекты, возвращаемые свойствами, такими как CompareInfo, DateTimeFormat и NumberFormat, также отражают соглашения о сравнении строк и форматировании инвариантной культуры.
CultureInfo.InvariantCulture Property
Это другой вариант Custom Global Application Culture