]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Added support for pgettext() and npgettext() to separate contexts for translatable...
authorBrion Vibber <brion@pobox.com>
Wed, 18 Nov 2009 22:57:18 +0000 (14:57 -0800)
committerBrion Vibber <brion@pobox.com>
Wed, 18 Nov 2009 22:57:18 +0000 (14:57 -0800)
lib/common.php
lib/language.php
scripts/update_pot.sh

index 203b37c872cf62a18dc5782bd96f3d061e781eaf..732c22bfdf6d641fa13f8daf1978d4f7760f52f4 100644 (file)
@@ -59,10 +59,6 @@ require_once('PEAR.php');
 require_once('DB/DataObject.php');
 require_once('DB/DataObject/Cast.php'); # for dates
 
-if (!function_exists('gettext')) {
-    require_once("php-gettext/gettext.inc");
-}
-
 require_once(INSTALLDIR.'/lib/language.php');
 
 // This gets included before the config file, so that admin code and plugins
index 2570907b776815061dc1b5756e86c40f8bcebe04..a99bf89e3578597529e038a2cb6929c12e6feadb 100644 (file)
@@ -32,6 +32,63 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
     exit(1);
 }
 
+if (!function_exists('gettext')) {
+    require_once("php-gettext/gettext.inc");
+}
+
+if (!function_exists('pgettext')) {
+    /**
+     * Context-aware gettext wrapper; use when messages in different contexts
+     * won't be distinguished from the English source but need different translations.
+     * The context string will appear as msgctxt in the .po files.
+     *
+     * Not currently exposed in PHP's gettext module; implemented to be compat
+     * with gettext.h's macros.
+     *
+     * @param string $context context identifier, should be some key like "menu|file"
+     * @param string $msgid English source text
+     * @return string original or translated message
+     */
+    function pgettext($context, $msg)
+    {
+        $msgid = $context . "\004" . $msg;
+        $out = dcgettext(textdomain(NULL), $msgid, LC_MESSAGES);
+        if ($out == $msgid) {
+            return $msg;
+        } else {
+            return $out;
+        }
+    }
+}
+
+if (!function_exists('npgettext')) {
+    /**
+     * Context-aware ngettext wrapper; use when messages in different contexts
+     * won't be distinguished from the English source but need different translations.
+     * The context string will appear as msgctxt in the .po files.
+     *
+     * Not currently exposed in PHP's gettext module; implemented to be compat
+     * with gettext.h's macros.
+     *
+     * @param string $context context identifier, should be some key like "menu|file"
+     * @param string $msg singular English source text
+     * @param string $plural plural English source text
+     * @param int $n number of items to control plural selection
+     * @return string original or translated message
+     */
+    function npgettext($context, $msg, $plural, $n)
+    {
+        $msgid = $context . "\004" . $msg;
+        $out = dcngettext(textdomain(NULL), $msgid, $plural, $n, LC_MESSAGES);
+        if ($out == $msgid) {
+            return $msg;
+        } else {
+            return $out;
+        }
+    }
+}
+
+
 /**
  * Content negotiation for language codes
  *
index 9419e4337f3a7e851111d6d4663e3ae98ce4f7a2..8b44d43b49fbc7c28b777b1414c0055eb92e1ce5 100755 (executable)
@@ -1,3 +1,14 @@
 cd `dirname $0`
 cd ..
-xgettext --from-code=UTF-8 --default-domain=statusnet --output=locale/statusnet.po --language=PHP --join-existing actions/*.php classes/*.php lib/*.php scripts/*.php
+xgettext \
+    --from-code=UTF-8 \
+    --default-domain=statusnet \
+    --output=locale/statusnet.po \
+    --language=PHP \
+    --keyword="pgettext:1c,2" \
+    --keyword="npgettext:1c,2,3" \
+    --join-existing \
+    actions/*.php \
+    classes/*.php \
+    lib/*.php \
+    scripts/*.php