From ad7623a87fe5277706470c43fe357363891326c9 Mon Sep 17 00:00:00 2001
From: Brion Vibber <brion@pobox.com>
Date: Thu, 30 Sep 2010 19:18:46 -0700
Subject: [PATCH] Add a $config['plugins']['locale_path'] which can be set to
 override the individual plugins' locale subdirectories. This will apply to
 *ALL* plugins in *ALL* languages, so should probably only be used when doing
 site customization...

You'd probably do:

  $config['site']['locale_path'] = '/srv/awesome/data/locale';
  $config['plugins']['locale_path'] = '/srv/awesome/data/locale';

with a structure like:
srv/
  awesome/
    data/
      locale/
        en/
          LC_MESSAGES/
            statusnet.po
            OpenID.po
            AnonymousFave.po

etc, all alongside each other. You could separate plugins from the core if you like.

Where locale files have not already been generated, you can build one for a plugin like so:

  php scripts/update_po_templates.php --plugin=MyPlugin

and pull out the template file:

  plugins/MyPlugin/locale/MyPlugin.pot

Edit that (make sure you at least set the CHARSET, probably to UTF-8) and save your customized .po
files into the structure as above, and use msgfmt to generate .mo files for final output.
---
 lib/default.php | 1 +
 lib/plugin.php  | 7 ++++++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/lib/default.php b/lib/default.php
index 6200abada1..45e35e83d3 100644
--- a/lib/default.php
+++ b/lib/default.php
@@ -298,6 +298,7 @@ $default =
                                  'WikiHashtags' => null,
                                  'RSSCloud' => null,
                                  'OpenID' => null),
+              'locale_path' => false, // Set to a path to use *instead of* each plugin's own locale subdirectories
               ),
         'admin' =>
         array('panels' => array('design', 'site', 'user', 'paths', 'access', 'sessions', 'sitenotice', 'license')),
diff --git a/lib/plugin.php b/lib/plugin.php
index ee57f59043..3f84afa27e 100644
--- a/lib/plugin.php
+++ b/lib/plugin.php
@@ -88,7 +88,12 @@ class Plugin
         $class = get_class($this);
         if (substr($class, -6) == 'Plugin') {
             $name = substr($class, 0, -6);
-            $path = INSTALLDIR . "/plugins/$name/locale";
+            $path = common_config('plugins', 'locale_path');
+            if (!$path) {
+                // @fixme this will fail for things installed in local/plugins
+                // ... but then so will web links so far.
+                $path = INSTALLDIR . "/plugins/$name/locale";
+            }
             if (file_exists($path) && is_dir($path)) {
                 bindtextdomain($name, $path);
                 bind_textdomain_codeset($name, 'UTF-8');
-- 
2.39.5