The pipette part is already working quite nice but need to be finished. The widgets part needs more work...
124 lines
4.1 KiB
Bash
Executable File
124 lines
4.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# This script iterates through interface translation files,
|
|
# moves comments to the front, puts translated strings next,
|
|
# and finally looks for untranslated/missing strings by matching
|
|
# against "default" which it then adds to the translation, each
|
|
# line prepended by "!".
|
|
#
|
|
# Developers should run it from the project root after receiving
|
|
# a translation file from a translator:
|
|
# cp /tmp/new_japanese_translation rtdata/languages/Japanese
|
|
# ./tools/generateTranslationDiffs "Japanese"
|
|
#
|
|
# Running the script without an argument iterates through all files.
|
|
#
|
|
# Locale files are generated automatically:
|
|
# - English (UK)
|
|
# - Polish (Latin Characters)
|
|
|
|
tmp=temp_file
|
|
if [[ -w $tmp ]]; then
|
|
rm -v "$tmp"
|
|
fi
|
|
|
|
abort () {
|
|
printf "%s\n" "" "Aborting"
|
|
rm -v "$tmp"
|
|
exit 1
|
|
}
|
|
|
|
trap 'abort' HUP INT QUIT ABRT TERM
|
|
|
|
|
|
cd "rtdata/languages" || { printf "%s\n" "You must run this script from the root of the project."; exit 1; }
|
|
# Build array of all interface translation files, or use user-specified ones only
|
|
unset langFiles
|
|
if [[ $# = 0 ]]; then
|
|
while read -r; do
|
|
langFiles+=("$REPLY")
|
|
done < <(find . -not -iname "default" -not -iname "LICENSE" -not -iname "README" -not -iname "*.sh" -not -iname ".*" -not -iname "$tmp" -not -iname "English (UK)" -not -iname "Polish (Latin Characters)" | sort)
|
|
else
|
|
langFiles=("$@")
|
|
for langFile in "${langFiles[@]}"; do
|
|
if [[ ! -w $langFile ]]; then
|
|
printf "%s\n" "File \"$langFile\" not found or not writable." ""
|
|
exit 1
|
|
fi
|
|
done
|
|
fi
|
|
|
|
getComments () {
|
|
grep -E "^#.+" "$1" | sort -Vu
|
|
}
|
|
|
|
getChanged () {
|
|
grep -Ev '^(!|#|$)' "$1" | sort -Vu
|
|
}
|
|
|
|
getUnchanged () {
|
|
grep -E "^\!.+" "$1" | sort -Vu
|
|
}
|
|
|
|
# First thing, fix default, so move comments to front, then strip the rest of any "!" and duplicates.
|
|
dos2unix default 2>/dev/null
|
|
getComments default > "$tmp"
|
|
getChanged default >> "$tmp"
|
|
mv "$tmp" "default"
|
|
|
|
i=1
|
|
printf "%s\n" "Digging through ${#langFiles[@]} file(s). This may take a while."
|
|
ttot1="$(date +%s)"
|
|
for file in "${langFiles[@]}"; do
|
|
t1="$(date +%s)"
|
|
printf "%02d - ${file#.*/}" "$i"
|
|
dos2unix "$file" 2>/dev/null
|
|
unset trLines newLines
|
|
# Fill trLines with translated text
|
|
trLines+=("$(getChanged "$file")")
|
|
|
|
# KEY;String
|
|
# Match "default" keys with those in current translation file. If no match, add !KEY;String
|
|
while read -r 'defLine'; do
|
|
if [[ ! "${trLines[@]}" =~ "${defLine%%;*}" ]]; then
|
|
newLines+=("!${defLine}")
|
|
fi
|
|
done < <(getChanged default)
|
|
|
|
# Form final translation file
|
|
if [[ -n "$(getComments "$file")" ]]; then
|
|
printf "%s\n" "$(getComments "$file")" "" >> "$tmp"
|
|
fi
|
|
if [[ -n "${trLines[@]}" ]]; then
|
|
printf "%s\n" "${trLines[@]}" "" >> "$tmp"
|
|
fi
|
|
if [[ -n "${newLines[@]}" ]]; then
|
|
printf "%s\n" "!!!!!!!!!!!!!!!!!!!!!!!!!" "! Untranslated keys follow; remove the ! prefix after an entry is translated." "!!!!!!!!!!!!!!!!!!!!!!!!!" "" "${newLines[@]}" >> "$tmp"
|
|
fi
|
|
mv "$tmp" "$file"
|
|
t2="$(date +%s)"
|
|
tt=$((t2-t1))
|
|
printf "%s\n" " - took $tt seconds"
|
|
((i++))
|
|
done
|
|
|
|
case "${langFiles[@]}" in
|
|
*"./English (US)"*) printf "%s\n" "Creating English (UK) file"
|
|
getComments "English (US)" > "English (UK)"
|
|
grep -Ei ".+;.*(color|behavior|center).*" default | \
|
|
sed -e '/^#/d' -e 'h;s/^[^;]*;//; s/olor/olour/g; x;s/;.*//;G;s/\n/;/' \
|
|
-e 'h;s/^[^;]*;//; s/ehavior/ehaviour/g; x;s/;.*//;G;s/\n/;/' \
|
|
-e 'h;s/^[^;]*;//; s/center/centre/g; x;s/;.*//;G;s/\n/;/' \
|
|
-e 'h;s/^[^;]*;//; s/Center/Centre/g; x;s/;.*//;G;s/\n/;/' >> English\ \(UK\)
|
|
grep -Evi ".+;.*(color|behavior|center).*" "English (US)" | grep -Ev "^#" >> "English (UK)"
|
|
;;&
|
|
*"./Polish"*) printf "%s\n" "Creating Polish (Latin Characters) file"
|
|
sed 'y/ĄĆĘŁŃÓŚŹŻąćęłńóśźż/ACELNOSZZacelnoszz/' < Polish > "Polish (Latin Characters)"
|
|
;;&
|
|
esac
|
|
ttot2="$(date +%s)"
|
|
ttot=$((ttot2-ttot1))
|
|
tsec=$((ttot%60))
|
|
tmin=$((ttot/60))
|
|
printf "%s\n" "Finished updating ${#langFiles[@]} files." "Total time: ${tmin}m ${tsec}s"
|