在我的Qt应用程序中,我有许多使用Qt的tr()的本地化小部件的不同屏幕。要确定字符串是否正确显示而不被截断,我们有以下工作流程:
问题在于手动审核流程无法覆盖100%的字符串,因为某些文本仅针对某些错误或方案显示,而这些错误或方案无法由审阅者轻松复制。俄语或德语等语言往往比英语长得多。
您知道在软件的任何翻译版本中检查截止/过长字符串的哪种方法?
我想到但不满意的方法:
答案 0 :(得分:1)
一种方法是编写一个函数,迭代给定类型的所有小部件并检查文本大小。
QList<QLabel *> labels = rootWidget->findChildren<QLabel *>();
for (auto label : labels)
check(label);
可以使用QFontMetric
:
void check (QLabel *label)
{
QFontMetrics fm = label->fontMetrics();
bool ok = fm.width(label->text()) <= label->width();
}
对于不同类型的文本绘制小部件,可能需要重载check()
函数。您可能还需要调整比较以考虑更多事情(边距,填充等)。
如果您使用Qt Quick界面,可能会做类似的事情,但这会有点困难,因为您可能需要搜索在QML中声明的动态属性。
对于动态布局中的小部件,这需要在某个时刻显示已评估的小部件,以便知道小部件的最终大小。 对于Qt Quick,您需要加载QML文件并实例化该项甚至检索其父级。
答案 1 :(得分:0)
我研究了Qt域之外的不同方法,发现了以下内容:
因此,在切断字符串时似乎没有实现自动翻译流程的标准方法。开发人员只能实施工具来帮助翻译人员。我认为由于以下原因,无法实现完全自动化的解决方案: