Как отличить упрощенный и традиционный китайский язык в C#?

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

Для французского языка оценка свойства TwoLettersIsoLanguageName для InstalledUiCulture работала хорошо, но для китайских кодов ISO недостаточно. Я думал прибегнуть к свойству Name, которое разделяет zh-Hans и zh-Hant, но это нарушает французский язык, поскольку дает, например, fr-FR в одних системах и fr-CA в других.

Есть ли простой способ получить двухбуквенный код языка текущей культуры, если он не китайский, а в противном случае получить zh-Hans/zh-Hant?

Я ищу элегантное решение; Я, конечно, подумал о разборе свойства Name культуры и создании особого случая для китайского языка, но это не очень красиво :/

Короче говоря, я думаю, что ищу способ получить "нейтральную" культуру из текущей культуры: из fr-Fr получить fr, из zh-TW получить zh-Hant, а из zh-CN получить zh-Hans. Идеи?

Спасибо!


person Clément    schedule 05.12.2011    source источник
comment
Почему вы не используете спутниковые сборки?   -  person Hans Passant    schedule 05.12.2011
comment
Потому что я исправляю довольно старую кодовую базу :/   -  person Clément    schedule 05.12.2011
comment
Не забывайте о норвежском и португальском языках, для которых также существует несколько диалектов. А что произойдет, если ваша компания решит создать специальный канадско-французский перевод?   -  person Raymond Chen    schedule 05.12.2011
comment
@RaymondChen: Верно. В этом случае я загружу конкретный перевод.   -  person Clément    schedule 06.12.2011
comment
Тогда вопрос не в том, что мне нужна функция, которая возвращает субкультуру, если субкультура китайская, а в противном случае — нейтральную культуру. Мне нужна функция, которая возвращает субкультуру, если у меня есть перевод для этой субкультуры, и нейтральную культуру в противном случае. И встроенной функции ОС для этого естественно нет, так как ОС не знает, на какие языки вы были переведены.   -  person Raymond Chen    schedule 06.12.2011
comment
@RaymondChen: Не совсем так. Мне просто нужно проверить, есть ли у меня перевод для текущей конкретной культуры. Если нет, мне нужно получить соответствующую нейтральную культуру, и именно об этом был вопрос. Parent отлично подходит для этого.   -  person Clément    schedule 06.12.2011


Ответы (1)


Похоже, что свойство Parent CultureInfo — это то, что вам нужно.
Кажется, его поддерживали с самого начала.

КСТАТИ. В случае переводов следует использовать CurrentUICulture. а не CurrentCulture (последний предназначен для форматирование) или InstalledUiCulture, который является языковой версией операционной системы и не является обязательным параметром пользователя.

person Paweł Dyda    schedule 05.12.2011
comment
Большое спасибо! Дополнительное примечание для тех, кто найдет это решение в будущем: сначала использование свойства IsNeutral позволяет убедиться, что вы не берете родителя уже нейтральной культуры. Также стоит отметить: InvariantCulture.Parent == InvariantCulture - person Clément; 05.12.2011