From f31a4865c337d7052f7d832d48d0befdbb0de1d9 Mon Sep 17 00:00:00 2001 From: hasecilu Date: Wed, 20 Nov 2024 12:35:44 -0600 Subject: [PATCH 1/2] bin(translation): Refactor script and add new locales to the list - Check if JSON files exists before counting keys - New locales: - German - Portuguese, Brazil - Chinese, Taiwan --- bin/translation.sh | 78 +++++++++++-------- .../translations/pt_br/translation.json | 1 + src/public/translations/tw/translation.json | 1 + 3 files changed, 47 insertions(+), 33 deletions(-) create mode 100644 src/public/translations/pt_br/translation.json create mode 100644 src/public/translations/tw/translation.json diff --git a/bin/translation.sh b/bin/translation.sh index 7e1d9412d..4375303b9 100755 --- a/bin/translation.sh +++ b/bin/translation.sh @@ -17,17 +17,45 @@ # # -------------------------------------------------------------------------------------------------- +number_of_keys() { + [ -f "$1" ] && jq 'path(..) | select(length == 2) | .[1]' "$1" | wc -l || echo "0" +} + stats() { # Print the number of existing strings on the JSON files for each locale - s=$(jq 'path(..) | select(length == 2) | .[1]' "${paths[0]}/en/server.json" | wc -l) - c=$(jq 'path(..) | select(length == 2) | .[1]' "${paths[1]}/en/translation.json" | wc -l) - echo "|locale |server strings |client strings |" - echo "|-------|---------------|---------------|" - echo "| en | ${s} | ${c} |" + s=$(number_of_keys "${paths[0]}/en/server.json") + c=$(number_of_keys "${paths[1]}/en/translation.json") + echo "| locale |server strings |client strings |" + echo "|--------|---------------|---------------|" + echo "| en | ${s} | ${c} |" for locale in "${locales[@]}"; do - s=$(jq 'path(..) | select(length == 2) | .[1]' "${paths[0]}/${locale}/server.json" | wc -l) - c=$(jq 'path(..) | select(length == 2) | .[1]' "${paths[1]}/${locale}/translation.json" | wc -l) - echo "| ${locale} | ${s} | ${c} |" + s=$(number_of_keys "${paths[0]}/${locale}/server.json") + c=$(number_of_keys "${paths[1]}/${locale}/translation.json") + n1=$(((8 - ${#locale}) / 2)) + n2=$((n1 == 1 ? n1 + 1 : n1)) + echo "|$(printf "%${n1}s")${locale}$(printf "%${n2}s")| ${s} | ${c} |" + done +} + +update_1() { + # Update PO files from English and localized JSON files as source + # NOTE: if you want a new language you need to first create the JSON files + # on their corresponding place with `{}` as content to avoid error on `json2po` + local locales=("$@") + for path in "${paths[@]}"; do + for locale in "${locales[@]}"; do + json2po -t "${path}/en" "${path}/${locale}" "${path}/po-${locale}" + done + done +} + +update_2() { + # Recover translation from PO files to localized JSON files + local locales=("$@") + for path in "${paths[@]}"; do + for locale in "${locales[@]}"; do + po2json -t "${path}/en" "${path}/po-${locale}" "${path}/${locale}" + done done } @@ -35,11 +63,11 @@ help() { echo -e "\nDescription:" echo -e "\tCreate PO files to make easier the labor of translation" echo -e "\nUsage:" - echo -e "\t./translation.sh [--stats] [--update ] [--update2 ]" + echo -e "\t./translation.sh [--stats] [--update1 ] [--update2 ]" echo -e "\nFlags:" echo -e " --clear\n\tClear all po-* directories" echo -e " --stats\n\tPrint the number of existing strings on the JSON files for each locale" - echo -e " --update \n\tUpdate PO files from English and localized JSON files as source" + echo -e " --update1 \n\tUpdate PO files from English and localized JSON files as source" echo -e " --update2 \n\tRecover translation from PO files to localized JSON files" } @@ -51,7 +79,7 @@ file_path="$( pwd -P )" paths=("${file_path}/../translations/" "${file_path}/../src/public/translations/") -locales=(cn es fr ro) +locales=(cn de es fr pt_br ro tw) if [ $# -eq 1 ]; then if [ "$1" == "--clear" ]; then @@ -62,34 +90,18 @@ if [ $# -eq 1 ]; then done elif [ "$1" == "--stats" ]; then stats - elif [ "$1" == "--update" ]; then - # Update PO files from English and localized JSON files as source - for path in "${paths[@]}"; do - for locale in "${locales[@]}"; do - json2po -t "${path}/en" "${path}/${locale}" "${path}/po-${locale}" - done - done + elif [ "$1" == "--update1" ]; then + update_1 "${locales[@]}" elif [ "$1" == "--update2" ]; then - # Recover translation from PO files to localized JSON files - for path in "${paths[@]}"; do - for locale in "${locales[@]}"; do - po2json -t "${path}/en" "${path}/po-${locale}" "${path}/${locale}" - done - done + update_2 "${locales[@]}" else help fi elif [ $# -eq 2 ]; then - if [ "$1" == "--update" ]; then - locale="$2" - for path in "${paths[@]}"; do - json2po -t "${path}/en" "${path}/${locale}" "${path}/po-${locale}" - done + if [ "$1" == "--update1" ]; then + update_1 "$2" elif [ "$1" == "--update2" ]; then - locale="$2" - for path in "${paths[@]}"; do - po2json -t "${path}/en" "${path}/po-${locale}" "${path}/${locale}" - done + update_2 "$2" else help fi diff --git a/src/public/translations/pt_br/translation.json b/src/public/translations/pt_br/translation.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/src/public/translations/pt_br/translation.json @@ -0,0 +1 @@ +{} diff --git a/src/public/translations/tw/translation.json b/src/public/translations/tw/translation.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/src/public/translations/tw/translation.json @@ -0,0 +1 @@ +{} From 945d5412b06b42da881a4979523a05408fbb8057 Mon Sep 17 00:00:00 2001 From: hasecilu Date: Wed, 20 Nov 2024 12:40:59 -0600 Subject: [PATCH 2/2] i18n: Update Spanish translation --- src/public/translations/es/translation.json | 26 +++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/public/translations/es/translation.json b/src/public/translations/es/translation.json index 4bf01df74..c7563987c 100644 --- a/src/public/translations/es/translation.json +++ b/src/public/translations/es/translation.json @@ -51,7 +51,11 @@ "chosen_actions": "Acciones elegidas", "execute_bulk_actions": "Ejecutar acciones en bloque", "bulk_actions_executed": "Las acciones en bloque se han ejecutado con éxito.", - "none_yet": "Ninguna todavía... agrega una acción haciendo clic en una de las disponibles arriba." + "none_yet": "Ninguna todavía... agregue una acción haciendo clic en una de las disponibles arriba.", + "labels": "Etiquetas", + "relations": "Relaciones", + "notes": "Notas", + "other": "Otro" }, "clone_to": { "clone_notes_to": "Clonar notas a...", @@ -1057,7 +1061,12 @@ "theme_label": "Tema", "override_theme_fonts_label": "Sobreescribir fuentes de tema", "light_theme": "Claro", - "dark_theme": "Oscuro" + "dark_theme": "Oscuro", + "layout": "Disposición", + "layout-vertical-title": "Vertical", + "layout-horizontal-title": "Horizontal", + "layout-vertical-description": "la barra del lanzador está en la izquierda (por defecto)", + "layout-horizontal-description": "la barra de lanzamiento está debajo de la barra de pestañas, la barra de pestañas ahora tiene ancho completo." }, "zoom_factor": { "title": "Factor de zoom (solo versión de escritorio)", @@ -1183,6 +1192,8 @@ "backup_now": "Realizar copia de seguridad ahora", "backup_database_now": "Realizar copia de seguridad de la base de datos ahora", "existing_backups": "Copias de seguridad existentes", + "date-and-time": "Fecha y hora", + "path": "Ruta", "database_backed_up_to": "Se ha realizado una copia de seguridad de la base de datos en", "no_backup_yet": "no hay copia de seguridad todavía" }, @@ -1439,7 +1450,9 @@ "close_other_tabs": "Cerrar otras pestañas", "close_right_tabs": "Cerrar pestañas a la derecha", "close_all_tabs": "Cerras todas las pestañas", + "reopen_last_tab": "Reabrir última pestaña cerrada", "move_tab_to_new_window": "Mover esta pestaña a una nueva ventana", + "copy_tab_to_new_window": "Copiar esta pestaña a una ventana nueva", "new_tab": "Nueva pestaña" }, "toc": { @@ -1531,5 +1544,14 @@ "description": "las herramientas de edición aparecen en la pestaña de la cinta \"Formato\")." } } + }, + "electron_context_menu": { + "add-term-to-dictionary": "Agregar \"{{term}}\" al diccionario.", + "cut": "Cortar", + "copy": "Copiar", + "copy-link": "Copiar enlace", + "paste": "Pegar", + "paste-as-plain-text": "Pegar como texto plano", + "search_online": "Buscar \"{{term}}\" con {{searchEngine}}" } }