Github action pour traduire vos plugins 🌐

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?

:slight_smile:

Oui fichier html.
Alors 2 exemples :

  1. 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>
  1. 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 :wink:

Je confirme

Yep

Je vais essayer ca et je te tiens au jus

Thanks a lot :slight_smile:

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 :+1: :+1:

Et du coup j’ai trouvĂ© mon erreur qui m’a fait perdre 2h :slight_smile:

Le class était en trop :sweat_smile:

Un grand merci !!

1 « J'aime »

Prochaine étape, tu nous fait un workflow qui écrit nos plugins :wink:

MERCI!!!

2 « J'aime »

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 et prettierremplace 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 :roll_eyes:

35k pour 1 plugin 
 :sweat_smile::sweat_smile::sweat_smile:


merci pour ce superbe outils !
:heart:

1 « J'aime »

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. :slight_smile:

1 « J'aime »

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.