Re: Языковая поддержка
От: p0l  
Дата: 24.09.03 02:22
Оценка:
Здравствуйте, eizen, Вы писали:

E>Уважаемые коллеги!

E>Помогите,пожалуйста в следующем.
E>Я пишу пользовательский интерфейс на английском .Вероятно,встанет задача перевести его
E>на китайский-японский.Что надо предусмотреть? Что и как использовать?

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

Все выводы сообщений на экран должны быть оформлены след образом

Вместо:

AfxMessageBox("Here is me string!!");


Нухно использовать

CString str;
str.LoadString(IDS_MY_STRING_TO_SCREEN);
AfxMessageBox(str);


где IDS_MY_STRING_TO_SCREEN айдишник этой же самой строки в стринг тейбле (string table)


Сама же замена ресурсов происходит так:

CString strLang = "C:\\MyProject\\WhateverLanguage.dll";
HINSTANCE CurLang = ::LoadLibrary(strLang);
    
if(!CurLang)
    return FALSE;

AfxSetResourceHandle(CurLang);


С данного момента твой проект будет использовать ресурсы из WhateverLanguage.dll

Для более простого создания языковой дллки используй мастер MFC AppWizard (dll), затем подмени файлы ресурсов (*.rc и resource,h) и переводи себе сколько захочешь...

PS: Для осуществление переводов необходимо поддержка Unicode, класс CString коректно работает с wide strings, так что используй его (если конечно у тебя МФЦ проект )... любые ситуации типа

char* myString = ::LoadString(...);

будут приводить к некоррестной работе твоего приложения
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.