49b7d083f1
This is the wrong way to fix the problem. The correct way will involve moving away from the whacky tr() macro and using translations functions properly. But migrating to that will require some heavy scripting work. So for now, use a hammer. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
77 lines
2.8 KiB
Bash
Executable File
77 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
curl -Lo - https://crowdin.com/backend/download/project/wireguard.zip | bsdtar -C Sources/WireGuardApp -x -f - --strip-components 3 wireguard-apple
|
|
find Sources/WireGuardApp/*.lproj -type f -empty -delete
|
|
find Sources/WireGuardApp/*.lproj -type d -empty -delete
|
|
declare -A ALL_BASE
|
|
while read -r key eq rest; do
|
|
[[ $key == \"* && $key == *\" && $eq == = ]] || continue
|
|
ALL_BASE["$key"]="$rest"
|
|
done < Sources/WireGuardApp/Base.lproj/Localizable.strings
|
|
for f in Sources/WireGuardApp/*.lproj/Localizable.strings; do
|
|
unset FOUND
|
|
declare -A FOUND
|
|
while read -r key eq _; do
|
|
[[ $key == \"* && $key == *\" && $eq == = ]] || continue
|
|
FOUND["$key"]=1
|
|
done < "$f"
|
|
for key in "${!ALL_BASE[@]}"; do
|
|
[[ ${FOUND["$key"]} -eq 1 ]] && continue
|
|
echo "$key = ${ALL_BASE["$key"]}"
|
|
done >> "$f"
|
|
done < Sources/WireGuardApp/Base.lproj/Localizable.strings
|
|
git add Sources/WireGuardApp/*.lproj
|
|
|
|
declare -A LOCALE_MAP
|
|
while read -r filename; do
|
|
l="$(basename "$(dirname "$filename")" .lproj)"
|
|
[[ $l == Base ]] && continue
|
|
read -r -n 24 hex < <(LC_ALL=C tr -dc "A-F0-9" < /dev/urandom)
|
|
LOCALE_MAP["$l"]="$hex"
|
|
done < <(find Sources/WireGuardApp -name Localizable.strings -type f)
|
|
|
|
inkr=0 inls=0 inlsc=0
|
|
while IFS= read -r line; do
|
|
if [[ $line == *"name = Base; path = Sources/WireGuardApp/Base.lproj/Localizable.strings"* ]]; then
|
|
echo "$line"
|
|
for l in "${!LOCALE_MAP[@]}"; do
|
|
printf '\t\t%s /* %s */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = %s; path = Sources/WireGuardApp/%s.lproj/Localizable.strings; sourceTree = "<group>"; };\n' "${LOCALE_MAP["$l"]}" "$l" "$l" "$l"
|
|
done
|
|
elif [[ $line == *"; path = Sources/WireGuardApp/"*".lproj/Localizable.strings"* ]]; then
|
|
continue
|
|
elif [[ $line == *"knownRegions = ("* ]]; then
|
|
echo "$line"
|
|
printf '\t\t\t\tBase,\n\t\t\t\ten,\n'
|
|
for l in "${!LOCALE_MAP[@]}"; do
|
|
printf '\t\t\t\t%s,\n' "$l"
|
|
done
|
|
inkr=1
|
|
elif [[ $inkr -eq 1 && $line == *");"* ]]; then
|
|
echo "$line"
|
|
inkr=0
|
|
elif [[ $inkr -eq 1 ]]; then
|
|
continue
|
|
elif [[ $inls -eq 0 && $line == *"/* Localizable.strings */ = {"* ]]; then
|
|
echo "$line"
|
|
inls=1
|
|
elif [[ $inls -eq 1 && $inlsc -eq 0 && $line == *"children = ("* ]]; then
|
|
echo "$line"
|
|
inlsc=1
|
|
for l in "${!LOCALE_MAP[@]}"; do
|
|
printf '\t\t\t\t%s /* %s */,\n' "${LOCALE_MAP["$l"]}" "$l"
|
|
done
|
|
elif [[ $inls -eq 1 && $inlsc -eq 1 && $line == *");"* ]]; then
|
|
echo "$line"
|
|
inlsc=0
|
|
elif [[ $inls -eq 1 && $inlsc -eq 0 && $line == *"};"* ]]; then
|
|
echo "$line"
|
|
inls=0
|
|
elif [[ $inls -eq 1 && $inlsc -eq 1 && $line != *" Base "* ]]; then
|
|
continue
|
|
else
|
|
echo "$line"
|
|
fi
|
|
done < WireGuard.xcodeproj/project.pbxproj > WireGuard.xcodeproj/project.pbxproj.new
|
|
mv WireGuard.xcodeproj/project.pbxproj.new WireGuard.xcodeproj/project.pbxproj
|
|
git add WireGuard.xcodeproj/project.pbxproj
|