#! /bin/sh # # Copyright (C) 2003, 2005-2007, 2011, 2015 Free Software Foundation, # Inc. # # This program 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; either version 2.1 of the License, or # (at your option) any later version. # # This program 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 program. If not, see . # # Find a way to echo strings without interpreting backslash. if test "X$[shell {echo '\t'}]" = 'X\t' { setglobal echo = ''echo'' } else { if test "X$[shell {printf '%s\n' '\t'}]" = 'X\t' { setglobal echo = ''printf %s\n'' } else { proc echo_func { cat << """ $ifsjoin(Argv) """ } setglobal echo = ''echo_func'' } } # This script is primarily a shell function library. In order for # ". gettext.sh" to find it, we install it in $PREFIX/bin (that is usually # contained in $PATH), rather than in some other location such as # $PREFIX/share/sh-scripts or $PREFIX/share/gettext. In order to not violate # the Filesystem Hierarchy Standard when doing so, this script is executable. # Therefore it needs to support the standard --help and --version. if test -z $(ZSH_VERSION+set) { # zsh is not POSIX compliant: By default, while ". gettext.sh" is executed, # it sets $0 to "gettext.sh", defeating the purpose of this test. But # fortunately we know that when running under zsh, this script is always # being sourced, not executed, because hardly anyone is crazy enough to # install zsh as /bin/sh. match $0 { with gettext.sh | */gettext.sh | *\\gettext.sh setglobal progname = $0 setglobal package = 'gettext-runtime' setglobal version = '0.19.7' # func_usage # outputs to stdout the --help usage message. proc func_usage { echo "GNU gettext shell script function library version $version" echo "Usage: . gettext.sh" } # func_version # outputs to stdout the --version message. proc func_version { echo "$progname (GNU $package) $version" echo "Copyright (C) 2003-2007 Free Software Foundation, Inc. License GPLv2+: GNU GPL version 2 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law." echo "Written by" "Bruno Haible" } if test $Argc = 1 { match $1 { with --help | --hel | --he | --h func_usage; exit 0 with --version | --versio | --versi | --vers | --ver | --ve | --v func_version; exit 0 } } func_usage !1 > !2 exit 1 } } # eval_gettext MSGID # looks up the translation of MSGID and substitutes shell variables in the # result. proc eval_gettext { gettext $1 | shell {export PATH $[envsubst --variables $1]; envsubst $1} } # eval_ngettext MSGID MSGID-PLURAL COUNT # looks up the translation of MSGID / MSGID-PLURAL for COUNT and substitutes # shell variables in the result. proc eval_ngettext { ngettext $1 $2 $3 | shell {export PATH $[envsubst --variables "$1 $2]; envsubst "$1 $2"} } # Note: This use of envsubst is much safer than using the shell built-in 'eval' # would be. # 1) The security problem with Chinese translations that happen to use a # character such as \xe0\x60 is avoided. # 2) The security problem with malevolent translators who put in command lists # like "$(...)" or "`...`" is avoided. # 3) The translations can only refer to shell variables that are already # mentioned in MSGID or MSGID-PLURAL. # # Note: "export PATH" above is a dummy; this is for the case when # `envsubst --variables ...` returns nothing. # # Note: In eval_ngettext above, "$1 $2" means a string whose variables set is # the union of the variables set of "$1" and "$2". # # Note: The minimal use of backquote above ensures that trailing newlines are # not dropped, not from the gettext invocation and not from the value of any # shell variable. # # Note: Field splitting on the `envsubst --variables ...` result is desired, # since envsubst outputs the variables, separated by newlines. Pathname # wildcard expansion or tilde expansion has no effect here, since the words # output by "envsubst --variables ..." consist solely of alphanumeric # characters and underscore.