A GitHub action to automatically generate translation files for your plugins and optionally automatically translated texts if all languages you want.
The idea is to trigger a new workflow with this Github action on each push to a branch on your repository (dev or beta branch, as you prefer). This workflow will:
.php
, .json
and .js
) located in sub-directories core
, desktop
and plugin_info
(and sub-directories of these of course);translations
and push changes on it (or adapt files if branch exists already);Tip
Do not forget to quickly review the PR before pushing new changes in your branch otherwise the action will redo all the woks already done but not yet reviewed because the branch
translations
is not used as a source for translations. It is not an issue as such, it will works without problem but it will consume twice deepl (free) credits for the same translations.
First, you must grant Github actions write permission and allow to create pull requests. To do this, go to your repository settings, Actions tab and then General.
On the bottom of the page you will see corresponding permissions settings:
Do not forget to save changes.
Create a ´.github/workflows/translations.yml´ file in your repository and put the following content:
name: translate
on:
workflow_dispatch:
push:
branches:
- beta
jobs:
auto-translate:
runs-on: ubuntu-latest
steps:
- uses: Mips2648/plugins-translations@main
Save it and commit in your beta branch.
It will immediately run and generate translations file for your plugin for following language: de_DE, en_US & es_ES, push changes, if any, in a new branch translations
of your repository and create a pull request that you can review and eventually validate. It couldn't be easier ;-)
If you use a compatible editor like vscode, when editing the workflow you should be able to get auto-completion for options.
As any github action, you should use the with:
keyword for optional input parameter as follow:
name: translate
on:
workflow_dispatch:
push:
branches:
- beta
jobs:
auto-translate:
runs-on: ubuntu-latest
steps:
- uses: Mips2648/plugins-translations@main
with:
deepl_api_key: ${{ secrets.DEEPL_API_KEY }}
include_empty_translation: false
target_languages: "en_US,es_ES,de_DE,it_IT,pt_PT"
All inputs are optional. If not set, defaults values will be used.
Name | Description | type | Default |
---|---|---|---|
source_language |
Source language for translations, must be one of the following value: fr_FR , en_US , es_ES , de_DE , it_IT , pt_PT (incompatible with use_core_translations) |
string |
fr_FR |
target_languages |
Target languages for translations, must be a list of comma separated languages without spaces (allowed languages are: fr_FR , en_US , es_ES , de_DE , it_IT , pt_PT ) |
string |
en_US,es_ES,de_DE |
deepl_api_key |
deepl API KEY for automatic translation; If provided, missing translations will be automatically translated using deepl API. Please create a free account on https://www.deepl.com | string |
'' |
include_empty_translation |
Include prompts without translation language files | boolean |
true |
use_core_translations |
Tool will use translations from Jeedom core for missing plugin translations (before calling deepl api if available) (only if source_language is fr_FR) | boolean |
true |
generate_source_language_translations |
The translation file corresponding to the source language will be generated (which is useless) | boolean |
false |
debug |
Set log level to debug | boolean |
false |
Currently not compatible with core translations but should be ok regarding existing plugin translations and automatic translation with help of deepl api
If provided, all your prompts will be translated!
Warning
Do not put your key in clear in the workflow but save it as actions secrets.
Go to you repository Settings, then Secrets and variables tab and finally Actions. Click on New repository secret, choose a name (e.g. DEEPL_API_KEY but could be anything) and store the API key you will find in your deepl account.
Then to use it in the wokflow you can use following syntax ${{ secrets.DEEPL_API_KEY }}
, where DEEPL_API_KEY
is the name of the secret.
Example:
with:
deepl_api_key: ${{ secrets.DEEPL_API_KEY }}
This is preferable to have this params deactivated but if you want to be able to manually translate, then you need this. This param is useless if you provide a valid deepl API key because all your translations will be completed (unless you reach the limit)
It is relevant to use core translations by default for coherence in user interface but if you don't trust or don't like them, you can deactivate this feature.
If you select a source_language different than fr_FR
, this setting will be forced to false.
Why would you use this feature? It is completely useless :-)
If set to true
, the file fr_FR.json
, e.g., will be generated if source language is fr_FR
but it is useless because the translation always equals the key.
Because issues happen.
Some words needs to be have a given translations. e.g. commande in french could mean order or command, type in french could mean kind or type or even guy and in the context of Jeedom and home automation, we should force specific translation to avoid weird result. To achieve this, we have the concept of glossaries which will contain these specific edge cases. You don't have to manage anything within your workflow for that, this Github action is taking care for you.
But it might happen that you face a case not yet foreseen, so please find below the procedure to add new word in the glossary.
In the src
folder you will find one json file by source language corresponding to the glossary for that language. The naming convention is [lang]_glossary.json
; e.g. fr_FR_glossary.json
.
This file must contain one key by target language and in each, one key by "word" => "translation".
The words must be in the singular form, lower case and preferably in alphabetical order to easily spot them.
Example for fr_FR glossary:
{
"en_US": {
"commande": "command",
"type": "type",
"pièce": "room"
}
}
I've almost no knowledge in others languages than FR and EN, so the only glossary that I could start is the one for fr_FR to en_US. So, please, if you know typical mistakes that automatic translations tools do when translating to DE, ES, IT or PT, do not hesitate to submit a pull-request.