2008-10-31 2 views
1

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

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

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

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

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

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

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

ответ

1

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

+0

Пожалуйста, проверьте мой ответ ниже (от 14-Nov-08) – Proto 2008-11-14 03:46:33

0

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

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

0

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

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

0

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

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

Это дает вам LOCALESIGNATURE stucture. Anwer находится в поле lsUsb: Unicode subsets bitfield. Крысы!страница MS для этой структуры пуста. Но посмотрите в своей копии MSDN. Это полностью документировано там: целый набор флагов, которые описывают, какие скрипты вытеснены. И да, для Тамила есть флаг ;-)

HTH.

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

+0

Пожалуйста, проверьте мой ответ ниже – Proto 2008-11-14 03:45:45

0

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

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

  • Пользователи, у которых есть контактные имена, охватывающие несколько скриптов/языков.
  • 2-символьные буквы (например, «Lj» на сербском языке). Это одна фонема, которую всегда рассматривают как одну букву, хотя она имеет 2 символа Юникода. «У него будет отдельный раздел в телефонной книге (отдельно от« L »).
  • Слишком много символов в списке (например, китайский)
  • Неортодоксальный заказ (например, тайский - телефонная книга будет разделена только согласными, игнорируя гласные).
  • Различия в верхнем и нижнем регистре (предположительно, вам нужен только один случай для поддерживающих его языков - который прерывается небольшими способами турецкий «i»).
+0

Спасибо за замечания и предоставляя некоторые примеры, чтобы заставить меня думать труднее о проблеме, dbkk. Да, мне, возможно, придется потратить больше времени на это, чем я предполагал. – Proto 2008-11-26 00:27:37