Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Сообщение "Please enter an integer between..."


Автор: ILAgent 1.3.2006, 22:40
Ситуация такая.
Вот кинул я на диалог Edit control, связал с ним переменную типа инт с заданным диапазоном значений (от -100 до 100). Когда при работе приложения я ввожу туда значение, не являющееся целым числом из заданного диапазона, и нажимаю кнопку, вызывающую UpdateData(), выводится соответствующее сообщение. Но по-английски. А надо - по-русски.
Что посоветуете ?

Автор: DeadSoul 1.3.2006, 23:01
Язык в ресурсах диалога менял?

Автор: takedo 2.3.2006, 07:26
по началу все хотят использовать DDX, но потом все потихоньку от него отказываются, поэтому делай проверки ручками и сам. smile

Автор: Dreamer_0x01 2.3.2006, 12:58
Я кстати тоже от этого отказался...

Автор: Earnest 2.3.2006, 14:53
Русифицировать сообщения MFC можно: их слишком много, чтобы все ручками переделывать.

Я знаю 2 способа:
1й способ - только русско-язычное приложение:
В каталоге MFC\include есть папки с локализациями l.fra, l.esp и т.д. Туда нужно поместить аналогичную папку l.rus (содержимое перевести ручками- там не много).
Затем, в редакторе ресурсов открываешь Resourse Includes, находишь строчку
#include "afxres.rc" // Standard components
и заменяешь на
#include "l.rus\afxres.rc" // Standard components
Естественно, язык ресурсов, как уже было сказано, ставишь русским.

2й способ: годится для двуязычного интерфейса
Где-нибудь в InitInstance пишешь примерно такой код:

Код

    // заменить локальную DLL с MFC-ресурсами
    AFX_MODULE_STATE* pState = AfxGetModuleState();

    // если язык русский загрузим локализованную версию MFC ресурсов
    if (m_nLanguage==LANG_RUSSIAN) {
        if (pState->m_appLangDLL==NULL) {
            // загружаем локальную DLL из нашего каталога
            pState->m_appLangDLL = LoadLibrary ("Mfc42loc.dll");
        }
    }
    else {
        if (m_nLanguage==LANG_ENGLISH) {
            if (pState->m_appLangDLL) {
                // будем брать ресурсы прямо из mfc42.DLL
                FreeLibrary (pState->m_appLangDLL);
                pState->m_appLangDLL=NULL;
            }
        }
    }

Вместо Mfc42loc.dll нужно написать имя локализованной библиотеки своей версии. Вот где ее взять - извини, не помню. Вроде бы в system32 должны лежать локализованные версии mfc-ресурсов.

Автор: CaptainFlint 2.3.2006, 15:01
Цитата(Earnest @ 2.3.2006, 14:53 Найти цитируемый пост)
Вроде бы в system32 должны лежать локализованные версии mfc-ресурсов.

Русской среди них нету. Если, конечно, уже не устанавливали. smile А взять её, русскую (равно как и переведённые файлы для папок l.rus) можно тута:
http://flint-inc.ru/Programs/Rus/vc60rus_1.5.rar (38 Кб)
(скромно умолчу, что это мой сайт smile )

PS: Это, естественно, для VC++ 6. Для более новых версий тоже есть пакетики, лежат http://flint-inc.ru/Russian/Programs.html.

Автор: Earnest 2.3.2006, 15:34
CaptainFlint,
А ты где брал? Я точно не у тебя с сайта качала. smile
Где их берут-то - не напомнишь?

Автор: ILAgent 2.3.2006, 20:13
CaptainFlint, спасибо за русификатор, помог. И всё же я, наверное, откажусь от DDX, как советует takedo.
Ещё раз всем спасибо !

Автор: CaptainFlint 2.3.2006, 20:24
Earnest
Давным-давно, когда деревья были зелёными, когда MS только мечтала о мировом господстве в мире программирования, а Visual C++ 6.0 была ультра-современной средой, нашёлся один добрый человек, который создал такой пакетик для этой среды. Время шло, в пакетике обнаруживались разные ляпы, ошибки, да и просто непереведённые куски. Некто CaptainFlint (тогда ещё и не помышлявший называть себя таким ником) пытался по глупости своей связаться с автором сего проекта, дабы указать на несообразности и нижайше попросить обновления. Но все его усилия пропали даром: официального сайта не нашлось, а по E-mail'у то ли никто не отвечал, то ли сам адрес оказался несуществующим. Вздохнул тогда тяжко CaptainFlint, и решил: была не была, попробую-ка я сам исправить ошибки найденные. И исправил он ошибки найденные, и выложил обновлённый пакетик, заявив самонадеянно, что, раз такая ситуация, то отныне он будет этот пакет поддерживать и обновлять...
Вот и весь сказ. smile

Автор: Earnest 4.3.2006, 18:27
Понятно, теперь будем брать русификацию у тебя
Да здравствуют пираты! (в смысле, капитан Флинт)
smile smile smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)