0

我正在 Eclipse/Linux 中使用 Qt 做一个多语言应用程序。在泰语中,我的控制器似乎不太支持换行符(我仍然不确定为什么)。无论如何,以下算法会在每个泰语字符之间插入一个零宽度空格 (\u200b)(字符及其重音符号之间除外),因此可能会出现换行符。但是,我的控制器现在需要 12 分钟才能以泰语启动(在显示打开 QString 消息之前 12 分钟)。该函数覆盖 Qt 中的 QTranslator::translate,因此我可以在每个已翻译的 QString 中添加零宽度空格。

我的问题如下:你们能告诉我我是否正确操作 QString 中的 Unicode 和 Utf-8 字符吗?编辑:泰语符号的渲染是 Qt 问题吗?非常感谢!

QString EditTranslation::translate(const char *context, const char *sourceText, const char *disambiguation) const{


QString translatedString = QTranslator::translate(context,  sourceText,  disambiguation);

if (SystemSettingsService->getLanguageType() != ISystemSettingsService::Thai )
    return translatedString;

// Important block starts here********************* 

QString translatedStringModified;

for(QString::const_iterator i(translatedString.begin()); i != translatedString.end(); ++i){

   translatedStringModified.append(i->unicode());

   int unicode = (i+1)->unicode();

   if(((unicode > 3584 && unicode < 3634 && unicode != 3633) || (unicode > 3646 && unicode < 3655) || (unicode > 3662 && unicode < 3676))){

           translatedStringModified.append(QString::fromUtf8("\u200b")); // Zero-width space is added
   }

}

// ************************************

return translatedStringModified;
}
4

1 回答 1

0

在泰语中,段落之间使用空格而不是单词;这就是你原来的问题中换行很差的原因。

要正确解决这个问题,您应该使用算法来找到单词之间的边界;比如在libthai中;并在那里插入中断,而不是在辅音之间任意插入。

在每个辅音之间插入一个空格可能是速度缓慢的原因之一。

同时,您使用的范围是错误的:您不应该在前面的元音之后中断。此代码段应该为您清除它:

int current = i->unicode();
int next = (i+1)->unicode();

if( (((next >= 0xE31) && (next <= 0xE34)) || ((next >= 0xE47) && (next <= 0xE4E))) || ((current >= 0xE40) && (current <= 0xE46)) )
{
  // Don't insert space
}
else
{
  // Insert space
}
于 2016-02-12T10:53:23.767 回答