Initial support for localization and pluralization with go-i18n-JSON-v2 format
This commit is contained in:
parent
376a2e19ea
commit
a2787bb09e
61 changed files with 1317 additions and 51 deletions
145
tools/migrate_locales.sh
Executable file
145
tools/migrate_locales.sh
Executable file
|
@ -0,0 +1,145 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Copyright 2024 The Forgejo Authors. All rights reserved.
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
if [ -z "$1" ] || [ -z "$2" ]
|
||||
then
|
||||
echo "USAGE: $0 section key [key1 [keyN]]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -d ../options/locale_next ]
|
||||
then
|
||||
echo 'Call this script from the `tools` directory.'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
destsection="$1"
|
||||
keyJSON="$destsection.$2"
|
||||
key1=""
|
||||
keyN=""
|
||||
if [ -n "$3" ]
|
||||
then
|
||||
key1="$3"
|
||||
else
|
||||
key1="$2"
|
||||
fi
|
||||
if [ -n "$4" ]
|
||||
then
|
||||
keyN="$4"
|
||||
fi
|
||||
|
||||
cd ../options/locale
|
||||
|
||||
# Migrate the string in one file.
|
||||
function process() {
|
||||
file="$1"
|
||||
exec 3<$file
|
||||
|
||||
val1=""
|
||||
valN=""
|
||||
cursection=""
|
||||
line1=0
|
||||
lineN=0
|
||||
lineNumber=0
|
||||
|
||||
# Parse the file
|
||||
while read -u 3 line
|
||||
do
|
||||
((++lineNumber))
|
||||
if [[ $line =~ ^\[[-._a-zA-Z0-9]+\]$ ]]
|
||||
then
|
||||
cursection="${line#[}"
|
||||
cursection="${cursection%]}"
|
||||
elif [ "$cursection" = "$destsection" ]
|
||||
then
|
||||
key="${line%%=*}"
|
||||
value="${line#*=}"
|
||||
key="$(echo $key)" # Trim leading/trailing whitespace
|
||||
value="$(echo $value)"
|
||||
|
||||
if [ "$key" = "$key1" ]
|
||||
then
|
||||
val1="$value"
|
||||
line1=$lineNumber
|
||||
fi
|
||||
if [ -n "$keyN" ] && [ "$key" = "$keyN" ]
|
||||
then
|
||||
valN="$value"
|
||||
lineN=$lineNumber
|
||||
fi
|
||||
|
||||
if [ -n "$val1" ] && ( [ -n "$valN" ] || [ -z "$keyN" ] )
|
||||
then
|
||||
# Found all desired strings
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -n "$val1" ] || [ -n "$valN" ]
|
||||
then
|
||||
localename="${file#locale_}"
|
||||
localename="${localename%.ini}"
|
||||
localename="${localename%-*}"
|
||||
|
||||
if [ "$file" = "locale_en-US.ini" ]
|
||||
then
|
||||
# Delete migrated string from source file
|
||||
if [ $line1 -gt 0 ] && [ $lineN -gt 0 ] && [ $lineN -ne $line1 ]
|
||||
then
|
||||
sed -i "${line1}d;${lineN}d" "$file"
|
||||
elif [ $line1 -gt 0 ]
|
||||
then
|
||||
sed -i "${line1}d" "$file"
|
||||
elif [ $lineN -gt 0 ]
|
||||
then
|
||||
sed -i "${lineN}d" "$file"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Write JSON
|
||||
jsonfile="../locale_next/${file/.ini/.json}"
|
||||
|
||||
pluralform="other"
|
||||
oneform="one"
|
||||
case $localename in
|
||||
"be" | "bs" | "cnr" | "csb" | "hr" | "lt" | "pl" | "ru" | "sr" | "szl" | "uk" | "wen")
|
||||
# These languages have no "other" form and use "many" instead.
|
||||
pluralform="many"
|
||||
;;
|
||||
"ace" | "ay" | "bm" | "bo" | "cdo" | "cpx" | "crh" | "dz" | "gan" | "hak" | "hnj" | "hsn" | "id" | "ig" | "ii" | "ja" | "jbo" | "jv" | "kde" | "kea" | "km" | "ko" | "kos" | "lkt" | "lo" | "lzh" | "ms" | "my" | "nan" | "nqo" | "osa" | "sah" | "ses" | "sg" | "son" | "su" | "th" | "tlh" | "to" | "tok" | "tpi" | "tt" | "vi" | "wo" | "wuu" | "yo" | "yue" | "zh")
|
||||
# These languages have no singular form.
|
||||
oneform=""
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
content=""
|
||||
if [ -z "$keyN" ]
|
||||
then
|
||||
content="$(jq --arg val "$val1" ".$keyJSON = \$val" < "$jsonfile")"
|
||||
else
|
||||
object='{}'
|
||||
if [ -n "$val1" ] && [ -n "$oneform" ]
|
||||
then
|
||||
object=$(jq --arg val "$val1" ".$oneform = \$val" <<< "$object")
|
||||
fi
|
||||
if [ -n "$valN" ]
|
||||
then
|
||||
object=$(jq --arg val "$valN" ".$pluralform = \$val" <<< "$object")
|
||||
fi
|
||||
content="$(jq --argjson val "$object" ".$keyJSON = \$val" < "$jsonfile")"
|
||||
fi
|
||||
jq . <<< "$content" > "$jsonfile"
|
||||
fi
|
||||
}
|
||||
|
||||
for file in *.ini
|
||||
do
|
||||
process "$file" &
|
||||
done
|
||||
wait
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue