From 54c88cba571a74a901f2d15e7d8db0d349d896d3 Mon Sep 17 00:00:00 2001 From: Brion Vibber 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');