Traduction d'un fichier .class.php dans le dossier desktop

Bonjour,

je viens d’implémenter la traduction, tout s’est bien déroulé du premier coup !

j’ai une question : dans le répertoire desktop/php, j’ai créé un fichier mymodbusEqConfig.class.php (ici) construit comme mymodbus.php, avec les textes à traduire entre double accolades, donc. Cette classe me permet de n’avoir le code qu’une seule fois pour la modale d’affichage des templates et pour la config de l’équipement. Les traductions pour ce fichier sont faites mais ne sont pas utilisées dans Jeedom…

→ J’ai loupé un truc ?

Pour info : consommation d’environ 46 350 caractères pour les 3 langues par défaut, on est large !

A+
Michel

Faudrait voir comment tu fais utilises ton fichier mymodbusEqConfig.php dans mymodbus.php par exemple
comment est-il inclus?
et ou ont été généré les traductions?

en théorie c’est lors de l’appel à include_file() du core que le contenu est traduit mais il faut voir si dans ton cas il retrouve les sources de traductions; je suspecte que dans un cas elles sont générés avec le chemin x mais ensuite que le core recherche dans le chemin y.

une solution serait d’appeler manuellement la fonction de trad p-e avec le path qui correspond à la source (le json)

Avec cette ligne dans mymodbus.php

require_once 'mymodbusEqConfig.class.php';

Donc il faudrait utiliser la fonction include_file() ? En regardant le code rien n’est prévu pour des fichiers sous le répertoire desktop, à moins que je n’ai loupé quelque chose ?

Dans core/i18n/xx_YY.json

se trouvent bien les fichiers :

  • « plugins/mymodbus/desktop/php/mymodbus.php »: {
  • « plugins/mymodbus/desktop/php/mymodbusEqConfig.class.php »: {

avec un contenu a priori conforme. Extrait :

    "plugins\/mymodbus\/desktop\/php\/mymodbusEqConfig.class.php": {
        "2 registres": "2 registers",
        "4 registres": "4 registers",
        "ASCII": "ASCII",
        "ATTENTION : lors de la sauvegarde de l'équipement, si l'équipement est activé, toutes les commandes seront supprimées sans demande de confirmation": "ATTENTION: when saving equipment, if the equipment is activated, all commands will be deleted without requesting confirmation",
        "Activer": "Activate",
        "Adresse IP": "IP address",
        "Adresse de l'esclave": "Slave address",
        "Aucun": "No",
        "Aucune": "No",
        "Bits de stop": "Stop bits",
        "Catégorie": "Category",

c’est-à-dire ?

edit:
j’ai remplacé

require_once 'mymodbusEqConfig.class.php';

par

include_file('desktop', 'mymodbusEqConfig.class', 'php', 'mymodbus');

ça n’a rien changé (mais ça n’a rien cassé)

J’ai continué mes essais, j’ai remarqué que

<label class="col-sm-6 control-label"><?= __("Protocole de connexion", __FILE__) ?></label>

était traduit mais que

<label class="col-sm-6 control-label">{{Protocole de connexion}}</label>

ne l’était pas.

Je trouve ça lourd comme syntaxe mais est-ce que c’est celle que je dois utiliser ? Nebz semblait dire que non si j’interprète sa remarque pour un autre principe :

Mais bon, si je suis condamné à le faire juste dans ce fichier, je le ferai.

Étrange chez moi dans ce contexte les {{}} passent

Sur un plugin dans un dépôt ouvert ? (histoire que je compare)

ca serait plus simple que tu détails ce que toi tu fais…
déjà comme je disais, avec un « requiere » aucune chance que ca soit traduit, les traductions sont faites parce qu’une fonction bien précise est appelée, c’est pas magique/automatique.

ensuite vu le nom de ton fichier « mymodbusEqConfig.class.php » ca semble être une class? donc justement pas construit comme « mymodbus.php »?

si, ligne 78 à 91:

Merci à vous deux pour vos retours et analyses.

Dans le fichier desktop/php/mymodbusEqConfig.class.php

Et d’autres fonctions :
image

Qui sont appelées dans desktop/php/mymodbus.php de cette façon :

Appelées aussi depuis desktop/modal/templates.php de la même façon mais avec le paramètre $_is_template mis à true.

Dans ces 2 fichiers, j’ai fait un :

include_file('desktop', 'mymodbusEqConfig.class', 'php', 'mymodbus');

au lieu de faire un require_once().

Les doubles-accolades ne fonctionnent pas, mais les textes sont traduits par le workflow de Mips. La fonction __() fonctionne.

Ce n’est donc pas la même construction que nebz qui utilise les doubles accolades directement dans le fichier desktop/php/pluginid.php. Ce qui fonctionne chez moi aussi.


Comme le dit Mips, je pense que le fichier de classe doit être déplacé et inclus autrement. Je testerai ça ce soir et reviens vers vous. Ou alors il faut que je n’en fasse pas une classe et juste des fonctions… je testerai.

Encore merci !

ca c’est ton choix; hors sujet mais il existe des frameworks php qui gère les vues avec des class; ce n’est pas moins valable
mais du coup je pense que tu dois juste utiliser la fonction __() effectivement et c’est tout.
ca ne me semble pas apporter de désavantage particulier.

et comme c’est la solution fonctionnelle la plus simple, même si elle ajoute de la lourdeur au code, je m’en contenterai et je vais faire ça.

Bon avec la fonction __(), ça fonctionne comme testé. Le commit n’a pas généré de nouvelles traduction, tout était déjà traduit.

Merci à vous deux !

J’ai (de nouveau) retiré le tag car justement ta question n’avait aucun lien avec le workflow que je propose.
Ta question reste identique quelque soit l’outil utiliser pour faire les traductions

1 « J'aime »

je pensais bien faire

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.