我想直接说,我不会说任何阿拉伯语言。
我试图通过翻译其简单文本(使用谷歌翻译服务)使我的对话窗口国际化。
使用两个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。
阿拉伯语阅读顺序是从右到左,因此Google翻译也将翻译为阿拉伯语阅读顺序。
https://en.wikipedia.org/wiki/Right-to-left
因此,当您输出到静态文本框时,您会发现文本位于从右到左的行中。