summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/local.mk1
-rw-r--r--lib/locale.sh121
2 files changed, 122 insertions, 0 deletions
diff --git a/lib/local.mk b/lib/local.mk
index 487efa7..0f7c62d 100644
--- a/lib/local.mk
+++ b/lib/local.mk
@@ -20,5 +20,6 @@ pkglib_srcs = \
lib/load.sh \
lib/common.sh \
lib/output.sh \
+ lib/locale.sh \
lib/buildsystem.sh \
$(lib_buildsystem_srcs)
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
+}