diff options
Diffstat (limited to 'tools/po/po-update.sh')
-rwxr-xr-x | tools/po/po-update.sh | 123 |
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 |