diff options
author | P. J. McDermott <pjm@nac.net> | 2014-02-25 13:16:28 (EST) |
---|---|---|
committer | P. J. McDermott <pjm@nac.net> | 2014-02-25 13:16:28 (EST) |
commit | e4e9b382499329a499459df0022108766426c2ac (patch) | |
tree | 8df466c2609868cdfc0ba0bcb5b673921e4dd521 /lib/locale.sh | |
parent | 06b4ef4c6fa9f4bdbeec62a2513f0db9a93176c1 (diff) | |
parent | 2dfe7dd1fa038db1bd36247938d07e6a254fa663 (diff) |
Merge branch 'feature/drop-libopkbuild-dep'.
Conflicts:
configure
Diffstat (limited to 'lib/locale.sh')
-rw-r--r-- | lib/locale.sh | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/lib/locale.sh b/lib/locale.sh new file mode 100644 index 0000000..c8075ea --- /dev/null +++ b/lib/locale.sh @@ -0,0 +1,121 @@ +# opkbuild +# lib/locale +# Locale functions. +# +# Copyright (C) 2012 Patrick "P. J." McDermott +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +[ -n "${_OH_LOCALE_SM}" ] && return 0 +_OH_LOCALE_SM='true' + +oh_use output + +_OH_DEFAULT_LOCALE='en_US' +_OH_INTERNAL_TEXT_DOMAIN='opkhelper' +_OH_TEXT_DOMAIN= +_OH_LOCALE_PATH='@@LOCALEDIR@@/%s/LC_MESSAGES/%s.ms' + +oh_get_text_domain() +{ + if [ ${#} -ne 0 ]; then + return 125 + fi + + echo "${_OH_TEXT_DOMAIN}" + return 0 +} + +oh_set_text_domain() +{ + if [ ${#} -eq 1 ]; then + _OH_TEXT_DOMAIN="${1}" + else + return 125 + fi + + # Make sure LC_MESSAGES is set. + if [ -z "${LC_MESSAGES}" ]; then + if [ -n "${LC_ALL}" ]; then + LC_MESSAGES="${LC_ALL}" + elif [ -n "${LANG}" ]; then + LC_MESSAGES="${LANG}" + else + LC_MESSAGES="${_OH_DEFAULT_LOCALE}" + fi + fi + + # TODO: Exit early if domain's messages have already been loaded. + + # Try to load the messages. + if ! _oh_try_load_messages "${LC_MESSAGES%.*}"; then + if ! _oh_try_load_messages "${LC_MESSAGES%_*}"; then + if ! _oh_try_load_messages "${_OH_DEFAULT_LOCALE}"; then + oh_warn 'Cannot load messages in "%s" domain.' \ + "${_OH_TEXT_DOMAIN}" + return 1 + fi + fi + fi + + return 0 +} + +oh_set_locale_path() +{ + local format= + + if [ ${#} -eq 1 ]; then + format="${1}" + else + return 125 + fi + + _OH_LOCALE_PATH="${format}" + + return 0 +} + +oh_get_msg() +{ + local msgid= + + if [ ${#} -eq 1 ]; then + msgid="${1}" + else + return 125 + fi + + IFS= eval echo \$\{"msg_${_OH_TEXT_DOMAIN}_${msgid}"\} + + return 0 +} + +_oh_try_load_messages() +{ + local locale= + local ms= + + locale="${1}" + ms="$(printf "${_OH_LOCALE_PATH}" \ + "${locale}" "${_OH_TEXT_DOMAIN}")" + + if [ -f "${ms}" ]; then + . "${ms}" + else + return 1 + fi + + return 0 +} |