如何调整静态控件以显示阿拉伯语(从右到左)文本?

问题描述 投票:1回答:1

我想直接说,我不会说任何阿拉伯语言。

我试图通过翻译其简单文本(使用谷歌翻译服务)使我的对话窗口国际化。

使用两个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。

c++ user-interface winapi dialog internationalization
1个回答
0
投票

阿拉伯语阅读顺序是从右到左,因此Google翻译也将翻译为阿拉伯语阅读顺序。

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

如:ep ep2

因此,当您输出到静态文本框时,您会发现文本位于从右到左的行中。

© www.soinside.com 2019 - 2024. All rights reserved.