Есть ли в Qt встроенный метод или другой способ проверить, использует ли язык контента направление справа налево?
QFile fileHandle("c:/file.txt");
if(!fileHandle.open(QFile::ReadOnly|QFile::Text))
return;
QTextStream fileContent(&fileHandle);
fileContent.setCodec("UTF-8");
fileContent.setGenerateByteOrderMark(false);
ui->plainTextEdit->setPlainText(fileContent.readAll());
fileHandle.close();
Я не слишком много работал с языками справа налево, но надеюсь, что эти предложения помогут вам:
Если вы знаете, что ваш контент в UNICODE, вы можете проверить этот ответ (использование QTextCodec::codecForUtfText
) для точного определения кодировки. Затем классифицируйте символы, чтобы определить доминирующее подмножество (слева направо: английский, кириллица …, справа налево: арабский, иврит …), вероятно, гистограммы будет достаточно. Вместо этого вы могли бы использовать структуру определения языка, но я думаю, что вам нужно только тип языка, а не самого языка (что гораздо сложнее).
Поиск для знак справа налево (RLM) (непечатный символ, обычно используемый для обозначения двунаправленного текста). Если вы создаете контент, вы можете добавить RLM в начале файла ( противоположный (LRM) также существует).
Других решений пока нет …