2
0
MasterPassword/platform-darwin/Scripts/checkLocalization

61 lines
1.9 KiB
Bash
Executable File

#! /usr/bin/env bash
source bashlib
isIn() {
local key=$1; shift
for value
do [[ $value = "$key" ]] && return; done
}
cd "${0%/*}/../../"
emit "Enumerating localization keys"
code=$(find Classes -type f -exec grep -o 'NSLocalizedString(@"[^"]*"' {} + | sed -n 's/.*\("[^"]*"\).*/\1/p' | sort -bu)
for l in Resources/*.lproj/Localizable.strings; do
k=${l#*/}; k=${k%%/*}
emit " - Found language: ${k%.lproj}"
lang+=( "$k" )
lprojLocal+=( "$(sed -n '/\/\/[^"]*\[REMOTE\][^"]*$/!s/^\("[^"]*"\).*/\1/p' "$l" | sort -bu)" )
lprojAll+=( "$(sed -n 's/^\("[^"]*"\).*/\1/p' "$l" | sort -u)" )
done
allhealthy=1
healthy=1
echo; emit "Looking for unused localization keys"
for l in "${!lang[@]}"; do
while read; do
(( healthy )) && emit -y "Not used in code or marked '// [REMOTE]':"
allhealthy=0
healthy=0
emit -y " ${lang[l]}: ${REPLY##*([[:space:]])} "
done < <(comm -1 -3 <(printf '%s\n' "$code") <(printf '%s\n' "${lprojLocal[l]}"))
done
(( healthy )) && emit "No unused keys."
healthy=1
echo; emit "Looking for missing localization keys"
for l in "${!lang[@]}"; do
chealthy=1
while read; do
(( chealthy )) && emit -y "Used by code:"
allhealthy=0
chealthy=0
healthy=0
emit -r " ${lang[l]}: ${REPLY##*([[:space:]])} "
done < <(comm -2 -3 <(printf '%s\n' "$code") <(printf '%s\n' "${lprojAll[l]}"))
khealthy=1
while read; do
(( khealthy )) && emit -y "Present in other languages:"
allhealthy=0
khealthy=0
healthy=0
emit -r " ${lang[l]}: ${REPLY##*([[:space:]])} "
done < <(for ol in "${!lang[@]}"; do comm -1 -3 <(printf '%s\n' "${lprojAll[l]}") <(printf '%s\n' "${lprojAll[ol]}"); done | sort -bu)
done
(( healthy )) && emit "No missing keys."
echo
(( allhealthy )) && emit "All good." || emit -y "Some issues detected."