Язык для не-Unicode программ и настроек реестра - PullRequest
1 голос
/ 11 июля 2011

В Windows XP есть опция «Текущий язык для программ, не поддерживающих Юникод» в Панели управления / Регион и Настройки языка.

Это можно использовать, чтобы программы, не поддерживающие Юникод, отвечали на выбранный язык.

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

Почему некоторые программы реагируют на первый метод (Панель управления), а другие - на второй (Реестр). В чем основная разница в коде? Какие варианты вызовов / компиляции я могу найти в любом приложении?

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

Спасибо.

Ответы [ 2 ]

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

Разделы реестра, которые вы упомянули, ничего не делают, кроме как сопоставляют некоторые кодовые страницы с CP1251 (кириллицей), эффективно заставляя CP1251 использоваться во всей системе.Так что на самом деле программа, о которой вы упоминаете, содержит некоторую информацию, жестко запрограммированную.

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

Давайте кратко поговорим о проблемах:

  1. Если вы просто не можете правильно отображать локализованные тексты, а приложение написано с использованием MFC, возможно, что шрифт для диалогов установлен неправильно (для MS Shell Dlg или MS Shell Dlg 2, что бы ни работало в этом случае).

  2. В последнем случае и, возможно, в первомКроме того, приложение предполагает, что английский-американский язык является языком, который вы будете использовать, и языком системы будет En-US, эффективно устанавливая Locale на 1033 и кодовую страницу по умолчанию на CP1252.Это может быть где-то жестко закодировано.В таком случае вам нужно будет изменить исходный код (при условии, что у вас есть к нему доступ), чтобы эти свойства исходили из настроек ОС.

Для определения языка следует использовать:

LCID currentLocale = GetUserDefaultLCID();

И для обнаружения текущей (так называемой ANSI) кодовой страницы:

UINT currentCodePage = GetACP();
0 голосов
/ 12 июля 2011

Вы можете попросить реестр уведомить вас об изменении значения, но ваша программа должна быть запущена.

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

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