Tu peux me donner les dĂ©tails techniques? je nâai jamais fait de widget custom avec des textes en dur (dĂ©jĂ jâaime pas les widgets alorsâŠ)
câest quoi les fichiers (html?) et tu y mets quoi comme prompts? ({{xxx}}?)
et tu fais comment pour lancer la traduction?
Oui fichier html.
Alors 2 exemples :
- partie php
<div class="col-xs-8" id="tile" style="height:130px; width:350px;">
<div class="col-xs-4" id="titre_tile" style="height:25px;">{{N° Colis}}</div>
<div class="col-xs-8" id="value_tile" style="height:25px;">#trackingId#id##</div>
<div class="col-xs-6" id="titre_tile" style="height:25px;">{{Transporteur}}</div>
<div class="col-xs-6" id="value_tile" style="height:25px;"><span class="Cmd#carrier_id#"></span></div>
<div class="col-xs-6" id="titre_tile" style="height:25px;">{{Origine}}</div>
<div class="col-xs-6" id="value_tile" style="height:25px;"><span class="Cmd#origin_id#"></span></span></div>
<div class="col-xs-6" id="titre_tile" style="height:25px;">{{Destination}}</div>
<div class="col-xs-6" id="value_tile" style="height:25px;"><span class="Cmd#destination_id#"></span></div>
<div class="col-xs-6" id="titre_tile" style="height:25px;">{{Date de livraison}}</div>
<div class="col-xs-6" id="value_tile" style="height:25px;"><span class="Cmd#deliveryDate_id#"></span></div>
</div>
- partie js
jeedom.cmd.update['#status_id#'] = function(_options) {
if ( _options.display_value == 'delivered') { $('.Cmd#status_id#').empty().append('<span><img src="plugins/parcelTracking/core/img/status-delivered.png" height="80" title="{{Délivré}}"/></span>'); }
else if ( _options.display_value == 'transit') { $('.Cmd#status_id#').empty().append('<span><img src="plugins/parcelTracking/core/img/status-transit.png" height="80" title="{{En transit}}"/></span>'); }
else if ( _options.display_value == 'pickup') { $('.Cmd#status_id#').empty().append('<span><img src="plugins/parcelTracking/core/img/status-pickup.png" height="80" title="{{Pris en charge}}"/></span>'); }
else if ( _options.display_value == 'arrived') { $('.Cmd#status_id#').empty().append('<span><img src="plugins/parcelTracking/core/img/status-pickup.png" height="80" title="{{Arrivé au centre de tri}}"/></span>'); }
else if ( _options.display_value == 'archive') { $('.Cmd#status_id#').empty().append('<span><img src="plugins/parcelTracking/core/img/status-archive.png" height="80" title="{{Archivé}}"/></span>'); }
else { $('.Cmd#status_id#').empty().append('<span><img src="plugins/parcelTracking/core/img/status-delayed.png" height="80" title="{{Retardé"}}/></span>'); }
}
jeedom.cmd.update['#status_id#']({display_value:'#status#'});
Le fichier complet :
Widget parcelTracking
Jâai essayĂ© de complĂ©ter le fichier json manuellement mais la traduction nâa pas lieu en effet !
Pas encore prĂ©vu par Jeedom jâimagine
donc câest qlqch que tu nâavais pas jusquâici mais que tu voudrais avoir?
jâavais compris que câĂ©tait un point qui ne fonctionnait pas alors que câĂ©tait le cas dans une de tes anciennes versions de plugins (autre outil de trad par exemple)
ton js est inclu directement dans le html si jâai bien vu, donc pas dâappel Ă include_file()
(<= câest cette mĂ©thode qui effectue la traduction si disponible pour les fichiers js)
et ton html, tu traduis le contenu Ă un moment, car je ne pense pas que le core le fait?
tu utilises toHtml()
dans ton plugin du coup?
je pense quâalors tu dois faire toi la traduction avec un appel du genre translate::exec($content, realpath($filePath));
$content
ici sera le rĂ©sultat de lâappel Ă getTemplate()
et $filepath
⊠le chemin vers ton fichier template (ca sert de clé dans le fichier de traduction)
si quelquâun Ă dĂ©jĂ fait un widget custom traduit, il pourra peut-ĂȘtre rĂ©pondre
et bien sur dans le workflow je dois ajouter les fichier html, je vais faire ca
Je confirme ! Aucune trad jusquâĂ maintenant. Mais je pense quâil serait intĂ©ressant aussi de traduire ces fichiers
Je confirme
Yep
Je vais essayer ca et je te tiens au jus
Thanks a lot
Oui, câest exactement ça.
Jâen ai une flopĂ©e.
$html = template_replace($replace, getTemplate('core', $version, __CLASS__, __CLASS__));
$html = translate::exec($html, 'plugins/' . __CLASS__ . '/core/template/' . $version . '/' . __CLASS__ . '.html');
cache::set(__CLASS__ . 'Widget' . $_version . $this->getId(), $html, 0);
Effectivement, les html sont pas lus et traduis.
Pour les traductions, je suis parti du fr_FR.json dâorigine qui contient dĂ©jĂ les clĂ©s Ă traduire depuis les fichiers .html (créé via traduitjdm)
Top, merci, je testerai.
Oui : {{}}
Alors de mon cĂŽtĂ©, jâai fait Ă peu prĂšs la mĂȘme chose :
$filepath = 'plugins/'.__CLASS__.'/core/template/'.$version.'/'.$template.'.html';
$content = getTemplate('core', $version, $template, 'parcelTracking');
$content = translate::exec($content, $filepath);
return $this->postToHtml($_version, template_replace($replace, $content));
La partie translate
est bien effectuée puisque les {{ }}
disparaissent bien mais la trad ne se fait pas, pourtant jâai bien dans mon json :
"plugins\/parcelTracking\/core\/class\/template\/dashboard\/parcelTracking_dashboard_v4.html": {
...
},
qui correspond au $filepath : plugins/parcelTracking/core/template/dashboard/parcelTracking_dashboard_v4.html
Dans le json fr et dans les autres langues ?
jâai mis uniquement dans le en_US pour le moment
câest fait mais pas testĂ©, tu me tiens informĂ©? et testĂ©, ca fonctionne
Je te confirme, tout est OK
Et du coup jâai trouvĂ© mon erreur qui mâa fait perdre 2h
Le class était en trop
Un grand merci !!
Prochaine étape, tu nous fait un workflow qui écrit nos plugins
MERCI!!!
hors sujet mais je suis occupĂ© Ă tester github copilote dans vscode (version trial 30 jours), câest assez bluffant:
je voulais gĂ©nĂ©rer un appel ajax pour une mĂ©thode de ma class eqLogic (ca câĂ©tait dans ma tĂȘte):
- jâai juste copiĂ© le nom de la mĂ©thode de ma class (dans le press papier donc)
- je suis allez dans mon fichier .js du plugin, je tape juste un espace => bam il me propose tout le code ajax avec presque les bons arguments rĂ©cupĂ©rĂ© du dom pour faire lâappel sur le fichier ajax.php du plugin etc (du classique et jâavais dĂ©jĂ des mĂ©thodes similaires dans le plugin, câest le genre de code bien rĂ©pĂ©titif casse-pied Ă Ă©crire);
jâappuie sur tabulation et tout est fait, je nâai que a corriger la source pour un des paramĂštres. - je vais dans le fichier ajax, pareil je tape un retour Ă la ligne Ă la fin du dernier « elseif », il me rajoute un test sur init(âč action âș) avec les params adĂ©quats et lâappel Ă la mĂ©thode de ma class (de nouveau, trĂšs classique et il y avait dĂ©jĂ une petite dizaine de cas similaire dans le fichier)
et je nâavais absolument rien demandĂ©, aucun prompt tapĂ©, rien
je nâai fait que exactement ce que je viens de dĂ©crire.
donc les github action qui utilisent copilot pour générer le code⊠un jour ca va arriver
Le readme du plugin-template propose de créer une branche prettier
pour que le code soit le plus uniforme possible.
Mais ceci génÚre un petit problÚme avec les fichers de traduction créés par le workflow de traductions:
- Les fichiers sont créés avec une indentation de 4 espaces et
prettier
les modifie avec des indentations de 2 espaces. - Les path des fichiers générés par la traduction ont
\/
comme séparateur de répertoires etprettier
remplace ces\/
par des/
.
Le soucis est que prettier
modifie les fichiers générés par la traduction puis la traduction modifie les fichiers modifiiés par prettier
etcâŠ
Salut,
Probablement quâil est possible de configurer prettier?
Jâai mis 4 espaces car câest ce que traduijdm faisait
A vĂ©rifier ce qui est fait sur les plugins officiels et le core et sâaligner la dessus je dirais.
Concernant lâĂ©chappement des forward slash, prettier a raison, ce nâest pas nĂ©cessaire (mais tolĂ©rĂ©)
Dâailleurs on est obligĂ© de le faire manuellement car les parsers jeedom ne le font pas.
Je lâai fait car les fichiers de traductions officiels ont toujours Ă©tĂ© ainsi et jâai prĂ©fĂ©rĂ© Ă©viter un problĂšme cachĂ© quelque part si je ne le faisais pas.
Dâailleurs ttmraduitjdm le faisait aussi il me semble.
Ce qui est de prettier je ne lâutilise pas car ce quâil fait est rĂ©alisĂ© via extension sur vscode Ă chaque save dâun fichier chez moi.
me suis aussi fait avoir
35k pour 1 plugin âŠ
merci pour ce superbe outils !
Hello,
Il suffit de créer un fichier .prettierignore
Ă la racine du projet. Le contenu de ce fichier doit ĂȘtre:
/core/i18n
/plugin_info/info.json
Il nây a ainsi plus de conflit entre prettier et la traduction.
Pour la traduction des textes présent dans toHTML le souci est le suivant :
En ajoutant Ă la main la traduction dans *.html cela fonctionne parfaitement.
Je ne comprend pas ce que tu montres, je ne vois aucune différence
le bot créé la traduction pour le fichier idPlugin.class.php
car câest dans ce fichier que ce trouve la fonction toHTML, le souci est quâensuite câest le widget qui est affichĂ© donc tonwidget.html
et lĂ la traduction nâest pas prĂ©sente, en lâajoutant Ă la main la traduction se fait correctement.