如何从数据库加载QTranslator?

时间:2019-01-03 08:41:39

标签: qt qml

无法以我自己的方式加载QTranslator。 我想从我的应用程序体系结构中排除.ts文件。我只想从数据库加载我的语言,任何地方都可以更新。而且我不想加载任何文件(.ts)。是否存在这样的事情: QTranslator :: load(QStringList)??? QStringList是一种语言对。

2 个答案:

答案 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),这将允许您从自己的结构中加载而不需要临时文件。