Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.3.1 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

Traduction de plugins

Bonjour,

mon projet actuel a un système de plugins configurables. Les plugins renvoient leur configuration via un QJsonObject et l'application "génère" la fenêtre pour les configurer (système similaire aux fichiers .ui de designer).
Mais la configuration contient des chaînes à traduire mais elle ne le sont pas et je n'arrive pas à trouver pourquoi.

Mon application est architecturée de la même façon que l'exemple Plug & Paint de Qt : Une QMainWindow qui parcourt le dossier "plugins" et charge les plugins qui implémentent l'interface IProvider.

Avant la création de la QMainWindow, je charge la traduction de l'application (ça marche), puis dans son constructeur, je charge les plugins qui chargent leur propre traduction :
if (translator.load(QLocale(), QString(), QString(), QString(":/lang")))
{
qDebug() << "loaded file";
qDebug() << "installed?" << qApp->installTranslator(&translator);
}
le fichier s'appelle juste "fr_FR.qm" et se trouve le fichier de ressources, préfixe ":/lang". qDebug() affiche bien "loaded file" puis "installed? true", preuve qu'il est trouvé.

J'ai pensé qu'il fallait charger les traductions avant de créer le moindre widget, donc j'ai fait en sorte que les plugins soient chargés avant la création de la QMainWindow et je les lui passe via le constructeur, résultat : aucun changement.

Les chaînes de traduction des plugins ne sont utilisées que dans une QDialog crée et affichée à la demande, donc le fait de les charger dans le constructeur de la QMainWindow ne devrait pas changer grand chose (et d'où le fait d'aucun changement à la ligne d'au-dessus).

Voici un une version épuré d'un plugin :
// .h
class POUETPROVIDERSHARED_EXPORT PouetProvider : public QObject, public IProvider
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "com.minirop.pouet.PouetProvider")
Q_INTERFACES(IProvider)

public:
PouetProvider();
QJsonArray configuration() const override;

private:
QJsonArray conf;
QTranslator translator;
};

// .cpp
PouetProvider::PouetProvider()
{
if (translator.load(QLocale(), QString(), QString(), QString(":/lang")))
{
qDebug() << "loaded file";
qDebug() << "installed?" << qApp->installTranslator(&translator);
}

QJsonArray choices;
choices.append(tr("No"));
choices.append(tr("Yes"));

QJsonObject obj;
obj["name"] = "miniatures";
obj["description"] = tr("Afficher les miniatures ?");
obj["type"] = enum_cast(Widget::Combo);
obj["values"] = choices;

conf.append(obj);
}

QJsonArray PouetProvider::configuration() const
{
return conf;
}
Voilà, je ne sais pas quoi dire de plus. Si quelqu'un à une idée/piste/whatever.

Merci d'avance.
Connectez-vous ou Inscrivez-vous pour répondre.