我想马上说我不会说阿拉伯语。
我正在尝试通过翻译其简单文本(使用Google翻译服务)来使对话框窗口国际化。
使用两个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。
答案 0 :(得分:0)
阿拉伯语的阅读顺序是从右到左,因此Google翻译也将以阿拉伯语的阅读顺序进行翻译。
https://en.wikipedia.org/wiki/Right-to-left
因此,您会发现,当输出到静态文本框时,文本在从右到左的行中。