无法以我自己的方式加载QTranslator。 我想从我的应用程序体系结构中排除.ts文件。我只想从数据库加载我的语言,任何地方都可以更新。而且我不想加载任何文件(.ts)。是否存在这样的事情: QTranslator :: load(QStringList)??? QStringList是一种语言对。
答案 0 :(得分:3)
QTranslator::translate
方法是虚拟的-这意味着您可以简单地创建自己的转换器来扩展QTranslator
并覆盖此(以及另一个)方法:
class MyTranslator : public QTranslator
{
public:
MyTranslator(QStringList data, QObject* parent) :
QTranslator(parent)
{
// ...
}
bool isEmpty() const override {
return false; //or use your own logic to determine if data contains translations
}
QString translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const override {
// Use the data to somehow find your translation
}
};
答案 1 :(得分:0)
我了解您的目标。为什么不从数据库中获取数据,将其保存为临时文件,通过QTranslator加载(常规方式),然后删除该临时文件?
另一个选择可能是:
bool QTranslator :: load(const uchar * data,int len,const QString &directory = QString())
(来自:http://doc.qt.io/qt-5/qtranslator.html#load-2),这将允许您从自己的结构中加载而不需要临时文件。