47 lines
1.5 KiB
Bash
Executable File
47 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "${BASH_SOURCE[0]}")/.."
|
|
|
|
# janky aaah
|
|
domain=$(sed -n '/^\[package\]/,/^\[/s/^name = "\(.*\)"$/\1/p' Cargo.toml)
|
|
version=$(sed -n '/^\[package\]/,/^\[/s/^version = "\(.*\)"$/\1/p' Cargo.toml)
|
|
[ -n "$domain" ] || { echo "error: could not find the package name in Cargo.toml" >&2; exit 1; }
|
|
dir=assets/translations
|
|
pot=$dir/$domain.pot
|
|
|
|
for tool in slint-tr-extractor msginit msgmerge msgcat; do
|
|
command -v "$tool" > /dev/null || { echo "error: '$tool' is not installed, see docs/TRANSLATIONS.md" >&2; exit 1; }
|
|
done
|
|
|
|
fresh=$(mktemp)
|
|
trap 'rm -f "$fresh"' EXIT
|
|
|
|
find ui -name '*.slint' | LC_ALL=C sort | xargs slint-tr-extractor --package-name "$domain" --package-version "$version" -o "$fresh"
|
|
|
|
msgcat --no-wrap "$fresh" > /dev/null || { echo "error: the extracted template is not valid, is a translator comment longer than 76 characters?" >&2; exit 1; }
|
|
|
|
if [ -f "$pot" ] && diff -q <(grep -v '^"POT-Creation-Date:' "$pot") <(grep -v '^"POT-Creation-Date:' "$fresh") > /dev/null; then
|
|
echo "$pot is up to date"
|
|
else
|
|
cp "$fresh" "$pot"
|
|
echo "updated $pot"
|
|
fi
|
|
|
|
for lang in "$@"; do
|
|
po=$dir/$lang/LC_MESSAGES/$domain.po
|
|
if [ -e "$po" ]; then
|
|
echo "$po already exists" >&2
|
|
else
|
|
mkdir -p "$(dirname "$po")"
|
|
msginit --no-translator --locale="$lang" --input="$pot" --output-file="$po"
|
|
fi
|
|
done
|
|
|
|
for po in "$dir"/*/LC_MESSAGES/"$domain".po; do
|
|
[ -e "$po" ] || continue
|
|
msgmerge --update --backup=none --quiet "$po" "$pot"
|
|
echo "merged into $po"
|
|
done
|