Qt modifier partiellement la locale de l'application

a marqué ce sujet comme résolu.

Salut,
Aujourd’hui, je cherchais à faire quelque chose qui me paraissait plutôt basique, mais j’ai l’impression que Qt ne me laisse pas faire facilement.

Ma situation est que j’ai un logiciel avec l’interface qui doit être localisée en fonction des langues supportées. Très bien, ça nous permet, à partir du choix utilisateur dans la liste, de faire un QLocale::setDefault.

Seulement, là où je suis embêté, c’est qu’il y a une autre préférence utilisateur qui précise le format des nombres. Or, c’est une partie de ce que gère QLocale. Je pensais juste pouvoir y modifier la partie formatage de nombre, mais tout ce à quoi j’ai accès, c’est une liste de locale (assez énorme) pour chacun des pays (pays-script-langage). Je n’ai pas l’impression de pouvoir en créé un Custom pour chacun des composants de QLocale (gestion des nombres, gestion des dates, gestion des monnaies, etc…).

Suis-je passé à côté de quelque chose ?

J’ai lu ici

Locale ids are thus provided for each "category" - numbers, currency symbols, collation order etc. All these preferences put together form a user’s locale.

wiki qt

C’est exactement ce que je cherche à faire, mais je n’en trouve pas le moyen et je commence à penser que ce n’est pas juste que je ne sais pas lire une doc.

Merci

+0 -0

Tu peux formatter avec plusieurs locales au choix. E.g.

QString formatDate(const quint64 timestamp, const QString& lang) {
    auto curLocal(QLocale(lang.toString()));
    auto curDate = QDateTime::fromSecsSinceEpoch(timestamp).date();
    QString dateLocale;
    if (lang == "SYSTEM")
        dateLocale = QLocale::system().toString(curDate, QLocale::system().ShortFormat);
    else
        dateLocale = curLocal.toString(curDate, curLocal.ShortFormat);

    return dateLocale;

Et donc de la meme maniere avec locale.toDouble(s) ou autre. langsera la langue cible (genre fr_FR).

Désolé, je ne vois pas en quoi ça résout mon problème.

Je vais reformuler parce que je crois que je l’ai mal exprimé.
Je veux la locale du systeme (enfin pas vraiment, mais c’est pas là le souci), cependant je veux que pour la gestion des nombres, je suive la préférence utilisateur.
Mon problème n’est donc pas sur l’installation de la locale mais sur sa composition.

Je m’imaginais qu’il existerait un code qui ressemble à ça

QLocale result = QLocale::system();
result.setNumberFormatter(QLocale::Spanish, QLocale::Spain); // <-- n'existe pas !
QLocale::setDefault(result);

Ainsi j’ai les nombres espagnols sans toucher aux date / monnaie / collators etc…

Avec la solution de ton premier message, je peux arriver à ce résultat, mais il faut que j’aille spécifier que j’utilise la locale espagnole sur toutes les instances de QSpinBox et QDoubleSpinBox et tous les appels de toString (probablement camouflé en QVariant::toString dans mon cas —' et des QString::number) qui peuvent se retrouver à l’écran. C’est faisable, mais c’est difficile de ne ni passer à côté d’un, ni continuer à penser à le faire sur du nouveau code.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte