From 28d8088763471de66f6647f908b4ad639d9ec4e3 Mon Sep 17 00:00:00 2001 From: hasecilu Date: Thu, 17 Oct 2024 12:05:21 -0600 Subject: [PATCH] i18n: Create script to create PO files for translation Script for translators --- .gitignore | 1 + bin/translation.sh | 98 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100755 bin/translation.sh diff --git a/.gitignore b/.gitignore index a2b7d1ef1..1c4d01727 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ build/ src/public/app-dist/ npm-debug.log yarn-error.log +po-*/ *.db !integration-tests/db/document.db diff --git a/bin/translation.sh b/bin/translation.sh new file mode 100755 index 000000000..7e1d9412d --- /dev/null +++ b/bin/translation.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash + +# -------------------------------------------------------------------------------------------------- +# +# Create PO files to make easier the labor of translation. +# +# Info: +# https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html +# https://docs.translatehouse.org/projects/translate-toolkit/en/latest/commands/json2po.html +# +# Dependencies: +# jq +# translate-toolkit +# python-wcwidth +# +# Created by @hasecilu +# +# -------------------------------------------------------------------------------------------------- + +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} |" + 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} |" + done +} + +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 "\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 " --update2 \n\tRecover translation from PO files to localized JSON files" +} + +# Main function ------------------------------------------------------------------------------------ + +# Get script directory to set file path relative to it +file_path="$( + cd -- "$(dirname "${0}")" >/dev/null 2>&1 || exit + pwd -P +)" +paths=("${file_path}/../translations/" "${file_path}/../src/public/translations/") +locales=(cn es fr ro) + +if [ $# -eq 1 ]; then + if [ "$1" == "--clear" ]; then + for path in "${paths[@]}"; do + for locale in "${locales[@]}"; do + [ -d "${path}/po-${locale}" ] && rm -r "${path}/po-${locale}" + done + 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" == "--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 + 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 + elif [ "$1" == "--update2" ]; then + locale="$2" + for path in "${paths[@]}"; do + po2json -t "${path}/en" "${path}/po-${locale}" "${path}/${locale}" + done + else + help + fi +else + help +fi