summaryrefslogtreecommitdiff
path: root/scripts/code_tools/modified-strings.sh
diff options
context:
space:
mode:
authorBrad Payne (Vir Linden) <vir@lindenlab.com>2020-08-11 14:14:38 +0100
committerBrad Payne (Vir Linden) <vir@lindenlab.com>2020-08-11 14:14:38 +0100
commit59de1d58d4aa891cc19372dd6104ec65e1cf4731 (patch)
tree13d34fd66fd88aa987c0d36c1de3c2f0b8651ff5 /scripts/code_tools/modified-strings.sh
parent89cde15fb8c52071805af78e61848e743f2ab2f1 (diff)
SL-13705 - modified-strings.sh added, for translation support
Diffstat (limited to 'scripts/code_tools/modified-strings.sh')
-rw-r--r--scripts/code_tools/modified-strings.sh199
1 files changed, 199 insertions, 0 deletions
diff --git a/scripts/code_tools/modified-strings.sh b/scripts/code_tools/modified-strings.sh
new file mode 100644
index 0000000000..435dda3f5d
--- /dev/null
+++ b/scripts/code_tools/modified-strings.sh
@@ -0,0 +1,199 @@
+#!/usr/bin/env bash
+# $LicenseInfo:firstyear=2014&license=viewerlgpl$
+# Second Life Viewer Source Code
+# Copyright (C) 2011, Linden Research, Inc.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation;
+# version 2.1 of the License only.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+#
+###
+### Extract strings modified between some version and the current version
+###
+
+Action=DEFAULT
+Rev=master
+DefaultXuiDir="indra/newview/skins/default/xui"
+Verbose=false
+ExitStatus=0
+
+while [ $# -ne 0 ]
+do
+ case ${1} in
+ ##
+ ## Show usage
+ ##
+ -h|--help)
+ Action=USAGE
+ ;;
+
+ -v|--verbose)
+ Verbose=true
+ ;;
+
+ ##
+ ## Select the revision to compare against
+ ##
+ -r)
+ if [ $# -lt 2 ]
+ then
+ echo "Must specify <revision> with ${1}" 1>&2
+ Action=USAGE
+ ExitStatus=1
+ break
+ else
+ Rev=${2}
+ shift # consume the switch ( for n values, consume n-1 )
+ fi
+ ;;
+
+ ##
+ ## handle an unknown switch
+ ##
+ -*)
+ Action=USAGE
+ ExitStatus=1
+ break
+ ;;
+
+ *)
+ if [ -z "${XuiDir}" ]
+ then
+ XuiDir=${1}
+ else
+ echo "Too many arguments supplied: $@" 1>&2
+ Action=USAGE
+ ExitStatus=1
+ break
+ fi
+ ;;
+ esac
+
+ shift # always consume 1
+done
+
+progress()
+{
+ if $Verbose
+ then
+ echo $* 1>&2
+ fi
+}
+
+if [[ $ExitStatus -eq 0 && "${Action}" = "DEFAULT" ]]
+then
+ if [[ ! -d "${XuiDir:=$DefaultXuiDir}" ]]
+ then
+ echo "No XUI directory found in '$XuiDir'" 1>&2
+ Action=USAGE
+ ExitStatus=1
+ fi
+fi
+
+if [ "${Action}" = "USAGE" ]
+then
+ cat <<USAGE
+
+Usage:
+
+ modified-strings.sh [ { -v | --verbose } ] [-r <revision>] [<path-to-xui>]
+
+ where
+ --verbose shows progress messages on stderr (the command takes a while, so this is reassuring)
+
+ -r <revision> specifies a git revision (branch, tag, commit, or relative specifier)
+ defaults to 'master' so that comparison is against the HEAD of the released viewer branch
+
+ <path-to-xui> is the path to the root directory for XUI files
+ defaults to '$DefaultXuiDir'
+
+ Emits a tab-separated file with these columns:
+ filename
+ the path of a file that has a string change (columns 2 and 3 are empty for lines with a filename)
+ name
+ the name attribute of a string or label whose value changed
+ English value
+ the current value of the string or label whose value changed
+ for strings, newlines are changed to '\n' and tab characters are changed to '\t'
+
+ There is also a column for each of the language directories following the English.
+
+USAGE
+ exit $ExitStatus
+fi
+
+stringval() # reads stdin and prints the escaped value of a string for the requested tag
+{
+ local tag=$1
+ xmllint --xpath "string(/strings/string[@name=\"$tag\"])" - | perl -p -e 'chomp; s/\n/\\n/g; s/\t/\\t/g;'
+}
+
+columns="file\tname\tEN"
+for lang in $(ls -1 ${XuiDir})
+do
+ if [[ "$lang" != "en" && -d "${XuiDir}" && -f "${XuiDir}/$lang/strings.xml" ]]
+ then
+ columns+="\t$lang"
+ fi
+done
+echo -e "$columns"
+
+EnglishStrings="${XuiDir}/en/strings.xml"
+progress -n "scanning $EnglishStrings "
+echo -e "$EnglishStrings"
+# loop over all tags in the current version of the strings file
+cat "$EnglishStrings" | xmllint --xpath '/strings/string/@name' - | sed 's/ name="//; s/"$//;' \
+| while read name
+do
+ progress -n "."
+ # fetch the $Rev and current values for each tag
+ old_stringval=$(git show "$Rev:$EnglishStrings" 2> /dev/null | stringval "$name")
+ new_stringval=$(cat "$EnglishStrings" | stringval "$name")
+
+ if [[ "$old_stringval" != "$new_stringval" ]]
+ then
+ # the value is different, so print the tag and it's current value separated by a tab
+ echo -e "\t$name\t$new_stringval"
+ fi
+done
+progress ""
+
+# loop over all XUI files other than strings.xml finding labels
+grep -rlw 'label' "${XuiDir}/en" | grep -v '/strings.xml' \
+| while read xuipath
+do
+ progress -n "scanning $xuipath "
+ listed_file=false
+ # loop over all elements for which there is a label attribute, getting the name attribute value
+ xmllint --xpath '//*[@label]/@name' "$xuipath" 2> /dev/null | sed 's/ name="//; s/"$//;' \
+ | while read name
+ do
+ progress -n "."
+ # get the old and new label attribute values for each name
+ old_label=$(git show "$Rev:$xuipath" 2> /dev/null | xmllint --xpath "string(//*[@name=\"${name}\"]/@label)" - 2> /dev/null)
+ new_label=$(cat "$xuipath" | xmllint --xpath "string(//*[@name=\"${name}\"]/@label)" - 2> /dev/null)
+ if [[ "$old_label" != "$new_label" ]]
+ then
+ if ! $listed_file
+ then
+ echo -e "$xuipath"
+ listed_file=true
+ fi
+ echo -e "\t$name\t$new_label"
+ fi
+ done
+ progress ""
+done
+