Я хочу сразу сказать, что я не говорю ни на одном из арабских языков.
Я пытаюсь интернационализировать свое диалоговое окно, переводя его простой текст (используя сервис Google Translate.)
Сообщение отображается с использованием двух static
текстовых элементов управления. В конфигурации по умолчанию они имеют следующие стили:
//Top window:
//Wnd Styles: 0x50020001 = WS_CHILD | WS_VISIBLE | WS_GROUP | SS_CENTER
//Wnd ExStyles: 0x4 = WS_EX_NOPARENTNOTIFY
//Bottom window:
//Wnd Styles: 0x50020000 = WS_CHILD | WS_VISIBLE | WS_GROUP | SS_LEFT
//Wnd ExStyles: 0x4 = WS_EX_NOPARENTNOTIFY
Вот как я отображаю английский текст:
pStrPleaseRead = L"*** PLEASE READ ***";
pStrMsg = L"Check your \"Spam\" or \"Other\" folders if you don't see that email right away.";
this->SetDlgItemText(IDC_STATIC_PLS_READ, pStrPleaseRead);
this->SetDlgItemText(IDC_STATIC_MSG, pStrMsg);
, который выглядит так:
Итак, когда я перевожу его на любой язык справа налево, я сначала делаю два перевода. Вот один из них:
а затем этот:
Затем я копирую оба результата в Visual Studio в виде строк и корректирую свой код следующим образом:
pStrPleaseRead = L"*** בבקשה תקרא ***";
pStrMsg = L"בדוק את התיקיות 'ספאם' או 'אחר' אם אינך רואה את האימייל מיד.";
//Need to apply R-T-L reading
static UINT ctrlIDs[] = {
IDC_STATIC_PLS_READ,
IDC_STATIC_MSG,
};
for(int i = 0; i < _countof(ctrlIDs); i++)
{
CWnd* pW = this->GetDlgItem(ctrlIDs[i]);
ASSERT(pW);
pW->ModifyStyleEx(0, WS_EX_LAYOUTRTL | WS_EX_RTLREADING | WS_EX_RIGHT);
}
this->SetDlgItemText(IDC_STATIC_PLS_READ, pStrPleaseRead);
this->SetDlgItemText(IDC_STATIC_MSG, pStrMsg);
Но так оно и выходит. Первый перевод (красным) правильный, а второй (под ним) нет:
(Так выглядит версия Google):
Опять же, я не могу это прочитать. Я просто сравниваю его с тем, как оно выглядело изначально в окне Google Translate.
Так чего мне там не хватает?
PS. Для этого проекта я застрял в Visual Studio 2008 IDE.