Github action pour traduire vos plugins 🌐

Bonjour,

TL;DR

Le code et la documentation sont lĂ : GitHub - Mips2648/plugins-translations

yml d’un workflow typique pouvant ĂȘtre rĂ©utilisĂ© sur vos repos (dans .github/workflows/translations.yml):

name: translate

on:
  workflow_dispatch:
  push:
    branches:
      - beta

jobs:
  auto-translate:
    runs-on: ubuntu-latest
    steps:
      - uses: Mips2648/plugins-translations@v1
        with:
          deepl_api_key: ${{ secrets.DEEPL_API_KEY }}

:warning: il faut donner les droits d’écriture et PR Ă  github action dans les settings de votre repo:


en bas:
image

ce workflow va faire le boulot et ensuite créer un PR sur la branch sur laquelle le workflow a tourné :wink:

A vous de valider 
 ou pas et plus besoin de s’en occuper, ca va tourner à chaque changement que vous faites.

Dans l’esprit de traduitjdm, je vous prĂ©sente aujourd’hui un tool permettant Ă©galement de gĂ©rer les fichiers de traductions de vos plugins.

Vous l’avez peut-ĂȘtre remarquĂ© avec les posts prĂ©cĂ©dents (outils d’install des dĂ©pendances & base de dĂ©mon python): je suis paresseux et j’ai beaucoup de plugins Ă  maintenir donc je ne veux pas faire d’actions rĂ©pĂ©titives et tout ce qui peut ĂȘtre automatisĂ©, doit ĂȘtre automatisĂ© :slight_smile:

Donc si la mĂ©thode pour retrouver les chaines Ă  traduire est quasi identique (analyse statique du code source), l’approche est diffĂ©rente car tout repose sur 
 une action Github (le titre est bien choisi :stuck_out_tongue:) dĂ©clenchĂ©e automatiquement lors de chaque push sur une branche et de lĂ , toutes les traductions sont faites automatiquement, les fichiers sont mis Ă  jour et un PR est gĂ©nĂ©rĂ© sur la branch que je n’ai plus qu’à valider !

  • L’outil prend en charge les 6 langues suivantes (celles sĂ©lectionnables dans la page de config jeedom): fr_FR,en_US,es_ES,de_DE,it_IT,pt_PT
  • La langue source peut ĂȘtre celle de votre choix: fr_FR par dĂ©faut mais si vous voulez Ă©crire votre plugin avec tous les prompts en anglais, c’est possible!
  • lors de la dĂ©couverte de nouveaux textes Ă  traduire, le tool va regarder en prioritĂ© dans les traductions existantes du plugin, ensuite du core, ensuite traduire automatiquement via deepl si vous avez renseignĂ© une clĂ© api comme expliquĂ© dans la documentation (compte gratuit donnant droit Ă  500.000 caractĂšres par mois, c’est plus qu’assez pour 50 Ă  100 plugins par mois!)

Les plus patients d’entre-vous peuvent cliquer sur le rĂ©sumĂ© ci-dessus Ă  prĂ©sent :wink:

et si vous avez une question ou suggestion (c’est pas dit que je dise oui à tout :wink:), la discussion est ouverte :slight_smile:

C’est encore une version « beta Â» mĂȘme si pas mal testĂ©e mais essayez sans crainte, au pire vous n’acceptez pas le PR qui sera fait donc aucun risque d’impact sur votre code :ghost:

edit: j’ai créé un tag ga-translations (ga = Github Action mais s’il faut renommer pour que ca soit plus clair dites-moi)
Je propose de:

  • crĂ©er un nouveau sujet dans la caĂ©gorie Aide Traduction avec le tag ga-translations s’il y a des questions sur l’utilisation du workflow
  • crĂ©er un nouveau sujet dans la catĂ©gorie Aide Traduction sans ce tag s’il y a des questions plus gĂ©nĂ©rale sur les traductions sous Jeedom
  • je laisse ce sujet ouvert s’il y a des infos Ă  communiquer ou prĂ©ciser en rapport avec le workflow
20 « J'aime »

Mis en place sur tous mes plugins, fonctionne Ă  merveille et plus besoin de se soucier de rien !!!

2 « J'aime »

Merci pour l’accompagnement pendant la phase « tests alpha Â» :hugs:

3 « J'aime »

Salut,

Jolie je regarderais ca se trouve c’est meme mieux que notre systùme officiel !!!

4 « J'aime »

TestĂ© sur un plugin et c’est nickel.
Je suis reparti d’une langue fr_FR de base en supprimant les autres langues, certaines lignes non traduites avec traduitjdm ne n’étaient pas traduites non plus. (__AT__)

1 « J'aime »

Je ne l’ai pas prĂ©cisĂ© dans la doc mais:

  • si un fichier est absent, le core va afficher la clĂ© (donc le texte non traduit)
  • si une clĂ© est absente d’un fichier, pareil le core affiche le texte non traduit
  • si une clĂ© est prĂ©sente mais pas de traduction, le core affiche aussi le texte non traduit

C’est pour cela que par dĂ©faut les fichiers ne sont pas gĂ©nĂ©rĂ©s s’il n’y a rien Ă  y mettre et qu’il existe l’option pour ne pas gĂ©nĂ©rer les entrĂ©es sans traductions => c’est lĂ©gĂšrement plus optimisĂ© Ă  l’affichage puisque le core stop la recherche un peu plus tĂŽt mais je pense que c’est nĂ©gligeable.
Donc par dĂ©faut les fichiers sont gĂ©nĂ©rĂ©s avec traduction vide (si vous n’avez pas activĂ© deepl), cela permet de repĂ©rer trĂšs vite les traductions manquantes Ă  complĂ©tĂ©e manuellement tout en n’ayant aucun impact sur votre plugin (il peut partir en beta/stable comme ça, au pire il n’est qu’à moitiĂ© traduit)


mais lorsque vous aurez gouté au traduction full auto, vous ne reviendrez pas en arriÚre :wink:

1 « J'aime »

Oui c’est mĂȘme grisant de dĂ©ployer sur tous les plugins :slight_smile:

Il traduit aussi la description du plugin dans info.json (@Loic dommage que utilization ne soit pas traduisible en passant :wink: ) voir le nom en lui mĂȘme !

Reste plus que la traduction de la doc :wink:

1 « J'aime »

Concernant la doc, j’avais (Ă©videment) ca en tĂȘte aussi :wink:
le fait est que perso j’ai un repo sĂ©parĂ© pour toute ma doc et que j’ai dĂ©jĂ  un pipeline de traduction semi-auto dessus depuis des annĂ©es donc ce n’était pas ma prioritĂ© (que je peux documenter si certains sont intĂ©ressĂ©s)

Mais cela serait possible de rajouter cela; la difficultĂ© c’est de savoir quelle phrase correspond Ă  quelle traduction lorsqu’il y a un changement du contenu et donc en auto ca reviendra vite Ă  tout retraduire Ă  chaque fois; Ă  voir ce que ca donne en terme de « consommation Â» de quota.

Apparemment 12500 mots sur ma plus grosse doc x 5, ça va

Ou tu fais un diff et tu ne traduits que la diff

ou je « stock Â» chaque ligne du md avec la traduction gĂ©nĂ©rĂ©e pour les rĂ©utiliser aux runs suivants, ca deviendra une mĂ©moire de traduction en quelque sorte.

Une version aprĂšs pourrait mĂȘme calculer la distance entre 2 chaines (genre distance de Levenshtein) pour « suggĂ©rer Â» une ancienne traduction sans rapprochant, voir la rĂ©utiliser automatiquement selon un pourcentage dĂ©fini par le workflow

bref, il y a moyen de s’amuser :slight_smile:
faut pas que ca devienne trop long non plus, je note l’idĂ©e et on va laisser mĂ»rir quelques nuits :grin:

1 « J'aime »

Avec la température ça va mûrir plus vite non ?

1 « J'aime »

C’est ce que j’ai fait pour le systĂšme officiel en gros chaque traduction est stockĂ© en base de donnĂ©es. Quand y’a besoin de traduire une phrase (je dĂ©coupe pas phrase dans les doc c’est le plus compliquĂ© surtout quand y’a des morceaux Ă  pas traduire) je regarde d’abord dans le plugin lui mĂȘme si elle existe dĂ©jĂ  (le json mais aussi ce que j’ai traduis pour la doc) si ça existe pas je regarde dans la base globale (le core et tous les plugins) si ça existe pas je demande Ă  Google de traduire la phrase.

1 « J'aime »

486 673 caractùres pour 15 plugins faits. M’en reste 1 :joy:

mais comment est-ce possible?

je suis à 274.000 pour plus de 25 plugins dans les 5 langues (y compris tous mes tests pendant le développement)

t’écris des romans? :joy:

J’ai des plugins avec des traductions de noms de commandes Ă©normes. (Smartthigns/homeconnect/lgthinq)

Ou alors tu as fait comme moi les premiùres fois
 mis en place le yml et puis fait plusieurs modifications qui chaque fois relancent une nouvelle traduction par deepl.

Du coup la solution c’est de mettre en place le yml, puis merger le pr et ensuite on fait les modifs nĂ©cessaires

Merci :pray:

Mis en place sur import2calendar et frigate.

J’utilisais dĂ©jĂ  Deepl pour les traductions du plugin JeeMate, mais Ă  la main, quel gain de temps :+1:

1 « J'aime »

Merci 1000 fois @Mips !!

Je repoussai la partie traduction de mes plugins de jour en jour :smiley:
Je viens de mettre en place le workflow pour le plugin percelTracking. Résultat bluffant en moins de 15min !

Au boulot pour Verisure et myBMW :muscle:

1 « J'aime »

Un immense bravo à toi @Mips je viens de le mettre en place pour les plugins Elm Touch, Sure Petcare et Wled et çà marche du tonnerre.
Je ne suis capable de juger que la traduction en anglais mais j’ai fait trùs peu de retouches.

1 « J'aime »

Hello @Mips,

En peaufinant les trad du plugin parcelTracking, je m’aperçois que les fichiers des widgets (dashboard et mobile) ne sont pas traduits.
Envisageable de rajouter cela si techniquement possible ? Ou sinon comment fais-tu pour tes widgets ?
Merci d’avance

Xav