Come aggiungere una nuova lingua su Superset - RIOS
Come aggiungere una nuova lingua su Superset
09 September 2022
Introduzione
Apache Superset è una moderna piattaforma open source per l'esplorazione e la visualizzazione dei dati che sostituisce strumenti proprietari come Tableau, PowerBI e Looker per molte organizzazioni. Nell’attuale versione (1.5.0) Superset è disponibile in ben 14 lingue:
- Inglese
- Spagnolo
- Italiano
- Francese
- Cinese
- Giapponese
- Tedesco
- Portoghese
- Portoghese Brasiliano
- Russo
- Coreano
- Slovacco
- Sloveno
- Olandese
Nonostante la disponibilità di tale pacchetto lingue, nella sua configurazione di base Superset non offre all’utente la possibilità di scegliere la lingua di preferenza via User Interface, ritrovandosi come lingua di default l’inglese. Inoltre, benché il pacchetto lingue sia piuttosto ampio, molte delle traduzioni disponibili risultano approssimative o incomplete, senza contare che si potrebbe avere la necessità di utilizzare Superset in lingue diverse da quelle attualmente disponibili (ad es. Greco, Polacco, Arabo, ecc.)
In questo articolo vedremo come cambiare la lingua di default, inserire un selettore di lingua e aggiungere una lingua nuova, non presente nel language package di Superset.
Indice
Prima di iniziare
Per poter cambiare le impostazioni della lingua è necessario agire sulle configurazioni di default.
Superset è dotato di un file di configurazione (./apache-superset-1.5.0/superset/config.py
) in cui sono definiti tutti i parametri e i valori predefiniti.
L’idea generale non è quella di modificare direttamente il file config.py
ma di creare un nuovo configuration file con il quale effettuare un overriding delle configurazioni di default, nel quale inserire solamente le configurazioni che vogliamo modificare.
Per eseguire l’overriding delle configurazioni puoi fare riferimento alla documentazione ufficiale, consultando la sezione Configuring Superset. (https://superset.apache.org/docs/installation/configuring-superset)
Dal config file è dunque possibile cambiare le impostazioni della lingua facendo riferimento alle seguenti variabili:
# Lingua di default
BABEL_DEFAULT_LOCALE = "en"
# La directory in cui sono contenute i file delle lingue
BABEL_DEFAULT_FOLDER = "superset/translations"
# Le traduzioni consentite (e presenti nella cartella “superset/translation”)
LANGUAGES = {
"en": {"flag": "us", "name": "English"},
"es": {"flag": "es", "name": "Spanish"},
"it": {"flag": "it", "name": "Italian"},
"fr": {"flag": "fr", "name": "French"},
"zh": {"flag": "cn", "name": "Chinese"},
"ja": {"flag": "jp", "name": "Japanese"},
"de": {"flag": "de", "name": "German"},
"pt": {"flag": "pt", "name": "Portuguese"},
"pt_BR": {"flag": "br", "name": "Brazilian Portuguese"},
"ru": {"flag": "ru", "name": "Russian"},
"ko": {"flag": "kr", "name": "Korean"},
"sk": {"flag": "sk", "name": "Slovak"},
"sl": {"flag": "si", "name": "Slovenian"},
"nl": {"flag": "nl", "name": "Dutch"},
}
# Il selettore delle lingue (in alto a destra nella UI)
LANGUAGES = {}
Come è possibile notare, la variabile LANGUAGES appare due volte nel file di configurazione: la prima indica le lingue consentite e attualmente presenti nella distribuzione di Superset, nella seconda (vuota) è possibile inserire le lingue (tra quelle disponibili) che dovranno apparire nel selettore.
Cambiare lingua di default
Per cambiare la lingua di default è necessario assegnare alla variabile BABEL_DEFAULT_LOCALE il language code di due lettere (di default "en") della lingua desiderata. La lingua scelta deve essere una di quelle presenti in LANGUAGES.
Ad esempio, se volessimo scegliere lo spagnolo:BABEL_DEFAULT_LOCALE = "es"
Così facendo Superset verrà avviato automaticamente in lingua spagnola.
Da notare che nel file di configurazione si possono trovare due codici:
- language code (https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)
- flag/country code (https://it.wikipedia.org/wiki/ISO_3166-1)
Il primo indica il codice della lingua scelta (da assegnare alla variabile BABEL_DEFAULT_LOCALE
), il secondo invece è il codice della bandiera che appare nel selettore della lingua.
Benché alcune lingue abbiano lo stesso valore per lingua e bandiera, per alcune lingue i codici risultano differenti tra loro.
Ad esempio, per il cinese, il language code è "zh"
mentre il flag code è "cn"
.
Inserire il selettore di lingue nella UI
Come visto in precedenza, dal file di configurazione è possibile abilitare il selettore delle lingue, inserendo al suo interno le lingue desiderate. Tale impostazione di default è disattivata.
Per attivare il selettore delle lingue è necessario inserire nella variabile LANGUAGES (la seconda che appare nel config file, cioè quella vuota) le lingue desiderate tra quelle disponibili.
Ad esempio, se volessimo inserire inglese, spagnolo e italiano:
LANGUAGES = {
"en": {"flag": "us", "name": "English"},
"es": {"flag": "es", "name": "Spanish"},
"it": {"flag": "it", "name": "Italian"},
}
Dopo aver inserito le lingue nel selettore, queste ultime appariranno in alto a destra nella UI di Superset:
Aggiornare una lingua
Molte delle traduzioni presenti in Superset sono incomplete o approssimative e proprio per questo motivo, attualmente, la lingua di default è l’inglese e il selettore delle lingue è disattivato.
Per aggiornare una delle lingue disponibili, in modo tale da correggere eventuali errori di traduzione o inserire informazioni mancanti, è possibile modificare i language files (file PO) presenti in .apache-superset-1.5.0/superset/translation
, dove è ce n’è uno per ogni lingua.
Per modificare il language files accedere al terminale ed eseguire le seguenti istruzioni:
1. Accedere alla main folder di Superset
cd ./apache-superset-1.5.0
2. Aggiornare il template file superset/translations/messages.pot
./scripts/babel_update.sh
3. Aggiornare la traduzione modificando il file PO
A questo punto puoi modificare il file PO in modo tale da aggiornare la traduzione. È possibile modificare il file PO con un qualsiasi editor di testo, ma è possibile farlo più agevolmente utilizzando Poedit (https://poedit.net/features).
Ad esempio, volendo modificare il language file dell’italiano con Poedit:
4. Convertire il file PO in JSON
Una volta aggiornato il file PO della lingua desiderata, è necessario convertirlo in un file JSON.
- Installare il pacchetto po2json:
npm install -g po2json
Con questa istruzione andremo a installare po2json nella cartella ./apache-superset-1.5.0/scripts
- Convertire tutti i file PO in file JSON:
./scripts/po2json.sh
5. Compilare i cataloghi di traduzione in file binari MO
Affinché le traduzioni abbiano effetto, è necessario compilare cataloghi di traduzione in file MO binari.
pybabel compile -d superset/translations
Completati i passaggi appena descritti il language file che hai deciso di modificare sarà correttamente aggiornato e pronto per essere utilizzato.
Creare un dizionario per una nuova lingua
Come detto all’inizio, Superset mette a disposizione molte lingue, ma si potrebbe avere la particolare esigenza di utilizzare una lingua non presente tra quelle disponibili. Per ovviare a tal problema puoi creare da zero un dizionario per una nuova lingua. Come esempio inseriremo una lingua non presente in Superset, ossia il greco.
Per creare un nuovo dizionario eseguire da terminale le seguenti istruzioni:
1. Accedere alla main folder di Superset
cd ./apache-superset-1.5.0
2. Installare i requirements per la creazione del nuovo dizionario
pip install -r superset/translations/requirements.txt
3. Creare il dizionario per la nuova lingua
pybabel init -i superset/translations/messages.pot -d superset/translations -l LANGUAGE_CODE
Sostituire LANGUAGE_CODE
con il codice della lingua che si desidera aggiungere: per il greco il language code è el.
pybabel init -i superset/translations/messages.pot -d superset/translations -l el
Con questa istruzione verrà creata la cartella el
in ./superset/translations
, dove troveremo il file PO per la lingua greca. Il file PO generato non presenta nessuna parola della lingua di destinazione; quindi le parole/espressioni vanno tradotte nella lingua di destinazione da zero.
3. Aggiornare il file PO
Ora non rimane che effettuare la traduzione delle informazioni contenuto nel file PO nella lingua di destinazione. Per fare ciò ripetere tutti i passaggi descritti nel paragrafo precedente Aggiornare una lingua.
In questo esempio abbiamo usato Poedit per tradurre dall’inglese al greco le parole che appaiono nella home page:
4. Aggiornare il config file
Infine, affinché si possa utilizzare la nuova lingua, è necessario inserirla nel config file tra le lingue consentite/disponibili, tenendo conto della già menzionata differenza tra language code e flag code.
Inoltre, puoi decidere se selezionare la nuova lingua creata come lingua di default, inserirla nel selettore delle lingue o entrambi:
BABEL_DEFAULT_LOCALE = "el"
LANGUAGES = {
"en": {"flag": "us", "name": "English"},
"es": {"flag": "es", "name": "Spanish"},
"it": {"flag": "it", "name": "Italian"},
"fr": {"flag": "fr", "name": "French"},
"zh": {"flag": "cn", "name": "Chinese"},
"ja": {"flag": "jp", "name": "Japanese"},
"de": {"flag": "de", "name": "German"},
"pt": {"flag": "pt", "name": "Portuguese"},
"pt_BR": {"flag": "br", "name": "Brazilian Portuguese"},
"ru": {"flag": "ru", "name": "Russian"},
"ko": {"flag": "kr", "name": "Korean"},
"sk": {"flag": "sk", "name": "Slovak"},
"sl": {"flag": "si", "name": "Slovenian"},
"nl": {"flag": "nl", "name": "Dutch"},
"el": {"flag": "gr", "name": "Greek"},
}
LANGUAGES = {
"en": {"flag": "us", "name": "English"},
"es": {"flag": "es", "name": "Spanish"},
"it": {"flag": "it", "name": "Italian"},
"el": {"flag": "gr", "name": "Greek"},
}
Alla fine del processo otterremo il seguente risultato:
Conclusioni
In questo articolo abbiamo visto come poter gestire il pacchetto lingue di Superset in modo tale da modificare la lingua di default, abilitare la selezione delle lingue, modificare/aggiornare le lingue disponibili e aggiungere una nuova lingua non presente nel pacchetto di base.
Attualmente l’unica lingua che presenta una traduzione completa è quella inglese e le altre disponibili non vengono incluse nella installazione di default in quanto ancora incomplete.
Se alla fine di questa guida sei riuscito a fornire una traduzione completa per una specifica lingua, puoi contribuire ad aggiornare il pacchetto lingue di Superset tramite l’apposita guida su GitHub (https://github.com/apache/superset/blob/master/CONTRIBUTING.md#enabling-language-selection).