summaryrefslogtreecommitdiff
path: root/tools/po/po-update.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/po/po-update.sh')
-rwxr-xr-xtools/po/po-update.sh123
1 files changed, 123 insertions, 0 deletions
diff --git a/tools/po/po-update.sh b/tools/po/po-update.sh
new file mode 100755
index 0000000..2aca523
--- /dev/null
+++ b/tools/po/po-update.sh
@@ -0,0 +1,123 @@
+#!/bin/sh
+#
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+#
+#
+# Usage:
+# ./po-update.sh pot
+# - to generate just the pot file
+# ./po-update.sh
+# - to update all locales
+# ./po-update.sh LL
+# - to update one the LL locale
+
+set -e
+
+XGETTEXT=${XGETTEXT:-xgettext}
+MSGMERGE=${MSGMERGE:-msgmerge}
+
+svn_base=
+for i in . .. ../..; do
+ if [ -d "$i/subversion/po" ]; then
+ svn_base="$i"
+ break
+ fi
+done
+if [ -z "$svn_base" ]; then
+ echo "E: You must run po-update.sh from within a Subversion source tree." >&2
+ exit 1
+fi
+
+pot_done=
+
+make_pot()
+{
+ if [ -z "$pot_done" ]; then
+ echo "Building subversion.pot..."
+ (cd $svn_base/subversion/po && \
+ find .. \
+ -name .svn -prune -or \
+ -name tests -prune -or \
+ -name bindings -prune -or \
+ -name "*.c" -print -or \
+ -name "svn_error_codes.h" -print -or \
+ -name "svn_fs_util.h" -print | \
+ $XGETTEXT --sort-by-file -k_ -kN_ -kQ_:1,2 -kSVN_ERRDEF:3 \
+ --flag=_:1:pass-c-format \
+ --flag=N_:1:pass-c-format \
+ --flag=Q_:1:pass-c-format \
+ --flag=Q_:2:pass-c-format \
+ --flag=svn_cmdline_printf:2:c-format \
+ --flag=svn_cmdline_fprintf:3:c-format \
+ --flag=svn_error_createf:3:c-format \
+ --flag=svn_error_wrap_apr:2:c-format \
+ --flag=svn_stream_printf:3:c-format \
+ --flag=svn_stream_printf_from_utf8:4:c-format \
+ --flag=svn_string_createf:2:c-format \
+ --flag=svn_string_createv:2:c-format \
+ --flag=svn_stringbuf_createf:2:c-format \
+ --flag=svn_stringbuf_createv:2:c-format \
+ --flag=svn_fs_bdb__dberrf:3:c-format \
+ --flag=file_printf_from_utf8:3:c-format \
+ --flag=do_io_file_wrapper_cleanup:3:c-format \
+ --flag=do_io_file_wrapper_cleanup:4:c-format \
+ --msgid-bugs-address=dev@subversion.apache.org \
+ --add-comments --files-from=- -o subversion.pot )
+ pot_done=1
+ fi
+}
+
+update_po()
+{
+ (cd $svn_base/subversion/po &&
+ for i in $1.po; do
+ echo "Updating $i..."
+ # In a display of truly bizarre behaviour, msgmerge (at least, the
+ # GNU gettext-tools 0.14.6 implementation) inverts the order of obsolete
+ # messages every time it is run. Therefore, run it twice, to invert and
+ # then re-invert, to minimize spurious diffs.
+ $MSGMERGE --sort-by-file --no-wrap --update $i subversion.pot
+ $MSGMERGE --sort-by-file --no-wrap --update $i subversion.pot
+ done )
+}
+
+if [ $# -eq 0 ]; then
+ make_pot
+ update_po \*
+else
+ langs=
+ while [ $# -ge 1 ]; do
+ case $1 in
+ pot) ;;
+ *)
+ if [ -e $svn_base/subversion/po/$1.po ]; then
+ langs="$langs $1"
+ else
+ echo "E: No such .po file '$1.po'" >&2
+ exit 1
+ fi
+ esac
+ shift
+ done
+ make_pot
+ for lang in $langs; do
+ update_po $lang
+ done
+fi