]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
New _m() gettext wrapper with smart detection of plugin domains. Plugin base class...
authorBrion Vibber <brion@status.net>
Tue, 8 Dec 2009 20:17:11 +0000 (12:17 -0800)
committerBrion Vibber <brion@status.net>
Tue, 8 Dec 2009 20:17:11 +0000 (12:17 -0800)
update_pot.sh replaced with update_po_templates.php which can do core, plugins, or all (default).
Top-level Makefile added to build .mo files for plugins as well as core.

As described on list:
http://lists.status.net/pipermail/statusnet-dev/2009-December/002869.html

43 files changed:
Makefile [new file with mode: 0644]
lib/language.php
lib/plugin.php
plugins/Facebook/FBConnectAuth.php
plugins/Facebook/FBConnectLogin.php
plugins/Facebook/FBConnectSettings.php
plugins/Facebook/FacebookPlugin.php
plugins/Facebook/facebookaction.php
plugins/Facebook/facebookhome.php
plugins/Facebook/facebookinvite.php
plugins/Facebook/facebooklogin.php
plugins/Facebook/facebookremove.php
plugins/Facebook/facebooksettings.php
plugins/Facebook/facebookutil.php
plugins/Facebook/locale/Facebook.po [new file with mode: 0644]
plugins/FeedSub/FeedSubPlugin.php
plugins/FeedSub/actions/feedsubsettings.php
plugins/FeedSub/feedmunger.php
plugins/FeedSub/locale/FeedSub.po [new file with mode: 0644]
plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po [new file with mode: 0644]
plugins/FeedSub/tests/gettext-speedtest.php [new file with mode: 0644]
plugins/Mapstraction/MapstractionPlugin.php
plugins/Mapstraction/allmap.php
plugins/Mapstraction/locale/Mapstraction.po [new file with mode: 0644]
plugins/Mapstraction/map.php
plugins/Mapstraction/usermap.php
plugins/OpenID/OpenIDPlugin.php
plugins/OpenID/finishaddopenid.php
plugins/OpenID/finishopenidlogin.php
plugins/OpenID/locale/OpenID.po [new file with mode: 0644]
plugins/OpenID/openid.php
plugins/OpenID/openidlogin.php
plugins/OpenID/openidserver.php
plugins/OpenID/openidsettings.php
plugins/OpenID/openidtrust.php
plugins/Sample/SamplePlugin.php [new file with mode: 0644]
plugins/TwitterBridge/TwitterBridgePlugin.php
plugins/TwitterBridge/locale/TwitterBridge.po [new file with mode: 0644]
plugins/TwitterBridge/twitter.php
plugins/TwitterBridge/twitterauthorization.php
plugins/TwitterBridge/twittersettings.php
scripts/update_po_templates.php [new file with mode: 0755]
scripts/update_pot.sh [deleted file]

diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..6f45c1b
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,18 @@
+# Warning: do not transform tabs to spaces in this file.
+
+all : translations
+
+core_mo = $(patsubst %.po,%.mo,$(wildcard locale/*/LC_MESSAGES/statusnet.po))
+plugin_mo = $(patsubst %.po,%.mo,$(wildcard plugins/*/locale/*/LC_MESSAGES/*.po))
+
+translations : $(core_mo) $(plugin_mo)
+
+clean :
+       rm -f $(core_mo) $(plugin_mo)
+
+updatepo :
+       php scripts/update_po_templates.php --all
+
+%.mo : %.po
+       msgfmt -o $@ $<
+
index 4fc45bafe94ba3d601bd03d8dceda1abce671892..ab46f1a656f2491a7395641c682fa16805c57c77 100644 (file)
@@ -36,6 +36,33 @@ if (!function_exists('gettext')) {
     require_once("php-gettext/gettext.inc");
 }
 
+
+if (!function_exists('dpgettext')) {
+    /**
+     * Context-aware dgettext 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 $domain domain identifier, or null for default domain
+     * @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 dpgettext($domain, $context, $msg)
+    {
+        $msgid = $context . "\004" . $msg;
+        $out = dcgettext($domain, $msgid, LC_MESSAGES);
+        if ($out == $msgid) {
+            return $msg;
+        } else {
+            return $out;
+        }
+    }
+}
+
 if (!function_exists('pgettext')) {
     /**
      * Context-aware gettext wrapper; use when messages in different contexts
@@ -50,9 +77,31 @@ if (!function_exists('pgettext')) {
      * @return string original or translated message
      */
     function pgettext($context, $msg)
+    {
+        return dpgettext(textdomain(NULL), $context, $msg);
+    }
+}
+
+if (!function_exists('dnpgettext')) {
+    /**
+     * Context-aware dngettext 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 $domain domain identifier, or null for default domain
+     * @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 dnpgettext($domain, $context, $msg, $plural, $n)
     {
         $msgid = $context . "\004" . $msg;
-        $out = dcgettext(textdomain(NULL), $msgid, LC_MESSAGES);
+        $out = dcngettext($domain, $msgid, $plural, $n, LC_MESSAGES);
         if ($out == $msgid) {
             return $msg;
         } else {
@@ -78,14 +127,78 @@ if (!function_exists('npgettext')) {
      */
     function npgettext($context, $msg, $plural, $n)
     {
-        $msgid = $context . "\004" . $msg;
-        $out = dcngettext(textdomain(NULL), $msgid, $plural, $n, LC_MESSAGES);
-        if ($out == $msgid) {
-            return $msg;
+        return dnpgettext(textdomain(NULL), $msgid, $plural, $n, LC_MESSAGES);
+    }
+}
+
+/**
+ * Shortcut for *gettext functions with smart domain detection.
+ *
+ * If calling from a plugin, this function checks which plugin was
+ * being called from and uses that as text domain, which will have
+ * been set up during plugin initialization.
+ *
+ * Also handles plurals and contexts depending on what parameters
+ * are passed to it:
+ *
+ *   gettext -> _m($msg)
+ *  ngettext -> _m($msg1, $msg2, $n)
+ *  pgettext -> _m($ctx, $msg)
+ * npgettext -> _m($ctx, $msg1, $msg2, $n)
+ *
+ * @fixme may not work properly in eval'd code
+ *
+ * @param string $msg
+ * @return string
+ */
+function _m($msg/*, ...*/)
+{
+    $domain = _mdomain(debug_backtrace(false));
+    $args = func_get_args();
+    switch(count($args)) {
+    case 1: return dgettext($domain, $msg);
+    case 2: return dpgettext($domain, $args[0], $args[1]);
+    case 3: return dngettext($domain, $args[0], $args[1], $args[2]);
+    case 4: return dnpgettext($domain, $args[0], $args[1], $args[2], $args[3]);
+    default: throw new Exception("Bad parameter count to _m()");
+    }
+}
+
+/**
+ * Looks for which plugin we've been called from to set the gettext domain.
+ *
+ * @param array $backtrace debug_backtrace() output
+ * @return string
+ * @private
+ * @fixme could explode if SN is under a 'plugins' folder or share name.
+ */
+function _mdomain($backtrace)
+{
+    /*
+      0 => 
+        array
+          'file' => string '/var/www/mublog/plugins/FeedSub/FeedSubPlugin.php' (length=49)
+          'line' => int 77
+          'function' => string '_m' (length=2)
+          'args' => 
+            array
+              0 => &string 'Feeds' (length=5)
+    */
+    static $cached;
+    $path = $backtrace[0]['file'];
+    if (!isset($cached[$path])) {
+        if (DIRECTORY_SEPARATOR !== '/') {
+            $path = strtr($path, DIRECTORY_SEPARATOR, '/');
+        }
+        $cut = strpos($path, '/plugins/') + 9;
+        $cut2 = strpos($path, '/', $cut);
+        if ($cut && $cut2) {
+            $cached[$path] = substr($path, $cut, $cut2 - $cut);
         } else {
-            return $out;
+            return null;
         }
     }
+    return $cached[$path];
 }
 
 
index 2c77c3e120e134cac7ea5d54235b5852cab74655..de7313e59e2e52e16b4a5bcca1ffe754aa6566aa 100644 (file)
@@ -65,6 +65,8 @@ class Plugin
                 Event::addHandler(mb_substr($method, 2), array($this, $method));
             }
         }
+
+        $this->setupGettext();
     }
 
     function initialize()
@@ -77,6 +79,22 @@ class Plugin
         return true;
     }
 
+    /**
+     * Checks if this plugin has localization that needs to be set up.
+     * Gettext localizations can be called via the _m() helper function.
+     */
+    protected function setupGettext()
+    {
+        $class = get_class($this);
+        if (substr($class, -6) == 'Plugin') {
+            $name = substr($class, 0, -6);
+            $path = INSTALLDIR . "/plugins/$name/locale";
+            if (file_exists($path) && is_dir($path)) {
+                bindtextdomain($name, $path);
+            }
+        }
+    }
+
     protected function log($level, $msg)
     {
         common_log($level, get_class($this) . ': '.$msg);
@@ -87,3 +105,4 @@ class Plugin
         $this->log(LOG_DEBUG, $msg);
     }
 }
+
index b909a4977169022f9e1b3564ee441a7244ef69bb..51bfc3865700c323921cbfac49eecd6f26c4ef59 100644 (file)
@@ -48,8 +48,8 @@ class FBConnectauthAction extends Action
             common_log(LOG_WARNING, 'Facebook Connect Plugin - ' .
                        "Failed auth attempt, proxy = $proxy, ip = $ip.");
 
-            $this->clientError(_('You must be logged into Facebook to ' .
-                                 'use Facebook Connect.'));
+            $this->clientError(_m('You must be logged into Facebook to ' .
+                                  'use Facebook Connect.'));
         }
 
         return true;
@@ -74,7 +74,7 @@ class FBConnectauthAction extends Action
                 // We don't want these cookies
                 getFacebook()->clear_cookie_state();
 
-                $this->clientError(_('There is already a local user linked with this Facebook.'));
+                $this->clientError(_m('There is already a local user linked with this Facebook.'));
 
             } else {
 
@@ -87,12 +87,12 @@ class FBConnectauthAction extends Action
 
             $token = $this->trimmed('token');
             if (!$token || $token != common_session_token()) {
-                $this->showForm(_('There was a problem with your session token. Try again, please.'));
+                $this->showForm(_m('There was a problem with your session token. Try again, please.'));
                 return;
             }
             if ($this->arg('create')) {
                 if (!$this->boolean('license')) {
-                    $this->showForm(_('You can\'t register if you don\'t agree to the license.'),
+                    $this->showForm(_m('You can\'t register if you don\'t agree to the license.'),
                                     $this->trimmed('newname'));
                     return;
                 }
@@ -102,7 +102,7 @@ class FBConnectauthAction extends Action
             } else {
                 common_debug('Facebook Connect Plugin - ' .
                              print_r($this->args, true));
-                $this->showForm(_('Something weird happened.'),
+                $this->showForm(_m('Something weird happened.'),
                                 $this->trimmed('newname'));
             }
         } else {
@@ -116,13 +116,13 @@ class FBConnectauthAction extends Action
             $this->element('div', array('class' => 'error'), $this->error);
         } else {
             $this->element('div', 'instructions',
-                           sprintf(_('This is the first time you\'ve logged into %s so we must connect your Facebook to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name')));
+                           sprintf(_m('This is the first time you\'ve logged into %s so we must connect your Facebook to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name')));
         }
     }
 
     function title()
     {
-        return _('Facebook Account Setup');
+        return _m('Facebook Account Setup');
     }
 
     function showForm($error=null, $username=null)
@@ -150,7 +150,7 @@ class FBConnectauthAction extends Action
                                           'class' => 'form_settings',
                                           'action' => common_local_url('FBConnectAuth')));
         $this->elementStart('fieldset', array('id' => 'settings_facebook_connect_options'));
-        $this->element('legend', null, _('Connection options'));
+        $this->element('legend', null, _m('Connection options'));
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
         $this->element('input', array('type' => 'checkbox',
@@ -159,10 +159,10 @@ class FBConnectauthAction extends Action
                                       'name' => 'license',
                                       'value' => 'true'));
         $this->elementStart('label', array('class' => 'checkbox', 'for' => 'license'));
-        $this->text(_('My text and files are available under '));
+        $this->text(_m('My text and files are available under '));
         $this->element('a', array('href' => common_config('license', 'url')),
                        common_config('license', 'title'));
-        $this->text(_(' except this private data: password, email address, IM address, phone number.'));
+        $this->text(_m(' except this private data: password, email address, IM address, phone number.'));
         $this->elementEnd('label');
         $this->elementEnd('li');
         $this->elementEnd('ul');
@@ -170,33 +170,33 @@ class FBConnectauthAction extends Action
         $this->elementStart('fieldset');
         $this->hidden('token', common_session_token());
         $this->element('legend', null,
-                       _('Create new account'));
+                       _m('Create new account'));
         $this->element('p', null,
-                       _('Create a new user with this nickname.'));
+                       _m('Create a new user with this nickname.'));
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
-        $this->input('newname', _('New nickname'),
+        $this->input('newname', _m('New nickname'),
                      ($this->username) ? $this->username : '',
-                     _('1-64 lowercase letters or numbers, no punctuation or spaces'));
+                     _m('1-64 lowercase letters or numbers, no punctuation or spaces'));
         $this->elementEnd('li');
         $this->elementEnd('ul');
-        $this->submit('create', _('Create'));
+        $this->submit('create', _m('Create'));
         $this->elementEnd('fieldset');
 
         $this->elementStart('fieldset');
         $this->element('legend', null,
-                       _('Connect existing account'));
+                       _m('Connect existing account'));
         $this->element('p', null,
-                       _('If you already have an account, login with your username and password to connect it to your Facebook.'));
+                       _m('If you already have an account, login with your username and password to connect it to your Facebook.'));
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
-        $this->input('nickname', _('Existing nickname'));
+        $this->input('nickname', _m('Existing nickname'));
         $this->elementEnd('li');
         $this->elementStart('li');
-        $this->password('password', _('Password'));
+        $this->password('password', _m('Password'));
         $this->elementEnd('li');
         $this->elementEnd('ul');
-        $this->submit('connect', _('Connect'));
+        $this->submit('connect', _m('Connect'));
         $this->elementEnd('fieldset');
 
         $this->elementEnd('fieldset');
@@ -212,7 +212,7 @@ class FBConnectauthAction extends Action
     function createNewUser()
     {
         if (common_config('site', 'closed')) {
-            $this->clientError(_('Registration not allowed.'));
+            $this->clientError(_m('Registration not allowed.'));
             return;
         }
 
@@ -221,14 +221,14 @@ class FBConnectauthAction extends Action
         if (common_config('site', 'inviteonly')) {
             $code = $_SESSION['invitecode'];
             if (empty($code)) {
-                $this->clientError(_('Registration not allowed.'));
+                $this->clientError(_m('Registration not allowed.'));
                 return;
             }
 
             $invite = Invitation::staticGet($code);
 
             if (empty($invite)) {
-                $this->clientError(_('Not a valid invitation code.'));
+                $this->clientError(_m('Not a valid invitation code.'));
                 return;
             }
         }
@@ -238,17 +238,17 @@ class FBConnectauthAction extends Action
         if (!Validate::string($nickname, array('min_length' => 1,
                                                'max_length' => 64,
                                                'format' => NICKNAME_FMT))) {
-            $this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.'));
+            $this->showForm(_m('Nickname must have only lowercase letters and numbers and no spaces.'));
             return;
         }
 
         if (!User::allowed_nickname($nickname)) {
-            $this->showForm(_('Nickname not allowed.'));
+            $this->showForm(_m('Nickname not allowed.'));
             return;
         }
 
         if (User::staticGet('nickname', $nickname)) {
-            $this->showForm(_('Nickname already in use. Try another one.'));
+            $this->showForm(_m('Nickname already in use. Try another one.'));
             return;
         }
 
@@ -266,7 +266,7 @@ class FBConnectauthAction extends Action
         $result = $this->flinkUser($user->id, $this->fbuid);
 
         if (!$result) {
-            $this->serverError(_('Error connecting user to Facebook.'));
+            $this->serverError(_m('Error connecting user to Facebook.'));
             return;
         }
 
@@ -286,7 +286,7 @@ class FBConnectauthAction extends Action
         $password = $this->trimmed('password');
 
         if (!common_check_user($nickname, $password)) {
-            $this->showForm(_('Invalid username or password.'));
+            $this->showForm(_m('Invalid username or password.'));
             return;
         }
 
@@ -300,7 +300,7 @@ class FBConnectauthAction extends Action
         $result = $this->flinkUser($user->id, $this->fbuid);
 
         if (!$result) {
-            $this->serverError(_('Error connecting user to Facebook.'));
+            $this->serverError(_m('Error connecting user to Facebook.'));
             return;
         }
 
@@ -320,7 +320,7 @@ class FBConnectauthAction extends Action
         $result = $this->flinkUser($user->id, $this->fbuid);
 
         if (empty($result)) {
-            $this->serverError(_('Error connecting user to Facebook.'));
+            $this->serverError(_m('Error connecting user to Facebook.'));
             return;
         }
 
index d2bb8054c982b20cdd2694e98ebb7ec7f0ff513e..20c409f3ea4a28308423fa25557959f344e38490 100644 (file)
@@ -30,7 +30,7 @@ class FBConnectLoginAction extends Action
         parent::handle($args);
 
         if (common_is_real_login()) {
-            $this->clientError(_('Already logged in.'));
+            $this->clientError(_m('Already logged in.'));
         }
 
         $this->showPage();
@@ -38,7 +38,7 @@ class FBConnectLoginAction extends Action
 
     function getInstructions()
     {
-        return _('Login with your Facebook Account');
+        return _m('Login with your Facebook Account');
     }
 
     function showPageNotice()
@@ -52,7 +52,7 @@ class FBConnectLoginAction extends Action
 
     function title()
     {
-        return _('Facebook Login');
+        return _m('Facebook Login');
     }
 
     function showContent() {
index 911c567873e74935175ca80fee869170cab195f4..590dffd8a998f9c2534bb40e8c5247ff21bce375 100644 (file)
@@ -53,7 +53,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction
 
     function title()
     {
-        return _('Facebook Connect Settings');
+        return _m('Facebook Connect Settings');
     }
 
     /**
@@ -64,7 +64,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction
 
     function getInstructions()
     {
-        return _('Manage how your account connects to Facebook');
+        return _m('Manage how your account connects to Facebook');
     }
 
     /**
@@ -89,7 +89,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction
         if (!$flink) {
 
             $this->element('p', 'instructions',
-                _('There is no Facebook user connected to this account.'));
+                _m('There is no Facebook user connected to this account.'));
 
             $this->element('fb:login-button', array('onlogin' => 'goto_login()',
                 'length' => 'long'));
@@ -97,7 +97,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction
         } else {
 
             $this->element('p', 'form_note',
-                           _('Connected Facebook user'));
+                           _m('Connected Facebook user'));
 
             $this->elementStart('p', array('class' => 'facebook-user-display'));
             $this->elementStart('fb:profile-pic',
@@ -116,18 +116,18 @@ class FBConnectSettingsAction extends ConnectSettingsAction
 
             $this->elementStart('fieldset');
 
-            $this->element('legend', null, _('Disconnect my account from Facebook'));
+            $this->element('legend', null, _m('Disconnect my account from Facebook'));
 
             if (!$user->password) {
 
                 $this->elementStart('p', array('class' => 'form_guide'));
-                $this->text(_('Disconnecting your Faceboook ' .
-                              'would make it impossible to log in! Please '));
+                $this->text(_m('Disconnecting your Faceboook ' .
+                               'would make it impossible to log in! Please '));
                 $this->element('a',
                     array('href' => common_local_url('passwordsettings')),
-                        _('set a password'));
+                        _m('set a password'));
 
-                $this->text(_(' first.'));
+                $this->text(_m(' first.'));
                 $this->elementEnd('p');
             } else {
 
@@ -139,7 +139,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction
                 $this->element('p', 'instructions',
                     sprintf($note, $site, $site));
 
-                $this->submit('disconnect', _('Disconnect'));
+                $this->submit('disconnect', _m('Disconnect'));
             }
 
             $this->elementEnd('fieldset');
@@ -161,8 +161,8 @@ class FBConnectSettingsAction extends ConnectSettingsAction
         // CSRF protection
         $token = $this->trimmed('token');
         if (!$token || $token != common_session_token()) {
-            $this->showForm(_('There was a problem with your session token. '.
-                              'Try again, please.'));
+            $this->showForm(_m('There was a problem with your session token. '.
+                               'Try again, please.'));
             return;
         }
 
@@ -175,7 +175,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction
 
             if ($result === false) {
                 common_log_db_error($user, 'DELETE', __FILE__);
-                $this->serverError(_('Couldn\'t delete link to Facebook.'));
+                $this->serverError(_m('Couldn\'t delete link to Facebook.'));
                 return;
             }
 
@@ -191,10 +191,10 @@ class FBConnectSettingsAction extends ConnectSettingsAction
                            $e->getMessage());
             }
 
-            $this->showForm(_('You have disconnected from Facebook.'), true);
+            $this->showForm(_m('You have disconnected from Facebook.'), true);
 
         } else {
-            $this->showForm(_('Not sure what you\'re trying to do.'));
+            $this->showForm(_m('Not sure what you\'re trying to do.'));
             return;
         }
 
index 40c911cce3035e0a0a3864c40edf19e57ec344b3..39b2ef28767641e08322256fbca42cc70b9ccc12 100644 (file)
@@ -406,9 +406,9 @@ class FacebookPlugin extends Plugin
         $action_name = $action->trimmed('action');
 
         $action->menuItem(common_local_url('FBConnectLogin'),
-                                           _('Facebook'),
-                                           _('Login or register using Facebook'),
-                                             'FBConnectLogin' === $action_name);
+                                           _m('Facebook'),
+                                           _m('Login or register using Facebook'),
+                                           'FBConnectLogin' === $action_name);
 
         return true;
     }
@@ -426,8 +426,8 @@ class FacebookPlugin extends Plugin
         $action_name = $action->trimmed('action');
 
         $action->menuItem(common_local_url('FBConnectSettings'),
-                          _('Facebook'),
-                          _('Facebook Connect Settings'),
+                          _m('Facebook'),
+                          _m('Facebook Connect Settings'),
                           $action_name === 'FBConnectSettings');
 
         return true;
index b090e9bd9a1e021061cb4b1604301d4d24d941da..705bb2780d006474f157735de3075a0af2b67dbd 100644 (file)
@@ -168,7 +168,7 @@ class FacebookAction extends Action
         $this->elementStart('li', array('class' =>
             ($this->action == 'facebookhome') ? 'current' : 'facebook_home'));
         $this->element('a',
-            array('href' => 'index.php', 'title' => _('Home')), _('Home'));
+            array('href' => 'index.php', 'title' => _m('Home')), _m('Home'));
         $this->elementEnd('li');
 
         if (common_config('invite', 'enabled')) {
@@ -176,7 +176,7 @@ class FacebookAction extends Action
                 array('class' =>
                     ($this->action == 'facebookinvite') ? 'current' : 'facebook_invite'));
             $this->element('a',
-                array('href' => 'invite.php', 'title' => _('Invite')), _('Invite'));
+                array('href' => 'invite.php', 'title' => _m('Invite')), _m('Invite'));
             $this->elementEnd('li');
         }
 
@@ -185,7 +185,7 @@ class FacebookAction extends Action
                 ($this->action == 'facebooksettings') ? 'current' : 'facebook_settings'));
         $this->element('a',
             array('href' => 'settings.php',
-                'title' => _('Settings')), _('Settings'));
+                'title' => _m('Settings')), _m('Settings'));
         $this->elementEnd('li');
 
         $this->elementEnd('ul');
@@ -225,15 +225,15 @@ class FacebookAction extends Action
         $this->elementStart('dl', array('class' => 'system_notice'));
         $this->element('dt', null, 'Page Notice');
 
-        $loginmsg_part1 = _('To use the %s Facebook Application you need to login ' .
+        $loginmsg_part1 = _m('To use the %s Facebook Application you need to login ' .
             'with your username and password. Don\'t have a username yet? ');
-        $loginmsg_part2 = _(' a new account.');
+        $loginmsg_part2 = _m(' a new account.');
 
         $this->elementStart('dd');
         $this->elementStart('p');
         $this->text(sprintf($loginmsg_part1, common_config('site', 'name')));
         $this->element('a',
-            array('href' => common_local_url('register')), _('Register'));
+            array('href' => common_local_url('register')), _m('Register'));
         $this->text($loginmsg_part2);
         $this->elementEnd('p');
         $this->elementEnd('dd');
@@ -246,7 +246,7 @@ class FacebookAction extends Action
     {
 
         $this->elementStart('div', array('id' => 'content'));
-        $this->element('h1', null, _('Login'));
+        $this->element('h1', null, _m('Login'));
 
         if ($msg) {
              $this->element('fb:error', array('message' => $msg));
@@ -265,20 +265,20 @@ class FacebookAction extends Action
 
         $this->elementStart('ul', array('class' => 'form_datas'));
         $this->elementStart('li');
-        $this->input('nickname', _('Nickname'));
+        $this->input('nickname', _m('Nickname'));
         $this->elementEnd('li');
         $this->elementStart('li');
-        $this->password('password', _('Password'));
+        $this->password('password', _m('Password'));
         $this->elementEnd('li');
         $this->elementEnd('ul');
 
-        $this->submit('submit', _('Login'));
+        $this->submit('submit', _m('Login'));
         $this->elementEnd('fieldset');
         $this->elementEnd('form');
 
         $this->elementStart('p');
         $this->element('a', array('href' => common_local_url('recoverpassword')),
-                       _('Lost or forgotten password?'));
+                       _m('Lost or forgotten password?'));
         $this->elementEnd('p');
 
         $this->elementEnd('div');
@@ -383,7 +383,7 @@ class FacebookAction extends Action
         // Does a little before-after block for next/prev page
         if ($have_before || $have_after) {
             $this->elementStart('dl', 'pagination');
-            $this->element('dt', null, _('Pagination'));
+            $this->element('dt', null, _m('Pagination'));
             $this->elementStart('dd', null);
             $this->elementStart('ul', array('class' => 'nav'));
         }
@@ -392,7 +392,7 @@ class FacebookAction extends Action
             $newargs = $args ? array_merge($args, $pargs) : $pargs;
             $this->elementStart('li', array('class' => 'nav_prev'));
             $this->element('a', array('href' => "$this->app_uri/$action?page=$newargs[page]", 'rel' => 'prev'),
-                           _('After'));
+                           _m('After'));
             $this->elementEnd('li');
         }
         if ($have_after) {
@@ -400,7 +400,7 @@ class FacebookAction extends Action
             $newargs = $args ? array_merge($args, $pargs) : $pargs;
             $this->elementStart('li', array('class' => 'nav_next'));
             $this->element('a', array('href' => "$this->app_uri/$action?page=$newargs[page]", 'rel' => 'next'),
-                           _('Before'));
+                           _m('Before'));
             $this->elementEnd('li');
         }
         if ($have_before || $have_after) {
@@ -418,13 +418,13 @@ class FacebookAction extends Action
         $content = $this->trimmed('status_textarea');
 
         if (!$content) {
-            $this->showPage(_('No notice content!'));
+            $this->showPage(_m('No notice content!'));
             return;
         } else {
             $content_shortened = common_shorten_links($content);
 
             if (Notice::contentTooLong($content_shortened)) {
-                $this->showPage(sprintf(_('That\'s too long. Max notice size is %d chars.'),
+                $this->showPage(sprintf(_m('That\'s too long. Max notice size is %d chars.'),
                                         Notice::maxContent()));
                 return;
             }
@@ -520,7 +520,7 @@ class FacebookNoticeList extends NoticeList
     function show()
     {
         $this->out->elementStart('div', array('id' =>'notices_primary'));
-        $this->out->element('h2', null, _('Notices'));
+        $this->out->element('h2', null, _m('Notices'));
         $this->out->elementStart('ul', array('class' => 'notices'));
 
         $cnt = 0;
index ea141c2c2db08801ff71cc1b436d379c6346f56b..60782f63c939c29f43c31ce4fca8cfa3c84f9021 100644 (file)
@@ -108,7 +108,7 @@ class FacebookhomeAction extends FacebookAction
                 $user = User::staticGet('nickname', $nickname);
 
                 if (!$user) {
-                    $this->showLoginForm(_("Server error - couldn't get user!"));
+                    $this->showLoginForm(_m("Server error - couldn't get user!"));
                 }
 
                 $flink = DB_DataObject::factory('foreign_link');
@@ -128,7 +128,7 @@ class FacebookhomeAction extends FacebookAction
                 return;
 
             } else {
-                $msg = _('Incorrect username or password.');
+                $msg = _m('Incorrect username or password.');
             }
         }
 
@@ -155,9 +155,9 @@ class FacebookhomeAction extends FacebookAction
     function title()
     {
         if ($this->page > 1) {
-            return sprintf(_("%s and friends, page %d"), $this->user->nickname, $this->page);
+            return sprintf(_m("%s and friends, page %d"), $this->user->nickname, $this->page);
         } else {
-            return sprintf(_("%s and friends"), $this->user->nickname);
+            return sprintf(_m("%s and friends"), $this->user->nickname);
         }
     }
 
@@ -186,7 +186,7 @@ class FacebookhomeAction extends FacebookAction
 
         $this->elementStart('div', array('class' => 'facebook_guide'));
 
-        $instructions = sprintf(_('If you would like the %s app to automatically update ' .
+        $instructions = sprintf(_m('If you would like the %s app to automatically update ' .
             'your Facebook status with your latest notice, you need ' .
             'to give it permission.'), $this->app_name);
 
@@ -210,13 +210,13 @@ class FacebookhomeAction extends FacebookAction
 
         $this->elementStart('span', array('class' => 'facebook-button'));
         $this->element('a', array('href' => $auth_url),
-            sprintf(_('Okay, do it!'), $this->app_name));
+            sprintf(_m('Okay, do it!'), $this->app_name));
         $this->elementEnd('span');
 
         $this->elementEnd('li');
 
         $this->elementStart('li', array('id' => 'fb-permissions-item'));
-        $this->submit('skip', _('Skip'));
+        $this->submit('skip', _m('Skip'));
         $this->elementEnd('li');
         $this->elementEnd('ul');
 
@@ -245,7 +245,7 @@ class FacebookhomeAction extends FacebookAction
 
         if ($have_before || $have_after) {
             $this->elementStart('dl', 'pagination');
-            $this->element('dt', null, _('Pagination'));
+            $this->element('dt', null, _m('Pagination'));
             $this->elementStart('dd', null);
             $this->elementStart('ul', array('class' => 'nav'));
         }
@@ -254,7 +254,7 @@ class FacebookhomeAction extends FacebookAction
             $newargs = $args ? array_merge($args, $pargs) : $pargs;
             $this->elementStart('li', array('class' => 'nav_prev'));
             $this->element('a', array('href' => "$action?page=$newargs[page]", 'rel' => 'prev'),
-                           _('After'));
+                           _m('After'));
             $this->elementEnd('li');
         }
         if ($have_after) {
@@ -262,7 +262,7 @@ class FacebookhomeAction extends FacebookAction
             $newargs = $args ? array_merge($args, $pargs) : $pargs;
             $this->elementStart('li', array('class' => 'nav_next'));
             $this->element('a', array('href' => "$action?page=$newargs[page]", 'rel' => 'next'),
-                           _('Before'));
+                           _m('Before'));
             $this->elementEnd('li');
         }
         if ($have_before || $have_after) {
index 3380b4c857d4de1f365d5534cf80fbc76ae5c71e..e02c7bf3ed3f4ebedb00f3ab814e1c71a27e412c 100644 (file)
@@ -69,9 +69,9 @@ class FacebookinviteAction extends FacebookAction
     function showSuccessContent()
     {
 
-        $this->element('h2', null, sprintf(_('Thanks for inviting your friends to use %s'),
+        $this->element('h2', null, sprintf(_m('Thanks for inviting your friends to use %s'),
             common_config('site', 'name')));
-        $this->element('p', null, _('Invitations have been sent to the following users:'));
+        $this->element('p', null, _m('Invitations have been sent to the following users:'));
 
         $friend_ids = $_POST['ids']; // XXX: Hmm... is this the best way to access the list?
 
@@ -91,7 +91,7 @@ class FacebookinviteAction extends FacebookAction
 
     function showFormContent()
     {
-        $content = sprintf(_('You have been invited to %s'), common_config('site', 'name')) .
+        $content = sprintf(_m('You have been invited to %s'), common_config('site', 'name')) .
             htmlentities('<fb:req-choice url="' . $this->app_uri . '" label="Add"/>');
 
         $this->elementStart('fb:request-form', array('action' => 'invite.php',
@@ -100,7 +100,7 @@ class FacebookinviteAction extends FacebookAction
                                                       'type' => common_config('site', 'name'),
                                                       'content' => $content));
         $this->hidden('invite', 'true');
-        $actiontext = sprintf(_('Invite your friends to use %s'), common_config('site', 'name'));
+        $actiontext = sprintf(_m('Invite your friends to use %s'), common_config('site', 'name'));
 
         $multi_params = array('showborder' => 'false');
         $multi_params['actiontext'] = $actiontext;
@@ -122,7 +122,7 @@ class FacebookinviteAction extends FacebookAction
 
         if ($exclude_ids) {
 
-            $this->element('h2', null, sprintf(_('Friends already using %s:'),
+            $this->element('h2', null, sprintf(_m('Friends already using %s:'),
                 common_config('site', 'name')));
             $this->elementStart('ul', array('id' => 'facebook-friends'));
 
@@ -140,7 +140,7 @@ class FacebookinviteAction extends FacebookAction
 
     function title()
     {
-        return sprintf(_('Send invitations'));
+        return sprintf(_m('Send invitations'));
     }
 
 }
index f77aecca36512e46f820e8ec1967efedcde4fe05..7a173ddaebf3a2c0f62248298d9dadce4f50baa9 100644 (file)
@@ -88,7 +88,7 @@ class FacebookinviteAction extends FacebookAction
 
     function title()
     {
-        return sprintf(_('Login'));
+        return sprintf(_m('Login'));
     }
 
     function redirectHome()
index 8531a8e6ea35b1386f076fc97a73fa5899443d62..09cb333428df459305c8adfa1d67468e23f7fad2 100644 (file)
@@ -55,7 +55,7 @@ class FacebookremoveAction extends FacebookAction
 
             if (!$result) {
                 common_log_db_error($flink, 'DELETE', __FILE__);
-                $this->serverError(_('Couldn\'t remove Facebook user.'));
+                $this->serverError(_m('Couldn\'t remove Facebook user.'));
                 return;
             }
 
index d1269f1013cf4578599ab98c038c11ae7fda7876..766d0e19963b734a9c736fcbe49a753eec83c2c2 100644 (file)
@@ -71,9 +71,9 @@ class FacebooksettingsAction extends FacebookAction
             $trimmed);
 
         if ($result === false) {
-            $this->showForm(_('There was a problem saving your sync preferences!'));
+            $this->showForm(_m('There was a problem saving your sync preferences!'));
         } else {
-            $this->showForm(_('Sync preferences saved.'), true);
+            $this->showForm(_m('Sync preferences saved.'), true);
         }
     }
 
@@ -96,14 +96,14 @@ class FacebooksettingsAction extends FacebookAction
 
             $this->elementStart('li');
 
-            $this->checkbox('noticesync', _('Automatically update my Facebook status with my notices.'),
+            $this->checkbox('noticesync', _m('Automatically update my Facebook status with my notices.'),
                                 ($this->flink) ? ($this->flink->noticesync & FOREIGN_NOTICE_SEND) : true);
 
             $this->elementEnd('li');
 
             $this->elementStart('li');
 
-            $this->checkbox('replysync', _('Send "@" replies to Facebook.'),
+            $this->checkbox('replysync', _m('Send "@" replies to Facebook.'),
                              ($this->flink) ? ($this->flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) : true);
 
             $this->elementEnd('li');
@@ -112,15 +112,15 @@ class FacebooksettingsAction extends FacebookAction
 
             $prefix = trim($this->facebook->api_client->data_getUserPreference(FACEBOOK_NOTICE_PREFIX));
 
-            $this->input('prefix', _('Prefix'),
+            $this->input('prefix', _m('Prefix'),
                          ($prefix) ? $prefix : null,
-                         _('A string to prefix notices with.'));
+                         _m('A string to prefix notices with.'));
 
             $this->elementEnd('li');
 
             $this->elementStart('li');
 
-            $this->submit('save', _('Save'));
+            $this->submit('save', _m('Save'));
 
             $this->elementEnd('li');
 
@@ -130,7 +130,7 @@ class FacebooksettingsAction extends FacebookAction
 
         } else {
 
-            $instructions = sprintf(_('If you would like %s to automatically update ' .
+            $instructions = sprintf(_m('If you would like %s to automatically update ' .
                 'your Facebook status with your latest notice, you need ' .
                 'to give it permission.'), $this->app_name);
 
@@ -143,7 +143,7 @@ class FacebooksettingsAction extends FacebookAction
             $this->elementStart('fb:prompt-permission', array('perms' => 'publish_stream',
                 'next_fbjs' => 'document.setLocation(\'' . "$this->app_uri/settings.php" . '\')'));
             $this->element('span', array('class' => 'facebook-button'),
-                sprintf(_('Allow %s to update my Facebook status'), common_config('site', 'name')));
+                sprintf(_m('Allow %s to update my Facebook status'), common_config('site', 'name')));
             $this->elementEnd('fb:prompt-permission');
             $this->elementEnd('li');
             $this->elementEnd('ul');
@@ -153,7 +153,7 @@ class FacebooksettingsAction extends FacebookAction
 
     function title()
     {
-        return _('Sync preferences');
+        return _m('Sync preferences');
     }
 
 }
index 2abcbb14e24c98a6d5390ce7b9a6d35a0004b8ea..2ec6db6b8d2e80780b972fb6a21dedeece8f6ffd 100644 (file)
@@ -277,10 +277,10 @@ function mail_facebook_app_removed($user)
     $site_name = common_config('site', 'name');
 
     $subject = sprintf(
-        _('Your %1$s Facebook application access has been disabled.',
+        _m('Your %1$s Facebook application access has been disabled.',
             $site_name));
 
-    $body = sprintf(_("Hi, %1\$s. We're sorry to inform you that we are " .
+    $body = sprintf(_m("Hi, %1\$s. We're sorry to inform you that we are " .
         'unable to update your Facebook status from %2$s, and have disabled ' .
         'the Facebook application for your account. This may be because ' .
         'you have removed the Facebook application\'s authorization, or ' .
diff --git a/plugins/Facebook/locale/Facebook.po b/plugins/Facebook/locale/Facebook.po
new file mode 100644 (file)
index 0000000..5b313c8
--- /dev/null
@@ -0,0 +1,394 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-07 20:38-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: facebookaction.php:171
+msgid "Home"
+msgstr ""
+
+#: facebookaction.php:179
+msgid "Invite"
+msgstr ""
+
+#: facebookaction.php:188
+msgid "Settings"
+msgstr ""
+
+#: facebookaction.php:228
+#, php-format
+msgid ""
+"To use the %s Facebook Application you need to login with your username and "
+"password. Don't have a username yet? "
+msgstr ""
+
+#: facebookaction.php:230
+msgid " a new account."
+msgstr ""
+
+#: facebookaction.php:236
+msgid "Register"
+msgstr ""
+
+#: facebookaction.php:249 facebookaction.php:275 facebooklogin.php:91
+msgid "Login"
+msgstr ""
+
+#: facebookaction.php:268
+msgid "Nickname"
+msgstr ""
+
+#: facebookaction.php:271 FBConnectAuth.php:196
+msgid "Password"
+msgstr ""
+
+#: facebookaction.php:281
+msgid "Lost or forgotten password?"
+msgstr ""
+
+#: facebookaction.php:386 facebookhome.php:248
+msgid "Pagination"
+msgstr ""
+
+#: facebookaction.php:395 facebookhome.php:257
+msgid "After"
+msgstr ""
+
+#: facebookaction.php:403 facebookhome.php:265
+msgid "Before"
+msgstr ""
+
+#: facebookaction.php:421
+msgid "No notice content!"
+msgstr ""
+
+#: facebookaction.php:427
+#, php-format
+msgid "That's too long. Max notice size is %d chars."
+msgstr ""
+
+#: facebookaction.php:523
+msgid "Notices"
+msgstr ""
+
+#: facebookutil.php:280
+#, php-format
+msgid "Your %1$s Facebook application access has been disabled."
+msgstr ""
+
+#: facebookutil.php:283
+#, php-format
+msgid ""
+"Hi, %1$s. We're sorry to inform you that we are unable to update your "
+"Facebook status from %2$s, and have disabled the Facebook application for "
+"your account. This may be because you have removed the Facebook "
+"application's authorization, or have deleted your Facebook account.  You can "
+"re-enable the Facebook application and automatic status updating by re-"
+"installing the %2$s Facebook application.\n"
+"\n"
+"Regards,\n"
+"\n"
+"%2$s"
+msgstr ""
+
+#: FBConnectLogin.php:33
+msgid "Already logged in."
+msgstr ""
+
+#: FBConnectLogin.php:41
+msgid "Login with your Facebook Account"
+msgstr ""
+
+#: FBConnectLogin.php:55
+msgid "Facebook Login"
+msgstr ""
+
+#: facebookhome.php:111
+msgid "Server error - couldn't get user!"
+msgstr ""
+
+#: facebookhome.php:131
+msgid "Incorrect username or password."
+msgstr ""
+
+#: facebookhome.php:158
+#, php-format
+msgid "%s and friends, page %d"
+msgstr ""
+
+#: facebookhome.php:160
+#, php-format
+msgid "%s and friends"
+msgstr ""
+
+#: facebookhome.php:189
+#, php-format
+msgid ""
+"If you would like the %s app to automatically update your Facebook status "
+"with your latest notice, you need to give it permission."
+msgstr ""
+
+#: facebookhome.php:213
+msgid "Okay, do it!"
+msgstr ""
+
+#: facebookhome.php:219
+msgid "Skip"
+msgstr ""
+
+#: facebooksettings.php:74
+msgid "There was a problem saving your sync preferences!"
+msgstr ""
+
+#: facebooksettings.php:76
+msgid "Sync preferences saved."
+msgstr ""
+
+#: facebooksettings.php:99
+msgid "Automatically update my Facebook status with my notices."
+msgstr ""
+
+#: facebooksettings.php:106
+msgid "Send \"@\" replies to Facebook."
+msgstr ""
+
+#: facebooksettings.php:115
+msgid "Prefix"
+msgstr ""
+
+#: facebooksettings.php:117
+msgid "A string to prefix notices with."
+msgstr ""
+
+#: facebooksettings.php:123
+msgid "Save"
+msgstr ""
+
+#: facebooksettings.php:133
+#, php-format
+msgid ""
+"If you would like %s to automatically update your Facebook status with your "
+"latest notice, you need to give it permission."
+msgstr ""
+
+#: facebooksettings.php:146
+#, php-format
+msgid "Allow %s to update my Facebook status"
+msgstr ""
+
+#: facebooksettings.php:156
+msgid "Sync preferences"
+msgstr ""
+
+#: facebookinvite.php:72
+#, php-format
+msgid "Thanks for inviting your friends to use %s"
+msgstr ""
+
+#: facebookinvite.php:74
+msgid "Invitations have been sent to the following users:"
+msgstr ""
+
+#: facebookinvite.php:94
+#, php-format
+msgid "You have been invited to %s"
+msgstr ""
+
+#: facebookinvite.php:103
+#, php-format
+msgid "Invite your friends to use %s"
+msgstr ""
+
+#: facebookinvite.php:125
+#, php-format
+msgid "Friends already using %s:"
+msgstr ""
+
+#: facebookinvite.php:143
+msgid "Send invitations"
+msgstr ""
+
+#: facebookremove.php:58
+msgid "Couldn't remove Facebook user."
+msgstr ""
+
+#: FBConnectSettings.php:56 FacebookPlugin.php:430
+msgid "Facebook Connect Settings"
+msgstr ""
+
+#: FBConnectSettings.php:67
+msgid "Manage how your account connects to Facebook"
+msgstr ""
+
+#: FBConnectSettings.php:92
+msgid "There is no Facebook user connected to this account."
+msgstr ""
+
+#: FBConnectSettings.php:100
+msgid "Connected Facebook user"
+msgstr ""
+
+#: FBConnectSettings.php:119
+msgid "Disconnect my account from Facebook"
+msgstr ""
+
+#: FBConnectSettings.php:124
+msgid ""
+"Disconnecting your Faceboook would make it impossible to log in! Please "
+msgstr ""
+
+#: FBConnectSettings.php:128
+msgid "set a password"
+msgstr ""
+
+#: FBConnectSettings.php:130
+msgid " first."
+msgstr ""
+
+#: FBConnectSettings.php:142
+msgid "Disconnect"
+msgstr ""
+
+#: FBConnectSettings.php:164 FBConnectAuth.php:90
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: FBConnectSettings.php:178
+msgid "Couldn't delete link to Facebook."
+msgstr ""
+
+#: FBConnectSettings.php:194
+msgid "You have disconnected from Facebook."
+msgstr ""
+
+#: FBConnectSettings.php:197
+msgid "Not sure what you're trying to do."
+msgstr ""
+
+#: FBConnectAuth.php:51
+msgid "You must be logged into Facebook to use Facebook Connect."
+msgstr ""
+
+#: FBConnectAuth.php:77
+msgid "There is already a local user linked with this Facebook."
+msgstr ""
+
+#: FBConnectAuth.php:95
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#: FBConnectAuth.php:105
+msgid "Something weird happened."
+msgstr ""
+
+#: FBConnectAuth.php:119
+#, php-format
+msgid ""
+"This is the first time you've logged into %s so we must connect your "
+"Facebook to a local account. You can either create a new account, or connect "
+"with your existing account, if you have one."
+msgstr ""
+
+#: FBConnectAuth.php:125
+msgid "Facebook Account Setup"
+msgstr ""
+
+#: FBConnectAuth.php:153
+msgid "Connection options"
+msgstr ""
+
+#: FBConnectAuth.php:162
+msgid "My text and files are available under "
+msgstr ""
+
+#: FBConnectAuth.php:165
+msgid ""
+" except this private data: password, email address, IM address, phone number."
+msgstr ""
+
+#: FBConnectAuth.php:173
+msgid "Create new account"
+msgstr ""
+
+#: FBConnectAuth.php:175
+msgid "Create a new user with this nickname."
+msgstr ""
+
+#: FBConnectAuth.php:178
+msgid "New nickname"
+msgstr ""
+
+#: FBConnectAuth.php:180
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+
+#: FBConnectAuth.php:183
+msgid "Create"
+msgstr ""
+
+#: FBConnectAuth.php:188
+msgid "Connect existing account"
+msgstr ""
+
+#: FBConnectAuth.php:190
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your Facebook."
+msgstr ""
+
+#: FBConnectAuth.php:193
+msgid "Existing nickname"
+msgstr ""
+
+#: FBConnectAuth.php:199
+msgid "Connect"
+msgstr ""
+
+#: FBConnectAuth.php:215 FBConnectAuth.php:224
+msgid "Registration not allowed."
+msgstr ""
+
+#: FBConnectAuth.php:231
+msgid "Not a valid invitation code."
+msgstr ""
+
+#: FBConnectAuth.php:241
+msgid "Nickname must have only lowercase letters and numbers and no spaces."
+msgstr ""
+
+#: FBConnectAuth.php:246
+msgid "Nickname not allowed."
+msgstr ""
+
+#: FBConnectAuth.php:251
+msgid "Nickname already in use. Try another one."
+msgstr ""
+
+#: FBConnectAuth.php:269 FBConnectAuth.php:303 FBConnectAuth.php:323
+msgid "Error connecting user to Facebook."
+msgstr ""
+
+#: FBConnectAuth.php:289
+msgid "Invalid username or password."
+msgstr ""
+
+#: FacebookPlugin.php:409 FacebookPlugin.php:429
+msgid "Facebook"
+msgstr ""
+
+#: FacebookPlugin.php:410
+msgid "Login or register using Facebook"
+msgstr ""
index 36d4e78023545b862d97d6d6bec9509e5120c5d0..857a9794d500526f773eee57bd7f3df9b2279f7e 100644 (file)
@@ -51,7 +51,6 @@ class FeedSubPlugin extends Plugin
      * @param Net_URL_Mapper $m path-to-action mapper
      * @return boolean hook return
      */
-
     function onRouterInitialized($m)
     {
         $m->connect('feedsub/callback/:feed',
@@ -74,8 +73,8 @@ class FeedSubPlugin extends Plugin
         $action_name = $action->trimmed('action');
 
         $action->menuItem(common_local_url('feedsubsettings'),
-                          dgettext('FeebSubPlugin', 'Feeds'),
-                          dgettext('FeedSubPlugin', 'Feed subscription options'),
+                          _m('Feeds'),
+                          _m('Feed subscription options'),
                           $action_name === 'feedsubsettings');
 
         return true;
index 242224fac02ea395c09c775cd6f52db582597100..0fba20a393ff8dadd6a66480ce83ab71f3195e1b 100644 (file)
@@ -38,7 +38,7 @@ class FeedSubSettingsAction extends ConnectSettingsAction
 
     function title()
     {
-        return dgettext('FeedSubPlugin', 'Feed subscriptions');
+        return _m('Feed subscriptions');
     }
 
     /**
@@ -49,9 +49,8 @@ class FeedSubSettingsAction extends ConnectSettingsAction
 
     function getInstructions()
     {
-        return dgettext('FeedSubPlugin',
-                        'You can subscribe to feeds from other sites; ' .
-                        'updates will appear in your personal timeline.');
+        return _m('You can subscribe to feeds from other sites; ' .
+                  'updates will appear in your personal timeline.');
     }
 
     /**
@@ -94,9 +93,9 @@ class FeedSubSettingsAction extends ConnectSettingsAction
         $this->elementEnd('ul');
 
         if ($this->preview) {
-            $this->submit('subscribe', dgettext('FeedSubPlugin', 'Subscribe'));
+            $this->submit('subscribe', _m('Subscribe'));
         } else {
-            $this->submit('validate', dgettext('FeedSubPlugin', 'Continue'));
+            $this->submit('validate', _m('Continue'));
         }
 
         $this->elementEnd('fieldset');
@@ -149,8 +148,7 @@ class FeedSubSettingsAction extends ConnectSettingsAction
         $feedurl = trim($this->arg('feedurl'));
         
         if ($feedurl == '') {
-            $this->showForm(dgettext('FeedSubPlugin',
-                                     'Empty feed URL!'));
+            $this->showForm(_m('Empty feed URL!'));
             return;
         }
         $this->feedurl = $feedurl;
@@ -160,26 +158,26 @@ class FeedSubSettingsAction extends ConnectSettingsAction
             $discover = new FeedDiscovery();
             $uri = $discover->discoverFromURL($feedurl);
         } catch (FeedSubBadURLException $e) {
-            $this->showForm(dgettext('FeedSubPlugin', 'Invalid URL or could not reach server.'));
+            $this->showForm(_m('Invalid URL or could not reach server.'));
             return false;
         } catch (FeedSubBadResponseException $e) {
-            $this->showForm(dgettext('FeedSubPlugin', 'Cannot read feed; server returned error.'));
+            $this->showForm(_m('Cannot read feed; server returned error.'));
             return false;
         } catch (FeedSubEmptyException $e) {
-            $this->showForm(dgettext('FeedSubPlugin', 'Cannot read feed; server returned an empty page.'));
+            $this->showForm(_m('Cannot read feed; server returned an empty page.'));
             return false;
         } catch (FeedSubBadHTMLException $e) {
-            $this->showForm(dgettext('FeedSubPlugin', 'Bad HTML, could not find feed link.'));
+            $this->showForm(_m('Bad HTML, could not find feed link.'));
             return false;
         } catch (FeedSubNoFeedException $e) {
-            $this->showForm(dgettext('FeedSubPlugin', 'Could not find a feed linked from this URL.'));
+            $this->showForm(_m('Could not find a feed linked from this URL.'));
             return false;
         } catch (FeedSubUnrecognizedTypeException $e) {
-            $this->showForm(dgettext('FeedSubPlugin', 'Not a recognized feed type.'));
+            $this->showForm(_m('Not a recognized feed type.'));
             return false;
         } catch (FeedSubException $e) {
             // Any new ones we forgot about
-            $this->showForm(dgettext('FeedSubPlugin', 'Bad feed URL.'));
+            $this->showForm(_m('Bad feed URL.'));
             return false;
         }
         
@@ -187,7 +185,7 @@ class FeedSubSettingsAction extends ConnectSettingsAction
         $this->feedinfo = $this->munger->feedInfo();
 
         if ($this->feedinfo->huburi == '') {
-            $this->showForm(dgettext('FeedSubPlugin', 'Feed is not PuSH-enabled; cannot subscribe.'));
+            $this->showForm(_m('Feed is not PuSH-enabled; cannot subscribe.'));
             return false;
         }
         
@@ -207,7 +205,7 @@ class FeedSubSettingsAction extends ConnectSettingsAction
                 $ok = $this->feedinfo->subscribe();
                 common_log(LOG_INFO, __METHOD__ . ": sub was $ok");
                 if (!$ok) {
-                    $this->showForm(dgettext('FeedSubPlugin', 'Feed subscription failed! Bad response from hub.'));
+                    $this->showForm(_m('Feed subscription failed! Bad response from hub.'));
                     return;
                 }
             }
@@ -217,11 +215,11 @@ class FeedSubSettingsAction extends ConnectSettingsAction
             $profile = $this->feedinfo->getProfile();
             
             if ($user->isSubscribed($profile)) {
-                $this->showForm(dgettext('FeedSubPlugin', 'Already subscribed!'));
+                $this->showForm(_m('Already subscribed!'));
             } elseif ($user->subscribeTo($profile)) {
-                $this->showForm(dgettext('FeedSubPlugin', 'Feed subscribed!'));
+                $this->showForm(_m('Feed subscribed!'));
             } else {
-                $this->showForm(dgettext('FeedSubPlugin', 'Feed subscription failed!'));
+                $this->showForm(_m('Feed subscription failed!'));
             }
         }
     }
@@ -230,7 +228,7 @@ class FeedSubSettingsAction extends ConnectSettingsAction
     {
         if ($this->validateFeed()) {
             $this->preview = true;
-            $this->showForm(dgettext('FeedSubPlugin', 'Previewing feed:'));
+            $this->showForm(_m('Previewing feed:'));
         }
     }
 
index bb8075da95e70f4e22b1873f168d6791c6950f5c..f3618b8eb03993eba4d56eefda450016d8e352b1 100644 (file)
@@ -212,7 +212,7 @@ class FeedMunger
         // try adding #hashtags from the categories/tags on a post.
         
         // @todo Should we force a language here?
-        $format = dgettext("FeedSubPlugin", 'New post: "%1$s" %2$s');
+        $format = _m('New post: "%1$s" %2$s');
         $title = $entry->title;
         $link = $this->getAltLink($entry);
         $out = sprintf($format, $title, $link);
diff --git a/plugins/FeedSub/locale/FeedSub.po b/plugins/FeedSub/locale/FeedSub.po
new file mode 100644 (file)
index 0000000..dedc018
--- /dev/null
@@ -0,0 +1,104 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-07 20:38-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: tests/gettext-speedtest.php:57 FeedSubPlugin.php:76
+msgid "Feeds"
+msgstr ""
+
+#: FeedSubPlugin.php:77
+msgid "Feed subscription options"
+msgstr ""
+
+#: feedmunger.php:215
+#, php-format
+msgid "New post: \"%1$s\" %2$s"
+msgstr ""
+
+#: actions/feedsubsettings.php:41
+msgid "Feed subscriptions"
+msgstr ""
+
+#: actions/feedsubsettings.php:52
+msgid ""
+"You can subscribe to feeds from other sites; updates will appear in your "
+"personal timeline."
+msgstr ""
+
+#: actions/feedsubsettings.php:96
+msgid "Subscribe"
+msgstr ""
+
+#: actions/feedsubsettings.php:98
+msgid "Continue"
+msgstr ""
+
+#: actions/feedsubsettings.php:151
+msgid "Empty feed URL!"
+msgstr ""
+
+#: actions/feedsubsettings.php:161
+msgid "Invalid URL or could not reach server."
+msgstr ""
+
+#: actions/feedsubsettings.php:164
+msgid "Cannot read feed; server returned error."
+msgstr ""
+
+#: actions/feedsubsettings.php:167
+msgid "Cannot read feed; server returned an empty page."
+msgstr ""
+
+#: actions/feedsubsettings.php:170
+msgid "Bad HTML, could not find feed link."
+msgstr ""
+
+#: actions/feedsubsettings.php:173
+msgid "Could not find a feed linked from this URL."
+msgstr ""
+
+#: actions/feedsubsettings.php:176
+msgid "Not a recognized feed type."
+msgstr ""
+
+#: actions/feedsubsettings.php:180
+msgid "Bad feed URL."
+msgstr ""
+
+#: actions/feedsubsettings.php:188
+msgid "Feed is not PuSH-enabled; cannot subscribe."
+msgstr ""
+
+#: actions/feedsubsettings.php:208
+msgid "Feed subscription failed! Bad response from hub."
+msgstr ""
+
+#: actions/feedsubsettings.php:218
+msgid "Already subscribed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:220
+msgid "Feed subscribed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:222
+msgid "Feed subscription failed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:231
+msgid "Previewing feed:"
+msgstr ""
diff --git a/plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po b/plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po
new file mode 100644 (file)
index 0000000..f17dfa5
--- /dev/null
@@ -0,0 +1,106 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-07 14:14-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: FeedSubPlugin.php:77
+msgid "Feeds"
+msgstr "Flux"
+
+#: FeedSubPlugin.php:78
+msgid "Feed subscription options"
+msgstr "Préférences pour abonnement flux"
+
+#: feedmunger.php:215
+#, php-format
+msgid "New post: \"%1$s\" %2$s"
+msgstr "Nouveau: \"%1$s\" %2$s"
+
+#: actions/feedsubsettings.php:41
+msgid "Feed subscriptions"
+msgstr "Abonnements aux fluxes"
+
+#: actions/feedsubsettings.php:52
+msgid ""
+"You can subscribe to feeds from other sites; updates will appear in your "
+"personal timeline."
+msgstr ""
+"Abonner aux fluxes RSS ou Atom des autres sites web; les temps se trouverair"
+"en votre flux personnel."
+
+#: actions/feedsubsettings.php:96
+msgid "Subscribe"
+msgstr "Abonner"
+
+#: actions/feedsubsettings.php:98
+msgid "Continue"
+msgstr "Prochaine"
+
+#: actions/feedsubsettings.php:151
+msgid "Empty feed URL!"
+msgstr ""
+
+#: actions/feedsubsettings.php:161
+msgid "Invalid URL or could not reach server."
+msgstr ""
+
+#: actions/feedsubsettings.php:164
+msgid "Cannot read feed; server returned error."
+msgstr ""
+
+#: actions/feedsubsettings.php:167
+msgid "Cannot read feed; server returned an empty page."
+msgstr ""
+
+#: actions/feedsubsettings.php:170
+msgid "Bad HTML, could not find feed link."
+msgstr ""
+
+#: actions/feedsubsettings.php:173
+msgid "Could not find a feed linked from this URL."
+msgstr ""
+
+#: actions/feedsubsettings.php:176
+msgid "Not a recognized feed type."
+msgstr ""
+
+#: actions/feedsubsettings.php:180
+msgid "Bad feed URL."
+msgstr ""
+
+#: actions/feedsubsettings.php:188
+msgid "Feed is not PuSH-enabled; cannot subscribe."
+msgstr ""
+
+#: actions/feedsubsettings.php:208
+msgid "Feed subscription failed! Bad response from hub."
+msgstr ""
+
+#: actions/feedsubsettings.php:218
+msgid "Already subscribed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:220
+msgid "Feed subscribed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:222
+msgid "Feed subscription failed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:231
+msgid "Previewing feed:"
+msgstr ""
diff --git a/plugins/FeedSub/tests/gettext-speedtest.php b/plugins/FeedSub/tests/gettext-speedtest.php
new file mode 100644 (file)
index 0000000..8bbdf5e
--- /dev/null
@@ -0,0 +1,78 @@
+<?php
+
+if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
+    print "This script must be run from the command line\n";
+    exit();
+}
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
+define('STATUSNET', true);
+define('LACONICA', true);
+
+require_once INSTALLDIR . '/scripts/commandline.inc';
+require_once INSTALLDIR . '/extlib/php-gettext/gettext.inc';
+
+common_init_locale("en_US");
+common_init_locale('fr');
+
+
+putenv("LANG=fr");
+putenv("LANGUAGE=fr");
+setlocale('fr.utf8');
+_setlocale('fr.utf8');
+
+_bindtextdomain("statusnet", INSTALLDIR . '/locale');
+_bindtextdomain("FeedSub", INSTALLDIR . '/plugins/FeedSub/locale');
+
+$times = 10000;
+$delta = array();
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+    $result = _("Send");
+}
+$delta["_"] = array((microtime(true) - $start) / $times, $result);
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+    $result = __("Send");
+}
+$delta["__"] = array((microtime(true) - $start) / $times, $result);
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+    $result = dgettext("FeedSub", "Feeds");
+}
+$delta["dgettext"] = array((microtime(true) - $start) / $times, $result);
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+    $result = _dgettext("FeedSub", "Feeds");
+}
+$delta["_dgettext"] = array((microtime(true) - $start) / $times, $result);
+
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+    $result = _m("Feeds");
+}
+$delta["_m"] = array((microtime(true) - $start) / $times, $result);
+
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+    $result = fake("Feeds");
+}
+$delta["fake"] = array((microtime(true) - $start) / $times, $result);
+
+foreach ($delta as $func => $bits) {
+    list($time, $result) = $bits;
+    $ms = $time * 1000.0;
+    printf("%10s %2.4fms %s\n", $func, $ms, $result);
+}
+
+
+function fake($str) {
+    return $str;
+}
+
index f20e81b0ea63ce66a3a40c164f4ccebc536264da..93679e56c24496a7abae456048ddd066f62d3284 100644 (file)
@@ -177,7 +177,7 @@ class MapstractionPlugin extends Plugin
         $action->elementStart('div', array('id' => 'entity_map',
                                          'class' => 'section'));
 
-        $action->element('h2', null, _('Map'));
+        $action->element('h2', null, _m('Map'));
 
         $action->element('div', array('id' => 'map_canvas',
                                     'class' => 'gray smallmap',
@@ -188,7 +188,7 @@ class MapstractionPlugin extends Plugin
                                     array('nickname' => $action->trimmed('nickname')));
 
         $action->element('a', array('href' => $mapUrl),
-                         _("Full size"));
+                         _m("Full size"));
 
         $action->elementEnd('div');
     }
index 0c4f03b31c9cd864c11cc8fb4cc8f65bc931215d..e73aa76e8e393e68563886d6430f696f675a4eb0 100644 (file)
@@ -68,10 +68,10 @@ class AllmapAction extends MapAction
         }
 
         if ($this->page == 1) {
-            return sprintf(_("%s friends map"),
+            return sprintf(_m("%s friends map"),
                            $base);
         } else {
-            return sprintf(_("%s friends map, page %d"),
+            return sprintf(_m("%s friends map, page %d"),
                            $base,
                            $this->page);
         }
diff --git a/plugins/Mapstraction/locale/Mapstraction.po b/plugins/Mapstraction/locale/Mapstraction.po
new file mode 100644 (file)
index 0000000..c1c50bf
--- /dev/null
@@ -0,0 +1,48 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-07 20:38-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: allmap.php:71
+#, php-format
+msgid "%s friends map"
+msgstr ""
+
+#: allmap.php:74
+#, php-format
+msgid "%s friends map, page %d"
+msgstr ""
+
+#: map.php:72
+msgid "No such user."
+msgstr ""
+
+#: map.php:79
+msgid "User has no profile."
+msgstr ""
+
+#: usermap.php:71
+#, php-format
+msgid "%s map, page %d"
+msgstr ""
+
+#: MapstractionPlugin.php:180
+msgid "Map"
+msgstr ""
+
+#: MapstractionPlugin.php:191
+msgid "Full size"
+msgstr ""
index 734e480884a3b4db5ebe94f04f951bfbdc71ae96..a33dfc7360a82e1ffd40be0df97019e402f46b65 100644 (file)
@@ -69,14 +69,14 @@ class MapAction extends OwnerDesignAction
         $this->user = User::staticGet('nickname', $nickname);
 
         if (!$this->user) {
-            $this->clientError(_('No such user.'), 404);
+            $this->clientError(_m('No such user.'), 404);
             return false;
         }
 
         $this->profile = $this->user->getProfile();
 
         if (!$this->profile) {
-            $this->serverError(_('User has no profile.'));
+            $this->serverError(_m('User has no profile.'));
             return false;
         }
 
index 3e517ee864fef9ab1d9c4b1cbdc64f82f9ef152b..ff47b6adafb92e9718b4c94e6daa6c5defb0ac0e 100644 (file)
@@ -68,7 +68,7 @@ class UsermapAction extends MapAction
         if ($this->page == 1) {
             return $base;
         } else {
-            return sprintf(_("%s map, page %d"),
+            return sprintf(_m("%s map, page %d"),
                            $base,
                            $this->page);
         }
index e86725d70da4f9a234c900a3d366fa4a85fafefc..a37d5465e84800f8780db2380d7649157c1eb12a 100644 (file)
@@ -120,8 +120,8 @@ class OpenIDPlugin extends Plugin
         $action_name = $action->trimmed('action');
 
         $action->menuItem(common_local_url('openidlogin'),
-                          _('OpenID'),
-                          _('Login or register with OpenID'),
+                          _m('OpenID'),
+                          _m('Login or register with OpenID'),
                           $action_name === 'openidlogin');
 
         return true;
@@ -132,8 +132,8 @@ class OpenIDPlugin extends Plugin
         $action_name = $action->trimmed('action');
 
         $action->menuItem(common_local_url('openidsettings'),
-                          _('OpenID'),
-                          _('Add or remove OpenIDs'),
+                          _m('OpenID'),
+                          _m('Add or remove OpenIDs'),
                           $action_name === 'openidsettings');
 
         return true;
index 7cd9165231eb42df513ca82651f9dd7aad9ce50b..991e6584ee7ce07ac3402f93f1170fbaaaaf1adf 100644 (file)
@@ -64,7 +64,7 @@ class FinishaddopenidAction extends Action
     {
         parent::handle($args);
         if (!common_logged_in()) {
-            $this->clientError(_('Not logged in.'));
+            $this->clientError(_m('Not logged in.'));
         } else {
             $this->tryLogin();
         }
@@ -85,11 +85,11 @@ class FinishaddopenidAction extends Action
         $response = $consumer->complete(common_local_url('finishaddopenid'));
 
         if ($response->status == Auth_OpenID_CANCEL) {
-            $this->message(_('OpenID authentication cancelled.'));
+            $this->message(_m('OpenID authentication cancelled.'));
             return;
         } else if ($response->status == Auth_OpenID_FAILURE) {
             // Authentication failed; display the error message.
-            $this->message(sprintf(_('OpenID authentication failed: %s'),
+            $this->message(sprintf(_m('OpenID authentication failed: %s'),
                                    $response->message));
         } else if ($response->status == Auth_OpenID_SUCCESS) {
 
@@ -109,9 +109,9 @@ class FinishaddopenidAction extends Action
 
             if ($other) {
                 if ($other->id == $cur->id) {
-                    $this->message(_('You already have this OpenID!'));
+                    $this->message(_m('You already have this OpenID!'));
                 } else {
-                    $this->message(_('Someone else already has this OpenID.'));
+                    $this->message(_m('Someone else already has this OpenID.'));
                 }
                 return;
             }
@@ -123,12 +123,12 @@ class FinishaddopenidAction extends Action
             $result = oid_link_user($cur->id, $canonical, $display);
 
             if (!$result) {
-                $this->message(_('Error connecting user.'));
+                $this->message(_m('Error connecting user.'));
                 return;
             }
             if ($sreg) {
                 if (!oid_update_user($cur, $sreg)) {
-                    $this->message(_('Error updating profile'));
+                    $this->message(_m('Error updating profile'));
                     return;
                 }
             }
@@ -167,7 +167,7 @@ class FinishaddopenidAction extends Action
 
     function title()
     {
-        return _('OpenID Login');
+        return _m('OpenID Login');
     }
 
     /**
index e5551b4126758497cc2005296a8113197cd944b4..987fa921387518f8eef042d05fbe88479d6c11db 100644 (file)
@@ -31,16 +31,16 @@ class FinishopenidloginAction extends Action
     {
         parent::handle($args);
         if (common_is_real_login()) {
-            $this->clientError(_('Already logged in.'));
+            $this->clientError(_m('Already logged in.'));
         } else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
             $token = $this->trimmed('token');
             if (!$token || $token != common_session_token()) {
-                $this->showForm(_('There was a problem with your session token. Try again, please.'));
+                $this->showForm(_m('There was a problem with your session token. Try again, please.'));
                 return;
             }
             if ($this->arg('create')) {
                 if (!$this->boolean('license')) {
-                    $this->showForm(_('You can\'t register if you don\'t agree to the license.'),
+                    $this->showForm(_m('You can\'t register if you don\'t agree to the license.'),
                                     $this->trimmed('newname'));
                     return;
                 }
@@ -49,7 +49,7 @@ class FinishopenidloginAction extends Action
                 $this->connectUser();
             } else {
                 common_debug(print_r($this->args, true), __FILE__);
-                $this->showForm(_('Something weird happened.'),
+                $this->showForm(_m('Something weird happened.'),
                                 $this->trimmed('newname'));
             }
         } else {
@@ -63,13 +63,13 @@ class FinishopenidloginAction extends Action
             $this->element('div', array('class' => 'error'), $this->error);
         } else {
             $this->element('div', 'instructions',
-                           sprintf(_('This is the first time you\'ve logged into %s so we must connect your OpenID to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name')));
+                           sprintf(_m('This is the first time you\'ve logged into %s so we must connect your OpenID to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name')));
         }
     }
 
     function title()
     {
-        return _('OpenID Account Setup');
+        return _m('OpenID Account Setup');
     }
 
     function showForm($error=null, $username=null)
@@ -94,14 +94,14 @@ class FinishopenidloginAction extends Action
         $this->hidden('token', common_session_token());
         $this->elementStart('fieldset', array('id' => 'form_openid_createaccount'));
         $this->element('legend', null,
-                       _('Create new account'));
+                       _m('Create new account'));
         $this->element('p', null,
-                       _('Create a new user with this nickname.'));
+                       _m('Create a new user with this nickname.'));
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
-        $this->input('newname', _('New nickname'),
+        $this->input('newname', _m('New nickname'),
                      ($this->username) ? $this->username : '',
-                     _('1-64 lowercase letters or numbers, no punctuation or spaces'));
+                     _m('1-64 lowercase letters or numbers, no punctuation or spaces'));
         $this->elementEnd('li');
         $this->elementStart('li');
         $this->element('input', array('type' => 'checkbox',
@@ -111,30 +111,30 @@ class FinishopenidloginAction extends Action
                                       'value' => 'true'));
         $this->elementStart('label', array('for' => 'license',
                                           'class' => 'checkbox'));
-        $this->text(_('My text and files are available under '));
+        $this->text(_m('My text and files are available under '));
         $this->element('a', array('href' => common_config('license', 'url')),
                        common_config('license', 'title'));
-        $this->text(_(' except this private data: password, email address, IM address, phone number.'));
+        $this->text(_m(' except this private data: password, email address, IM address, phone number.'));
         $this->elementEnd('label');
         $this->elementEnd('li');
         $this->elementEnd('ul');
-        $this->submit('create', _('Create'));
+        $this->submit('create', _m('Create'));
         $this->elementEnd('fieldset');
 
         $this->elementStart('fieldset', array('id' => 'form_openid_createaccount'));
         $this->element('legend', null,
-                       _('Connect existing account'));
+                       _m('Connect existing account'));
         $this->element('p', null,
-                       _('If you already have an account, login with your username and password to connect it to your OpenID.'));
+                       _m('If you already have an account, login with your username and password to connect it to your OpenID.'));
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
-        $this->input('nickname', _('Existing nickname'));
+        $this->input('nickname', _m('Existing nickname'));
         $this->elementEnd('li');
         $this->elementStart('li');
-        $this->password('password', _('Password'));
+        $this->password('password', _m('Password'));
         $this->elementEnd('li');
         $this->elementEnd('ul');
-        $this->submit('connect', _('Connect'));
+        $this->submit('connect', _m('Connect'));
         $this->elementEnd('fieldset');
         $this->elementEnd('form');
     }
@@ -146,11 +146,11 @@ class FinishopenidloginAction extends Action
         $response = $consumer->complete(common_local_url('finishopenidlogin'));
 
         if ($response->status == Auth_OpenID_CANCEL) {
-            $this->message(_('OpenID authentication cancelled.'));
+            $this->message(_m('OpenID authentication cancelled.'));
             return;
         } else if ($response->status == Auth_OpenID_FAILURE) {
             // Authentication failed; display the error message.
-            $this->message(sprintf(_('OpenID authentication failed: %s'), $response->message));
+            $this->message(sprintf(_m('OpenID authentication failed: %s'), $response->message));
         } else if ($response->status == Auth_OpenID_SUCCESS) {
             // This means the authentication succeeded; extract the
             // identity URL and Simple Registration data (if it was
@@ -212,7 +212,7 @@ class FinishopenidloginAction extends Action
         # FIXME: save invite code before redirect, and check here
 
         if (common_config('site', 'closed')) {
-            $this->clientError(_('Registration not allowed.'));
+            $this->clientError(_m('Registration not allowed.'));
             return;
         }
 
@@ -221,14 +221,14 @@ class FinishopenidloginAction extends Action
         if (common_config('site', 'inviteonly')) {
             $code = $_SESSION['invitecode'];
             if (empty($code)) {
-                $this->clientError(_('Registration not allowed.'));
+                $this->clientError(_m('Registration not allowed.'));
                 return;
             }
 
             $invite = Invitation::staticGet($code);
 
             if (empty($invite)) {
-                $this->clientError(_('Not a valid invitation code.'));
+                $this->clientError(_m('Not a valid invitation code.'));
                 return;
             }
         }
@@ -238,24 +238,24 @@ class FinishopenidloginAction extends Action
         if (!Validate::string($nickname, array('min_length' => 1,
                                                'max_length' => 64,
                                                'format' => NICKNAME_FMT))) {
-            $this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.'));
+            $this->showForm(_m('Nickname must have only lowercase letters and numbers and no spaces.'));
             return;
         }
 
         if (!User::allowed_nickname($nickname)) {
-            $this->showForm(_('Nickname not allowed.'));
+            $this->showForm(_m('Nickname not allowed.'));
             return;
         }
 
         if (User::staticGet('nickname', $nickname)) {
-            $this->showForm(_('Nickname already in use. Try another one.'));
+            $this->showForm(_m('Nickname already in use. Try another one.'));
             return;
         }
 
         list($display, $canonical, $sreg) = $this->getSavedValues();
 
         if (!$display || !$canonical) {
-            $this->serverError(_('Stored OpenID not found.'));
+            $this->serverError(_m('Stored OpenID not found.'));
             return;
         }
 
@@ -264,7 +264,7 @@ class FinishopenidloginAction extends Action
         $other = oid_get_user($canonical);
 
         if ($other) {
-            $this->serverError(_('Creating new account for OpenID that already has a user.'));
+            $this->serverError(_m('Creating new account for OpenID that already has a user.'));
             return;
         }
 
@@ -324,7 +324,7 @@ class FinishopenidloginAction extends Action
         $password = $this->trimmed('password');
 
         if (!common_check_user($nickname, $password)) {
-            $this->showForm(_('Invalid username or password.'));
+            $this->showForm(_m('Invalid username or password.'));
             return;
         }
 
@@ -335,14 +335,14 @@ class FinishopenidloginAction extends Action
         list($display, $canonical, $sreg) = $this->getSavedValues();
 
         if (!$display || !$canonical) {
-            $this->serverError(_('Stored OpenID not found.'));
+            $this->serverError(_m('Stored OpenID not found.'));
             return;
         }
 
         $result = oid_link_user($user->id, $canonical, $display);
 
         if (!$result) {
-            $this->serverError(_('Error connecting user to OpenID.'));
+            $this->serverError(_m('Error connecting user to OpenID.'));
             return;
         }
 
diff --git a/plugins/OpenID/locale/OpenID.po b/plugins/OpenID/locale/OpenID.po
new file mode 100644 (file)
index 0000000..34738bc
--- /dev/null
@@ -0,0 +1,344 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-07 20:38-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: openidlogin.php:30 finishopenidlogin.php:34
+msgid "Already logged in."
+msgstr ""
+
+#: openidlogin.php:37 openidsettings.php:194 finishopenidlogin.php:38
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: openidlogin.php:66
+#, php-format
+msgid ""
+"For security reasons, please re-login with your [OpenID](%%doc.openid%%) "
+"before changing your settings."
+msgstr ""
+
+#: openidlogin.php:70
+#, php-format
+msgid "Login with an [OpenID](%%doc.openid%%) account."
+msgstr ""
+
+#: openidlogin.php:95 finishaddopenid.php:170
+msgid "OpenID Login"
+msgstr ""
+
+#: openidlogin.php:112
+msgid "OpenID login"
+msgstr ""
+
+#: openidlogin.php:117 openidsettings.php:107
+msgid "OpenID URL"
+msgstr ""
+
+#: openidlogin.php:119
+msgid "Your OpenID URL"
+msgstr ""
+
+#: openidlogin.php:122
+msgid "Remember me"
+msgstr ""
+
+#: openidlogin.php:123
+msgid "Automatically login in the future; not for shared computers!"
+msgstr ""
+
+#: openidlogin.php:127
+msgid "Login"
+msgstr ""
+
+#: openidserver.php:106
+#, php-format
+msgid "You are not authorized to use the identity %s"
+msgstr ""
+
+#: openidserver.php:126
+msgid "Just an OpenID provider. Nothing to see here, move along..."
+msgstr ""
+
+#: OpenIDPlugin.php:123 OpenIDPlugin.php:135
+msgid "OpenID"
+msgstr ""
+
+#: OpenIDPlugin.php:124
+msgid "Login or register with OpenID"
+msgstr ""
+
+#: OpenIDPlugin.php:136
+msgid "Add or remove OpenIDs"
+msgstr ""
+
+#: openid.php:141
+msgid "Cannot instantiate OpenID consumer object."
+msgstr ""
+
+#: openid.php:151
+msgid "Not a valid OpenID."
+msgstr ""
+
+#: openid.php:153
+#, php-format
+msgid "OpenID failure: %s"
+msgstr ""
+
+#: openid.php:180
+#, php-format
+msgid "Could not redirect to server: %s"
+msgstr ""
+
+#: openid.php:198
+#, php-format
+msgid "Could not create OpenID form: %s"
+msgstr ""
+
+#: openid.php:214
+msgid ""
+"This form should automatically submit itself. If not, click the submit "
+"button to go to your OpenID provider."
+msgstr ""
+
+#: openid.php:246
+msgid "Error saving the profile."
+msgstr ""
+
+#: openid.php:257
+msgid "Error saving the user."
+msgstr ""
+
+#: openid.php:277
+msgid "OpenID Auto-Submit"
+msgstr ""
+
+#: openidtrust.php:51
+msgid "OpenID Identity Verification"
+msgstr ""
+
+#: openidtrust.php:69
+msgid ""
+"This page should only be reached during OpenID processing, not directly."
+msgstr ""
+
+#: openidtrust.php:118
+#, php-format
+msgid ""
+"%s  has asked to verify your identity. Click Continue to verify your "
+"identity and login without creating a new password."
+msgstr ""
+
+#: openidtrust.php:136
+msgid "Continue"
+msgstr ""
+
+#: openidtrust.php:137
+msgid "Cancel"
+msgstr ""
+
+#: finishaddopenid.php:67
+msgid "Not logged in."
+msgstr ""
+
+#: finishaddopenid.php:88 finishopenidlogin.php:149
+msgid "OpenID authentication cancelled."
+msgstr ""
+
+#: finishaddopenid.php:92 finishopenidlogin.php:153
+#, php-format
+msgid "OpenID authentication failed: %s"
+msgstr ""
+
+#: finishaddopenid.php:112
+msgid "You already have this OpenID!"
+msgstr ""
+
+#: finishaddopenid.php:114
+msgid "Someone else already has this OpenID."
+msgstr ""
+
+#: finishaddopenid.php:126
+msgid "Error connecting user."
+msgstr ""
+
+#: finishaddopenid.php:131
+msgid "Error updating profile"
+msgstr ""
+
+#: openidsettings.php:59
+msgid "OpenID settings"
+msgstr ""
+
+#: openidsettings.php:70
+#, php-format
+msgid ""
+"[OpenID](%%doc.openid%%) lets you log into many sites with the same user "
+"account. Manage your associated OpenIDs from here."
+msgstr ""
+
+#: openidsettings.php:99
+msgid "Add OpenID"
+msgstr ""
+
+#: openidsettings.php:102
+msgid ""
+"If you want to add an OpenID to your account, enter it in the box below and "
+"click \"Add\"."
+msgstr ""
+
+#: openidsettings.php:117
+msgid "Add"
+msgstr ""
+
+#: openidsettings.php:129
+msgid "Remove OpenID"
+msgstr ""
+
+#: openidsettings.php:134
+msgid ""
+"Removing your only OpenID would make it impossible to log in! If you need to "
+"remove it, add another OpenID first."
+msgstr ""
+
+#: openidsettings.php:149
+msgid ""
+"You can remove an OpenID from your account by clicking the button marked "
+"\"Remove\"."
+msgstr ""
+
+#: openidsettings.php:172
+msgid "Remove"
+msgstr ""
+
+#: openidsettings.php:208 finishopenidlogin.php:52
+msgid "Something weird happened."
+msgstr ""
+
+#: openidsettings.php:228
+msgid "No such OpenID."
+msgstr ""
+
+#: openidsettings.php:233
+msgid "That OpenID does not belong to you."
+msgstr ""
+
+#: openidsettings.php:237
+msgid "OpenID removed."
+msgstr ""
+
+#: finishopenidlogin.php:43
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#: finishopenidlogin.php:66
+#, php-format
+msgid ""
+"This is the first time you've logged into %s so we must connect your OpenID "
+"to a local account. You can either create a new account, or connect with "
+"your existing account, if you have one."
+msgstr ""
+
+#: finishopenidlogin.php:72
+msgid "OpenID Account Setup"
+msgstr ""
+
+#: finishopenidlogin.php:97
+msgid "Create new account"
+msgstr ""
+
+#: finishopenidlogin.php:99
+msgid "Create a new user with this nickname."
+msgstr ""
+
+#: finishopenidlogin.php:102
+msgid "New nickname"
+msgstr ""
+
+#: finishopenidlogin.php:104
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+
+#: finishopenidlogin.php:114
+msgid "My text and files are available under "
+msgstr ""
+
+#: finishopenidlogin.php:117
+msgid ""
+" except this private data: password, email address, IM address, phone number."
+msgstr ""
+
+#: finishopenidlogin.php:121
+msgid "Create"
+msgstr ""
+
+#: finishopenidlogin.php:126
+msgid "Connect existing account"
+msgstr ""
+
+#: finishopenidlogin.php:128
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your OpenID."
+msgstr ""
+
+#: finishopenidlogin.php:131
+msgid "Existing nickname"
+msgstr ""
+
+#: finishopenidlogin.php:134
+msgid "Password"
+msgstr ""
+
+#: finishopenidlogin.php:137
+msgid "Connect"
+msgstr ""
+
+#: finishopenidlogin.php:215 finishopenidlogin.php:224
+msgid "Registration not allowed."
+msgstr ""
+
+#: finishopenidlogin.php:231
+msgid "Not a valid invitation code."
+msgstr ""
+
+#: finishopenidlogin.php:241
+msgid "Nickname must have only lowercase letters and numbers and no spaces."
+msgstr ""
+
+#: finishopenidlogin.php:246
+msgid "Nickname not allowed."
+msgstr ""
+
+#: finishopenidlogin.php:251
+msgid "Nickname already in use. Try another one."
+msgstr ""
+
+#: finishopenidlogin.php:258 finishopenidlogin.php:338
+msgid "Stored OpenID not found."
+msgstr ""
+
+#: finishopenidlogin.php:267
+msgid "Creating new account for OpenID that already has a user."
+msgstr ""
+
+#: finishopenidlogin.php:327
+msgid "Invalid username or password."
+msgstr ""
+
+#: finishopenidlogin.php:345
+msgid "Error connecting user to OpenID."
+msgstr ""
index dd628e7733ffc5edc6ec3ef1d8c8dc5fec6c184c..8f949c9c5dce26f111edc8875e862f1f5a939230 100644 (file)
@@ -138,7 +138,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
     $consumer = oid_consumer();
 
     if (!$consumer) {
-        common_server_error(_('Cannot instantiate OpenID consumer object.'));
+        common_server_error(_m('Cannot instantiate OpenID consumer object.'));
         return false;
     }
 
@@ -148,9 +148,9 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
 
     // Handle failure status return values.
     if (!$auth_request) {
-        return _('Not a valid OpenID.');
+        return _m('Not a valid OpenID.');
     } else if (Auth_OpenID::isFailure($auth_request)) {
-        return sprintf(_('OpenID failure: %s'), $auth_request->message);
+        return sprintf(_m('OpenID failure: %s'), $auth_request->message);
     }
 
     $sreg_request = Auth_OpenID_SRegRequest::build(// Required
@@ -177,7 +177,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
                                                    $immediate);
         if (!$redirect_url) {
         } else if (Auth_OpenID::isFailure($redirect_url)) {
-            return sprintf(_('Could not redirect to server: %s'), $redirect_url->message);
+            return sprintf(_m('Could not redirect to server: %s'), $redirect_url->message);
         } else {
             common_redirect($redirect_url, 303);
         }
@@ -195,7 +195,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
         // Display an error if the form markup couldn't be generated;
         // otherwise, render the HTML.
         if (Auth_OpenID::isFailure($form_html)) {
-            common_server_error(sprintf(_('Could not create OpenID form: %s'), $form_html->message));
+            common_server_error(sprintf(_m('Could not create OpenID form: %s'), $form_html->message));
         } else {
             $action = new AutosubmitAction(); // see below
             $action->form_html = $form_html;
@@ -211,7 +211,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
 function _oid_print_instructions()
 {
     common_element('div', 'instructions',
-                   _('This form should automatically submit itself. '.
+                   _m('This form should automatically submit itself. '.
                       'If not, click the submit button to go to your '.
                       'OpenID provider.'));
 }
@@ -243,7 +243,7 @@ function oid_update_user(&$user, &$sreg)
     # XXX save timezone if it's passed
 
     if (!$profile->update($orig_profile)) {
-        common_server_error(_('Error saving the profile.'));
+        common_server_error(_m('Error saving the profile.'));
         return false;
     }
 
@@ -254,7 +254,7 @@ function oid_update_user(&$user, &$sreg)
     }
 
     if (!$user->update($orig_user)) {
-        common_server_error(_('Error saving the user.'));
+        common_server_error(_m('Error saving the user.'));
         return false;
     }
 
@@ -274,7 +274,7 @@ class AutosubmitAction extends Action
 
     function title()
     {
-        return _('OpenID Auto-Submit');
+        return _m('OpenID Auto-Submit');
     }
 
     function showContent()
index 29e89234e9c5b8526aac17ac3e15342405021601..9ba55911c014c8afa156e16ce71b7fb33610ba3d 100644 (file)
@@ -27,14 +27,14 @@ class OpenidloginAction extends Action
     {
         parent::handle($args);
         if (common_is_real_login()) {
-            $this->clientError(_('Already logged in.'));
+            $this->clientError(_m('Already logged in.'));
         } else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
             $openid_url = $this->trimmed('openid_url');
 
             # CSRF protection
             $token = $this->trimmed('token');
             if (!$token || $token != common_session_token()) {
-                $this->showForm(_('There was a problem with your session token. Try again, please.'), $openid_url);
+                $this->showForm(_m('There was a problem with your session token. Try again, please.'), $openid_url);
                 return;
             }
 
@@ -63,11 +63,11 @@ class OpenidloginAction extends Action
             common_get_returnto()) {
             // rememberme logins have to reauthenticate before
             // changing any profile settings (cookie-stealing protection)
-            return _('For security reasons, please re-login with your ' .
+            return _m('For security reasons, please re-login with your ' .
                      '[OpenID](%%doc.openid%%) ' .
                      'before changing your settings.');
         } else {
-            return _('Login with an [OpenID](%%doc.openid%%) account.');
+            return _m('Login with an [OpenID](%%doc.openid%%) account.');
         }
     }
 
@@ -92,7 +92,7 @@ class OpenidloginAction extends Action
 
     function title()
     {
-        return _('OpenID Login');
+        return _m('OpenID Login');
     }
 
     function showForm($error=null, $openid_url)
@@ -109,22 +109,22 @@ class OpenidloginAction extends Action
                                            'class' => 'form_settings',
                                            'action' => $formaction));
         $this->elementStart('fieldset');
-        $this->element('legend', null, _('OpenID login'));
+        $this->element('legend', null, _m('OpenID login'));
         $this->hidden('token', common_session_token());
 
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
-        $this->input('openid_url', _('OpenID URL'),
+        $this->input('openid_url', _m('OpenID URL'),
                      $this->openid_url,
-                     _('Your OpenID URL'));
+                     _m('Your OpenID URL'));
         $this->elementEnd('li');
         $this->elementStart('li', array('id' => 'settings_rememberme'));
-        $this->checkbox('rememberme', _('Remember me'), false,
-                        _('Automatically login in the future; ' .
+        $this->checkbox('rememberme', _m('Remember me'), false,
+                        _m('Automatically login in the future; ' .
                            'not for shared computers!'));
         $this->elementEnd('li');
         $this->elementEnd('ul');
-        $this->submit('submit', _('Login'));
+        $this->submit('submit', _m('Login'));
         $this->elementEnd('fieldset');
         $this->elementEnd('form');
     }
index dab97c93ed281d3cbc03187002d56d1501e4d874..181cbdf45eebb64b62a754eb22f7fe1ceac114ba 100644 (file)
@@ -103,7 +103,7 @@ class OpenidserverAction extends Action
                 $response = $this->generateDenyResponse($request);
             } else {
                 //invalid
-                $this->clientError(sprintf(_('You are not authorized to use the identity %s'),$request->identity),$code=403);
+                $this->clientError(sprintf(_m('You are not authorized to use the identity %s'),$request->identity),$code=403);
             }
         } else {
             $response = $this->oserver->handleRequest($request);
@@ -123,7 +123,7 @@ class OpenidserverAction extends Action
             }
             $this->raw($response->body);
         }else{
-            $this->clientError(_('Just an OpenID provider. Nothing to see here, move along...'),$code=500);
+            $this->clientError(_m('Just an OpenID provider. Nothing to see here, move along...'),$code=500);
         }
     }
 
index 3ad46f5f57ce6824ff4717f3be37ba176f593c80..3fc3d61289bc5f9164b3e05bf981d7469a7fe9f6 100644 (file)
@@ -56,7 +56,7 @@ class OpenidsettingsAction extends AccountSettingsAction
 
     function title()
     {
-        return _('OpenID settings');
+        return _m('OpenID settings');
     }
 
     /**
@@ -67,7 +67,7 @@ class OpenidsettingsAction extends AccountSettingsAction
 
     function getInstructions()
     {
-        return _('[OpenID](%%doc.openid%%) lets you log into many sites' .
+        return _m('[OpenID](%%doc.openid%%) lets you log into many sites' .
                  ' with the same user account.'.
                  ' Manage your associated OpenIDs from here.');
     }
@@ -96,15 +96,15 @@ class OpenidsettingsAction extends AccountSettingsAction
                                           'action' =>
                                           common_local_url('openidsettings')));
         $this->elementStart('fieldset', array('id' => 'settings_openid_add'));
-        $this->element('legend', null, _('Add OpenID'));
+        $this->element('legend', null, _m('Add OpenID'));
         $this->hidden('token', common_session_token());
         $this->element('p', 'form_guide',
-                       _('If you want to add an OpenID to your account, ' .
+                       _m('If you want to add an OpenID to your account, ' .
                          'enter it in the box below and click "Add".'));
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
         $this->element('label', array('for' => 'openid_url'),
-                       _('OpenID URL'));
+                       _m('OpenID URL'));
         $this->element('input', array('name' => 'openid_url',
                                       'type' => 'text',
                                       'id' => 'openid_url'));
@@ -114,7 +114,7 @@ class OpenidsettingsAction extends AccountSettingsAction
                                       'id' => 'settings_openid_add_action-submit',
                                       'name' => 'add',
                                       'class' => 'submit',
-                                      'value' => _('Add')));
+                                      'value' => _m('Add')));
         $this->elementEnd('fieldset');
         $this->elementEnd('form');
 
@@ -126,12 +126,12 @@ class OpenidsettingsAction extends AccountSettingsAction
 
         if ($cnt > 0) {
 
-            $this->element('h2', null, _('Remove OpenID'));
+            $this->element('h2', null, _m('Remove OpenID'));
 
             if ($cnt == 1 && !$user->password) {
 
                 $this->element('p', 'form_guide',
-                               _('Removing your only OpenID '.
+                               _m('Removing your only OpenID '.
                                  'would make it impossible to log in! ' .
                                  'If you need to remove it, '.
                                  'add another OpenID first.'));
@@ -146,7 +146,7 @@ class OpenidsettingsAction extends AccountSettingsAction
             } else {
 
                 $this->element('p', 'form_guide',
-                               _('You can remove an OpenID from your account '.
+                               _m('You can remove an OpenID from your account '.
                                  'by clicking the button marked "Remove".'));
                 $idx = 0;
 
@@ -169,7 +169,7 @@ class OpenidsettingsAction extends AccountSettingsAction
                                                   'id' => 'remove'.$idx,
                                                   'name' => 'remove',
                                                   'class' => 'submit remove',
-                                                  'value' => _('Remove')));
+                                                  'value' => _m('Remove')));
                     $this->elementEnd('fieldset');
                     $this->elementEnd('form');
                     $idx++;
@@ -191,7 +191,7 @@ class OpenidsettingsAction extends AccountSettingsAction
         // CSRF protection
         $token = $this->trimmed('token');
         if (!$token || $token != common_session_token()) {
-            $this->showForm(_('There was a problem with your session token. '.
+            $this->showForm(_m('There was a problem with your session token. '.
                               'Try again, please.'));
             return;
         }
@@ -205,7 +205,7 @@ class OpenidsettingsAction extends AccountSettingsAction
         } else if ($this->arg('remove')) {
             $this->removeOpenid();
         } else {
-            $this->showForm(_('Something weird happened.'));
+            $this->showForm(_m('Something weird happened.'));
         }
     }
 
@@ -225,16 +225,16 @@ class OpenidsettingsAction extends AccountSettingsAction
         $oid = User_openid::staticGet('canonical', $openid_url);
 
         if (!$oid) {
-            $this->showForm(_('No such OpenID.'));
+            $this->showForm(_m('No such OpenID.'));
             return;
         }
         $cur = common_current_user();
         if (!$cur || $oid->user_id != $cur->id) {
-            $this->showForm(_('That OpenID does not belong to you.'));
+            $this->showForm(_m('That OpenID does not belong to you.'));
             return;
         }
         $oid->delete();
-        $this->showForm(_('OpenID removed.'), true);
+        $this->showForm(_m('OpenID removed.'), true);
         return;
     }
 }
index 29c7bdc23cf8b25118884ea72c87286565de5af0..fa7ea36e26c40bc2906aca5ebaa4535e4fde5f7e 100644 (file)
@@ -48,7 +48,7 @@ class OpenidtrustAction extends Action
 
     function title()
     {
-        return _('OpenID Identity Verification');
+        return _m('OpenID Identity Verification');
     }
 
     function prepare($args)
@@ -66,7 +66,7 @@ class OpenidtrustAction extends Action
         $this->allowUrl = $_SESSION['openid_allow_url'];
         $this->denyUrl = $_SESSION['openid_deny_url'];
         if(empty($this->trust_root) || empty($this->allowUrl) || empty($this->denyUrl)){
-            $this->clientError(_('This page should only be reached during OpenID processing, not directly.'));
+            $this->clientError(_m('This page should only be reached during OpenID processing, not directly.'));
             return;
         }
         return true;
@@ -115,7 +115,7 @@ class OpenidtrustAction extends Action
 
     function showPageNotice()
     {
-        $this->element('p',null,sprintf(_('%s  has asked to verify your identity. Click Continue to verify your identity and login without creating a new password.'),$this->trust_root));
+        $this->element('p',null,sprintf(_m('%s  has asked to verify your identity. Click Continue to verify your identity and login without creating a new password.'),$this->trust_root));
     }
 
     /**
@@ -133,8 +133,8 @@ class OpenidtrustAction extends Action
                                    'class' => 'form_settings',
                                    'action' => common_local_url('openidtrust')));
         $this->elementStart('fieldset');
-        $this->submit('allow', _('Continue'));
-        $this->submit('deny', _('Cancel'));
+        $this->submit('allow', _m('Continue'));
+        $this->submit('deny', _m('Cancel'));
         
         $this->elementEnd('fieldset');
         $this->elementEnd('form');
diff --git a/plugins/Sample/SamplePlugin.php b/plugins/Sample/SamplePlugin.php
new file mode 100644 (file)
index 0000000..6e361aa
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package SamplePlugin
+ * @maintainer Your Name <you@example.com>
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+class SamplePlugin extends Plugin
+{
+    function onInitializePlugin()
+    {
+        // Event handlers normally return true to indicate that all is well.
+        //
+        // Returning false will cancel further processing of any other
+        // plugins or core code hooking the same event.
+        return true;
+    }
+
+    /**
+     * Hook for RouterInitialized event.
+     *
+     * @param Net_URL_Mapper $m path-to-action mapper
+     * @return boolean hook return
+     */
+
+    function onRouterInitialized($m)
+    {
+        $m->connect(':nickname/samples',
+                    array('action' => 'showsamples'),
+                    array('feed' => '[A-Za-z0-9_-]+'));
+        $m->connect('settings/sample',
+                    array('action' => 'samplesettings'));
+        return true;
+    }
+}
+
index adf9ceda34c11d4c12de8a8418de9805d42dce3c..de1181903e805142da3b3538687644a6c5847fd7 100644 (file)
@@ -86,8 +86,8 @@ class TwitterBridgePlugin extends Plugin
         $action_name = $action->trimmed('action');
 
         $action->menuItem(common_local_url('twittersettings'),
-                          _('Twitter'),
-                          _('Twitter integration options'),
+                          _m('Twitter'),
+                          _m('Twitter integration options'),
                           $action_name === 'twittersettings');
 
         return true;
diff --git a/plugins/TwitterBridge/locale/TwitterBridge.po b/plugins/TwitterBridge/locale/TwitterBridge.po
new file mode 100644 (file)
index 0000000..14c30f1
--- /dev/null
@@ -0,0 +1,128 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-07 20:38-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: twitterauthorization.php:81
+msgid "Not logged in."
+msgstr ""
+
+#: twitterauthorization.php:131 twitterauthorization.php:150
+#: twitterauthorization.php:170 twitterauthorization.php:217
+msgid "Couldn't link your Twitter account."
+msgstr ""
+
+#: TwitterBridgePlugin.php:89
+msgid "Twitter"
+msgstr ""
+
+#: TwitterBridgePlugin.php:90
+msgid "Twitter integration options"
+msgstr ""
+
+#: twittersettings.php:59
+msgid "Twitter settings"
+msgstr ""
+
+#: twittersettings.php:70
+msgid ""
+"Connect your Twitter account to share your updates with your Twitter friends "
+"and vice-versa."
+msgstr ""
+
+#: twittersettings.php:118
+msgid "Twitter account"
+msgstr ""
+
+#: twittersettings.php:123
+msgid "Connected Twitter account"
+msgstr ""
+
+#: twittersettings.php:125
+msgid "Remove"
+msgstr ""
+
+#: twittersettings.php:131
+msgid "Preferences"
+msgstr ""
+
+#: twittersettings.php:135
+msgid "Automatically send my notices to Twitter."
+msgstr ""
+
+#: twittersettings.php:142
+msgid "Send local \"@\" replies to Twitter."
+msgstr ""
+
+#: twittersettings.php:149
+msgid "Subscribe to my Twitter friends here."
+msgstr ""
+
+#: twittersettings.php:158
+msgid "Import my Friends Timeline."
+msgstr ""
+
+#: twittersettings.php:174
+msgid "Save"
+msgstr ""
+
+#: twittersettings.php:176
+msgid "Add"
+msgstr ""
+
+#: twittersettings.php:201
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: twittersettings.php:211
+msgid "Unexpected form submission."
+msgstr ""
+
+#: twittersettings.php:230
+msgid "Couldn't remove Twitter user."
+msgstr ""
+
+#: twittersettings.php:234
+msgid "Twitter account removed."
+msgstr ""
+
+#: twittersettings.php:255 twittersettings.php:265
+msgid "Couldn't save Twitter preferences."
+msgstr ""
+
+#: twittersettings.php:269
+msgid "Twitter preferences saved."
+msgstr ""
+
+#: twitter.php:333
+msgid "Your Twitter bridge has been disabled."
+msgstr ""
+
+#: twitter.php:337
+#, php-format
+msgid ""
+"Hi, %1$s. We're sorry to inform you that your link to Twitter has been "
+"disabled. We no longer seem to have permission to update your Twitter "
+"status. (Did you revoke %3$s's access?)\n"
+"\n"
+"You can re-enable your Twitter bridge by visiting your Twitter settings "
+"page:\n"
+"\n"
+"\t%2$s\n"
+"\n"
+"Regards,\n"
+"%3$s\n"
+msgstr ""
index fd51506388f441ef8d8e63ec889b26613fecefa0..b338a200dec623b2a96793fa36d751061018ed7c 100644 (file)
@@ -330,11 +330,11 @@ function mail_twitter_bridge_removed($user)
 
     $profile = $user->getProfile();
 
-    $subject = sprintf(_('Your Twitter bridge has been disabled.'));
+    $subject = sprintf(_m('Your Twitter bridge has been disabled.'));
 
     $site_name = common_config('site', 'name');
 
-    $body = sprintf(_('Hi, %1$s. We\'re sorry to inform you that your ' .
+    $body = sprintf(_m('Hi, %1$s. We\'re sorry to inform you that your ' .
         'link to Twitter has been disabled. We no longer seem to have ' .
     'permission to update your Twitter status. (Did you revoke ' .
     '%3$s\'s access?)' . "\n\n" .
index f1daefab129584300422952a09f79cea3a2efca0..4af2f0394165d6a6986dca87ee5a46d60d55c270 100644 (file)
@@ -78,7 +78,7 @@ class TwitterauthorizationAction extends Action
         parent::handle($args);
 
         if (!common_logged_in()) {
-            $this->clientError(_('Not logged in.'), 403);
+            $this->clientError(_m('Not logged in.'), 403);
         }
 
         $user  = common_current_user();
@@ -128,7 +128,7 @@ class TwitterauthorizationAction extends Action
         } catch (OAuthClientException $e) {
             $msg = sprintf('OAuth client cURL error - code: %1s, msg: %2s',
                            $e->getCode(), $e->getMessage());
-            $this->serverError(_('Couldn\'t link your Twitter account.'));
+            $this->serverError(_m('Couldn\'t link your Twitter account.'));
         }
 
         common_redirect($auth_link);
@@ -147,7 +147,7 @@ class TwitterauthorizationAction extends Action
         // token we sent them
 
         if ($_SESSION['twitter_request_token'] != $this->oauth_token) {
-            $this->serverError(_('Couldn\'t link your Twitter account.'));
+            $this->serverError(_m('Couldn\'t link your Twitter account.'));
         }
 
         try {
@@ -167,7 +167,7 @@ class TwitterauthorizationAction extends Action
         } catch (OAuthClientException $e) {
             $msg = sprintf('OAuth client cURL error - code: %1$s, msg: %2$s',
                            $e->getCode(), $e->getMessage());
-            $this->serverError(_('Couldn\'t link your Twitter account.'));
+            $this->serverError(_m('Couldn\'t link your Twitter account.'));
         }
 
         // Save the access token and Twitter user info
@@ -214,7 +214,7 @@ class TwitterauthorizationAction extends Action
 
         if (empty($flink_id)) {
             common_log_db_error($flink, 'INSERT', __FILE__);
-                $this->serverError(_('Couldn\'t link your Twitter account.'));
+                $this->serverError(_m('Couldn\'t link your Twitter account.'));
         }
 
         save_twitter_user($twitter_user->id, $twitter_user->screen_name);
index ca22c95535e794823a7a1908b3230a33b07f931b..bc9a636a1586d4bc289d768371a2fb78bea53b42 100644 (file)
@@ -56,7 +56,7 @@ class TwittersettingsAction extends ConnectSettingsAction
 
     function title()
     {
-        return _('Twitter settings');
+        return _m('Twitter settings');
     }
 
     /**
@@ -67,8 +67,8 @@ class TwittersettingsAction extends ConnectSettingsAction
 
     function getInstructions()
     {
-        return _('Connect your Twitter account to share your updates ' .
-                 'with your Twitter friends and vice-versa.');
+        return _m('Connect your Twitter account to share your updates ' .
+                  'with your Twitter friends and vice-versa.');
     }
 
     /**
@@ -115,38 +115,38 @@ class TwittersettingsAction extends ConnectSettingsAction
 
             $this->elementEnd('fieldset');
         } else {
-            $this->element('legend', null, _('Twitter account'));
+            $this->element('legend', null, _m('Twitter account'));
             $this->elementStart('p', array('id' => 'form_confirmed'));
             $this->element('a', array('href' => $fuser->uri), $fuser->nickname);
             $this->elementEnd('p');
             $this->element('p', 'form_note',
-                           _('Connected Twitter account'));
+                           _m('Connected Twitter account'));
 
-            $this->submit('remove', _('Remove'));
+            $this->submit('remove', _m('Remove'));
 
             $this->elementEnd('fieldset');
 
             $this->elementStart('fieldset', array('id' => 'settings_twitter_preferences'));
 
-            $this->element('legend', null, _('Preferences'));
+            $this->element('legend', null, _m('Preferences'));
             $this->elementStart('ul', 'form_data');
             $this->elementStart('li');
             $this->checkbox('noticesend',
-                            _('Automatically send my notices to Twitter.'),
+                            _m('Automatically send my notices to Twitter.'),
                             ($flink) ?
                             ($flink->noticesync & FOREIGN_NOTICE_SEND) :
                             true);
             $this->elementEnd('li');
             $this->elementStart('li');
             $this->checkbox('replysync',
-                            _('Send local "@" replies to Twitter.'),
+                            _m('Send local "@" replies to Twitter.'),
                             ($flink) ?
                             ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) :
                             true);
             $this->elementEnd('li');
             $this->elementStart('li');
             $this->checkbox('friendsync',
-                            _('Subscribe to my Twitter friends here.'),
+                            _m('Subscribe to my Twitter friends here.'),
                             ($flink) ?
                             ($flink->friendsync & FOREIGN_FRIEND_RECV) :
                             false);
@@ -155,7 +155,7 @@ class TwittersettingsAction extends ConnectSettingsAction
             if (common_config('twitterimport','enabled')) {
                 $this->elementStart('li');
                 $this->checkbox('noticerecv',
-                                _('Import my Friends Timeline.'),
+                                _m('Import my Friends Timeline.'),
                                 ($flink) ?
                                 ($flink->noticesync & FOREIGN_NOTICE_RECV) :
                                 false);
@@ -171,9 +171,9 @@ class TwittersettingsAction extends ConnectSettingsAction
             $this->elementEnd('ul');
 
             if ($flink) {
-                $this->submit('save', _('Save'));
+                $this->submit('save', _m('Save'));
             } else {
-                $this->submit('add', _('Add'));
+                $this->submit('add', _m('Add'));
             }
 
             $this->elementEnd('fieldset');
@@ -198,8 +198,8 @@ class TwittersettingsAction extends ConnectSettingsAction
         // CSRF protection
         $token = $this->trimmed('token');
         if (!$token || $token != common_session_token()) {
-            $this->showForm(_('There was a problem with your session token. '.
-                              'Try again, please.'));
+            $this->showForm(_m('There was a problem with your session token. '.
+                               'Try again, please.'));
             return;
         }
 
@@ -208,7 +208,7 @@ class TwittersettingsAction extends ConnectSettingsAction
         } else if ($this->arg('remove')) {
             $this->removeTwitterAccount();
         } else {
-            $this->showForm(_('Unexpected form submission.'));
+            $this->showForm(_m('Unexpected form submission.'));
         }
     }
 
@@ -227,11 +227,11 @@ class TwittersettingsAction extends ConnectSettingsAction
 
         if (empty($result)) {
             common_log_db_error($flink, 'DELETE', __FILE__);
-            $this->serverError(_('Couldn\'t remove Twitter user.'));
+            $this->serverError(_m('Couldn\'t remove Twitter user.'));
             return;
         }
 
-        $this->showForm(_('Twitter account removed.'), true);
+        $this->showForm(_m('Twitter account removed.'), true);
     }
 
     /**
@@ -252,7 +252,7 @@ class TwittersettingsAction extends ConnectSettingsAction
 
         if (empty($flink)) {
             common_log_db_error($flink, 'SELECT', __FILE__);
-            $this->showForm(_('Couldn\'t save Twitter preferences.'));
+            $this->showForm(_m('Couldn\'t save Twitter preferences.'));
             return;
         }
 
@@ -262,11 +262,11 @@ class TwittersettingsAction extends ConnectSettingsAction
 
         if ($result === false) {
             common_log_db_error($flink, 'UPDATE', __FILE__);
-            $this->showForm(_('Couldn\'t save Twitter preferences.'));
+            $this->showForm(_m('Couldn\'t save Twitter preferences.'));
             return;
         }
 
-        $this->showForm(_('Twitter preferences saved.'), true);
+        $this->showForm(_m('Twitter preferences saved.'), true);
     }
 
 }
diff --git a/scripts/update_po_templates.php b/scripts/update_po_templates.php
new file mode 100755 (executable)
index 0000000..83bff6d
--- /dev/null
@@ -0,0 +1,211 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Abort if called from a web server
+if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
+    print "This script must be run from the command line\n";
+    exit();
+}
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+
+function update_core($dir, $domain)
+{
+    $old = getcwd();
+    chdir($dir);
+    passthru(<<<END
+xgettext \
+    --from-code=UTF-8 \
+    --default-domain=$domain \
+    --output=locale/$domain.po \
+    --language=PHP \
+    --keyword="_m:1" \
+    --keyword="pgettext:1c,2" \
+    --keyword="npgettext:1c,2,3" \
+    actions/*.php \
+    classes/*.php \
+    lib/*.php \
+    scripts/*.php
+END
+);
+    chdir($old);
+}
+
+function do_update_plugin($dir, $domain)
+{
+    $old = getcwd();
+    chdir($dir);
+    if (!file_exists('locale')) {
+        mkdir('locale');
+    }
+    $files = get_plugin_sources(".");
+    $cmd = <<<END
+xgettext \
+    --from-code=UTF-8 \
+    --default-domain=$domain \
+    --output=locale/$domain.po \
+    --language=PHP \
+    --keyword='' \
+    --keyword="_m:1" \
+
+END;
+    foreach ($files as $file) {
+      $cmd .= ' ' . escapeshellarg($file);
+    }
+    passthru($cmd);
+    chdir($old);
+}
+
+function do_translatewiki_plugin($basedir, $plugin)
+{
+    $yamldir = "$basedir/locale/TranslateWiki";
+    if (!file_exists($yamldir)) {
+        mkdir($yamldir);
+    }
+    $outfile = "$yamldir/StatusNet-{$plugin}.yml";
+    $data = <<<END
+---
+BASIC:
+  id: out-statusnet-{$plugin}
+  label: StatusNet - {$plugin}
+  description: "{{int:bw-desc-statusnet-plugin-{$plugin}}}"
+  namespace: NS_STATUSNET
+  display: out/statusnet/{$plugin}
+  class: GettextMessageGroup
+
+FILES:
+  class: GettextFFS
+  sourcePattern: %GROUPROOT%/plugins/{$plugin}/locale/%CODE%/LC_MESSAGES/{$plugin}.po
+  targetPattern: {$plugin}.po
+  codeMap:
+    en-gb: en_GB
+    no: nb
+    pt-br: pt_BR
+    zh-hans: zh_CN
+    zh-hant: zh_TW
+
+MANGLER
+  class: StringMatcher
+  prefix: {$plugin}-
+  patterns:
+    - "*"
+
+END;
+    file_put_contents($outfile, $data);
+}
+
+function get_plugins($dir)
+{
+    $plugins = array();
+    $dirs = new DirectoryIterator("$dir/plugins");
+    foreach ($dirs as $item) {
+        if ($item->isDir() && !$item->isDot()) {
+            $name = $item->getBasename();
+            if (file_exists("$dir/plugins/$name/{$name}Plugin.php")) {
+                $plugins[] = $name;
+            }
+        }
+    }
+    return $plugins;
+}
+
+function get_plugin_sources($dir)
+{
+    $files = array();
+
+    $dirs = new RecursiveDirectoryIterator($dir);
+    $iter = new RecursiveIteratorIterator($dirs);
+    foreach ($iter as $pathname => $item) {
+        if ($item->isFile() && preg_match('/\.php$/', $item->getBaseName())) {
+            $files[] = $pathname;
+        }
+    }
+    return $files;
+}
+
+function plugin_using_gettext($dir)
+{
+    $files = get_plugin_sources($dir);
+    foreach ($files as $pathname) {
+        // Check if the file is using our _m gettext wrapper
+        $code = file_get_contents($pathname);
+        if (preg_match('/\b_m\(/', $code)) {
+            return true;
+        }
+    }
+
+    return false;
+}
+
+function update_plugin($basedir, $name)
+{
+    $dir = "$basedir/plugins/$name";
+    if (plugin_using_gettext($dir)) {
+        do_update_plugin($dir, $name);
+        do_translatewiki_plugin($basedir, $name);
+        return true;
+    } else {
+        return false;
+    }
+}
+
+$args = $_SERVER['argv'];
+array_shift($args);
+
+$all = false;
+$core = false;
+$allplugins = false;
+$plugins = array();
+if (count($args) == 0) {
+    $all = true;
+}
+foreach ($args as $arg) {
+    if ($arg == '--all') {
+        $all = true;
+    } elseif ($arg == "--core") {
+        $core = true;
+    } elseif ($arg == "--plugins") {
+        $allplugins = true;
+    } elseif (substr($arg, 0, 9) == "--plugin=") {
+        $plugins[] = substr($arg, 9);
+    }
+}
+
+
+
+if ($all || $core) {
+    echo "core...";
+    update_core(INSTALLDIR, 'statusnet');
+    echo " ok\n";
+}
+if ($all || $allplugins) {
+    $plugins = get_plugins(INSTALLDIR);
+}
+if ($plugins) {
+    foreach ($plugins as $plugin) {
+        echo "$plugin...";
+        if (update_plugin(INSTALLDIR, $plugin)) {
+            echo " ok\n";
+        } else {
+            echo " not localized\n";
+        }
+    }
+}
+
diff --git a/scripts/update_pot.sh b/scripts/update_pot.sh
deleted file mode 100755 (executable)
index de53fe7..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-cd `dirname $0`
-cd ..
-xgettext \
-    --from-code=UTF-8 \
-    --default-domain=statusnet \
-    --output=locale/statusnet.po \
-    --language=PHP \
-    --keyword="pgettext:1c,2" \
-    --keyword="npgettext:1c,2,3" \
-    actions/*.php \
-    classes/*.php \
-    lib/*.php \
-    scripts/*.php