Локализация:Как сопоставить информацию о культуре с именем скрипта или диапазоном символов в Юникоде?

StackOverflow https://stackoverflow.com/questions/252662

Вопрос

Мне нужна некоторая информация о локализации.Я использую .net 2.0 с C # 2.0, который решает большинство проблем, связанных с локализацией.Однако мне нужно вручную нарисовать алфавиты, соответствующие текущей культуре, на экране на одном конкретном экране.

Это было бы похоже на экран Контактов в Microsoft Outlook (просмотр адресных карточек или Подробный просмотр адресных карточек в разделе Контакты), и поэтому ему нужен столбец кнопок в правом конце, по одной для каждого алфавита.

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

Я могу определить культуру текущего пользователя (приложение.Текущая культура или система.Глобализация.CultureInfo.CurrentCulture предоставит информацию, связанную с культурой).У меня также есть все скрипты для рендеринга алфавитов.Однако проблема в том, что я не знаю, как сопоставить информацию о культуре с именем скрипта.

Другими словами, есть ли способ определить имя скрипта, соответствующее культуре?Или возможно ли определить диапазон значений символов Юникода, соответствующих культуре?Любой из них позволил бы мне правильно отобразить алфавиты на кнопке.

Мы искренне ценим любые предложения или рекомендации относительно этого.Если есть что-то принципиально неправильное в моем подходе (или в том, чего я пытаюсь достичь), пожалуйста, укажите и на это.Спасибо, что уделили мне время.

PS:Я знаю, что самое простое решение - либо настроить имя скрипта как часть пользовательских настроек, либо отобразить список языков, из которых пользователь может выбрать (a la Contact в Outlook 2007).Но я просто пытаюсь понять, могу ли я отобразить алфавиты, соответствующие культуре, без необходимости пользователю что-либо делать.

Это было полезно?

Решение

В собственном коде есть LOCALE_SSCRIPTS для GetLocaleInfoEx () (Vista и выше), который показывает, какие сценарии ожидаются для локали. В настоящее время нет аналогичной концепции для .Net.

Другие советы

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

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

Я полностью согласен с mikiemacman. Кроме того, данный язык не обязательно использует все буквы сценария.

Как бы то ни было, самое близкое, что я могу вспомнить, это CultureInfo.TextInfo.ANSICodePage - > Есть только несколько Кодовые страницы ANSI . Вы могли бы создать таблицу (или оператор switch (), что угодно), в котором перечислены сценарии для каждой кодовой страницы ANSI.

Прото, подожди!Есть гораздо более точное решение.Это неуправляемый способ, который вам, возможно, придется P / Вызвать.

GetLocaleInfoW(MAKELCID(wLangId, SORT_DEFAULT), LOCALE_FONTSIGNATURE, wcBuf, MAXWCBUF);

Это дает вам МЕСТНОЕ ОБОЗНАЧЕНИЕ штукатурка.Ответ находится в поле lsUsb:Подмножества битового поля в Юникоде.Крысы!страница MS для этой структуры пуста.Но посмотрите это в вашей копии MSDN.Там это полностью задокументировано:Целый набор флагов, описывающих, какие скрипты поддерживаются.И да, там есть флаг для тамильского языка ;-)

ХТХ.

Редактировать:Упс!Не видел ответа Шона.Ух ты!Ответ от штатного эксперта!;-) В любом случае, вас все еще может заинтересовать ответ, совместимый с версией до Vista.

Увлекательная тема.Хотя это может и не ответить на ваш вопрос, Омниглот это хороший ресурс.

Правильный ответ, скорее всего, будет сложным и будет зависеть от конкретной задачи, которую вы решаете.Предполагая, что ваша цель - отображать только буквы, используемые на определенном языке, для разделения разделов телефонной книги (как в Outlook), вот несколько проблем:

  • Люди, у которых есть контактные имена, охватывающие несколько алфавитов / языков.
  • 2-буквы-символы (например,"Элджей" по-сербски).Это одна фонема, всегда рассматриваемая как одна буква, хотя она содержит 2 символа Юникода.- У него был бы свой раздел в телефонной книге (отдельно от буквы "L").
  • Слишком много символов для перечисления (например,Китайский)
  • Неортодоксальный порядок (например,Тайский - телефонная книга будет разделена только согласными, игнорируя гласные).
  • Различие между прописными и строчными буквами (предположительно, вам нужен только один регистр для языков, которые его поддерживают, что незначительно нарушает турецкую букву "i").
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top