Как настроить статическое управление для отображения арабского (справа налево) текста? - PullRequest
1 голос
/ 02 апреля 2019

Я хочу сразу сказать, что я не говорю ни на одном из арабских языков.

Я пытаюсь интернационализировать свое диалоговое окно, переводя его простой текст (используя сервис 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);

, который выглядит так:

enter image description here

Итак, когда я перевожу его на любой язык справа налево, я сначала делаю два перевода. Вот один из них:

enter image description here

а затем этот:

enter image description here

Затем я копирую оба результата в Visual Studio в виде строк и корректирую свой код следующим образом:

enter image description here

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);

Но так оно и выходит. Первый перевод (красным) правильный, а второй (под ним) нет:

enter image description here

(Так выглядит версия Google):

enter image description here

Опять же, я не могу это прочитать. Я просто сравниваю его с тем, как оно выглядело изначально в окне Google Translate.

Так чего мне там не хватает?

PS. Для этого проекта я застрял в Visual Studio 2008 IDE.

1 Ответ

0 голосов
/ 02 апреля 2019

Порядок чтения по-арабски справа налево, поэтому Google Translate также будет переводить в порядке чтения по-арабски.

https://en.wikipedia.org/wiki/Right-to-left

Например: ep ep2

Таким образом, вы обнаружите, что при выводе в статическое текстовое поле текст находится справа налево.

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