かなりまともなソフトウェアを使い始めましたが、翻訳したいので、設定メニューにコンボボックスを追加しました。ユーザーがコンボボックス内で自分の言語を選択したときにプログラムを翻訳したいと思います。Linguist を使用して翻訳し、TS および QM ファイルを生成しました。.pro で ts ファイルをリンクしました。
main.cpp
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
Translator translator(&engine);
engine.rootContext()->setContextProperty("translator", &translator);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
翻訳者.h
class Translator : public QObject
{
Q_OBJECT
Q_PROPERTY(QString emptyString READ getEmptyString NOTIFY languageChanged)
public:
explicit Translator(QQmlEngine *engine)
{
translator = new QTranslator(this);
engine = engine;
}
QString getEmptyString()
{
return "";
}
Q_INVOKABLE void selectLanguage(QString language)
{
if(language == QString("en"))
{
translator->load(":/translation/lang_en.qm");
qGuiApp->installTranslator(translator);
engine->retranslate();
}
if(language == QString("fr"))
{
qGuiApp->removeTranslator(translator);
engine->retranslate();
}
emit languageChanged();
}
signals:
void languageChanged();
private:
QTranslator *translator;
QQmlEngine *engine;
};
main.qml
ComboBox {
id: comboLangage
currentIndex: 0
model: [ qsTr("Français"), qsTr("Anglais") ]
width: 200
onActivated: {
if(comboLangage.currentIndex == 0){
selectLanguage("fr"); // how do i call this method ?
}
else if(comboLangage.currentIndex == 1){
selectLanguage("en")
}
}
}
qmlRegisterType("issou.translator", 1, 0, "Translator"); を使ってみました。それをqmlにインポートします。次に、qml で Translator オブジェクトを作成し、いくつかの関数を呼び出すことができます。しかし、それはうまくいきませんでした。助言がありますか ?
ありがとうございました。