2023-03-02 18:33:36 +00:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
SED=sed
|
|
|
|
|
|
|
|
if [[ $OSTYPE == 'darwin'* ]]; then
|
|
|
|
# for macOS developers, use "brew install gnu-sed"
|
|
|
|
SED=gsed
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ ! -f ./options/locale/locale_en-US.ini ]; then
|
|
|
|
echo "please run this script in the root directory of the project"
|
|
|
|
exit 1
|
|
|
|
fi
|
2020-01-21 16:26:17 +00:00
|
|
|
|
|
|
|
mv ./options/locale/locale_en-US.ini ./options/
|
2020-01-25 06:19:35 +00:00
|
|
|
|
2023-03-02 18:33:36 +00:00
|
|
|
# the "ini" library for locale has many quirks
|
|
|
|
# * `a="xx"` gets `xx` (no quote)
|
|
|
|
# * `a=x\"y` gets `x\"y` (no unescaping)
|
|
|
|
# * `a="x\"y"` gets `"x\"y"` (no unescaping, the quotes are still there)
|
|
|
|
# * `a='x\"y'` gets `x\"y` (no unescaping, no quote)
|
|
|
|
# * `a="foo` gets `"foo` (although the quote is not closed)
|
|
|
|
# * 'a=`foo`' works like single-quote
|
|
|
|
# crowdin needs the strings to be quoted correctly and doesn't like incomplete quotes
|
|
|
|
# crowdin always outputs quoted strings if there are quotes in the strings.
|
|
|
|
|
|
|
|
# this script helps to unquote the crowdin outputs for the quirky ini library
|
|
|
|
# * find all `key="...\"..."` lines
|
|
|
|
# * remove the leading quote
|
|
|
|
# * remove the trailing quote
|
|
|
|
# * unescape the quotes
|
|
|
|
# * eg: key="...\"..." => key=..."...
|
|
|
|
$SED -i -r -e '/^[-.A-Za-z0-9_]+[ ]*=[ ]*".*"$/ {
|
|
|
|
s/^([-.A-Za-z0-9_]+)[ ]*=[ ]*"/\1=/
|
2020-01-25 06:19:35 +00:00
|
|
|
s/"$//
|
2023-03-02 18:33:36 +00:00
|
|
|
s/\\"/"/g
|
2020-01-25 06:19:35 +00:00
|
|
|
}' ./options/locale/*.ini
|
2020-01-21 16:26:17 +00:00
|
|
|
|
2023-03-02 18:33:36 +00:00
|
|
|
# * if the escaped line is incomplete like `key="...` or `key=..."`, quote it with backticks
|
|
|
|
# * eg: key="... => key=`"...`
|
|
|
|
# * eg: key=..." => key=`..."`
|
|
|
|
$SED -i -r -e 's/^([-.A-Za-z0-9_]+)[ ]*=[ ]*(".*[^"])$/\1=`\2`/' ./options/locale/*.ini
|
|
|
|
$SED -i -r -e 's/^([-.A-Za-z0-9_]+)[ ]*=[ ]*([^"].*")$/\1=`\2`/' ./options/locale/*.ini
|
|
|
|
|
2020-01-21 16:26:17 +00:00
|
|
|
# Remove translation under 25% of en_us
|
2020-11-28 06:12:22 +00:00
|
|
|
baselines=$(wc -l "./options/locale_en-US.ini" | cut -d" " -f1)
|
2020-01-21 16:26:17 +00:00
|
|
|
baselines=$((baselines / 4))
|
|
|
|
for filename in ./options/locale/*.ini; do
|
2020-11-28 06:12:22 +00:00
|
|
|
lines=$(wc -l "$filename" | cut -d" " -f1)
|
2020-01-21 16:26:17 +00:00
|
|
|
if [ $lines -lt $baselines ]; then
|
|
|
|
echo "Removing $filename: $lines/$baselines"
|
|
|
|
rm "$filename"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
mv ./options/locale_en-US.ini ./options/locale/
|