support per-plugin locale directories

This commit is contained in:
Andrew Dolgov 2019-03-01 14:25:24 +03:00
parent 9554bc820d
commit 72fcc81919
2 changed files with 38 additions and 11 deletions

View File

@ -1,4 +1,18 @@
<?php <?php
/* gettext helpers for plugins */
function P__($plugin, $msgid) {
return P_gettext($plugin, $msgid);
}
function P_gettext($plugin, $msgid) {
return _dgettext(PLuginHost::object_to_domain($plugin), $msgid);
}
function P_ngettext($plugin, $singular, $plural, $number) {
return _dngettext(PLuginHost::object_to_domain($plugin), $singular, $plural, $number);
}
class PluginHost { class PluginHost {
private $pdo; private $pdo;
private $hooks = array(); private $hooks = array();
@ -63,6 +77,10 @@ class PluginHost {
const KIND_SYSTEM = 2; const KIND_SYSTEM = 2;
const KIND_USER = 3; const KIND_USER = 3;
static function object_to_domain($plugin) {
return strtolower(get_class($plugin));
}
function __construct() { function __construct() {
$this->pdo = Db::pdo(); $this->pdo = Db::pdo();
@ -211,6 +229,11 @@ class PluginHost {
continue; continue;
} }
if (file_exists(dirname($file) . "/locale")) {
_bindtextdomain($class, dirname($file) . "/locale");
_bind_textdomain_codeset($class, "UTF-8");
}
$this->last_registered = $class; $this->last_registered = $class;
switch ($kind) { switch ($kind) {

View File

@ -141,7 +141,6 @@
} }
_bindtextdomain("messages", "locale"); _bindtextdomain("messages", "locale");
_textdomain("messages"); _textdomain("messages");
_bind_textdomain_codeset("messages", "UTF-8"); _bind_textdomain_codeset("messages", "UTF-8");
} }
@ -2403,18 +2402,23 @@
return __((parseInt(n) > 1) ? msg2 : msg1); return __((parseInt(n) > 1) ? msg2 : msg1);
}'; }';
$l10n = _get_reader(); global $text_domains;
for ($i = 0; $i < $l10n->total; $i++) { foreach (array_keys($text_domains) as $domain) {
$orig = $l10n->get_original_string($i); $l10n = _get_reader($domain);
if(strpos($orig, "\000") !== FALSE) { // Plural forms
$key = explode(chr(0), $orig); for ($i = 0; $i < $l10n->total; $i++) {
print T_js_decl($key[0], _ngettext($key[0], $key[1], 1)); // Singular $orig = $l10n->get_original_string($i);
print T_js_decl($key[1], _ngettext($key[0], $key[1], 2)); // Plural if(strpos($orig, "\000") !== FALSE) { // Plural forms
} else { $key = explode(chr(0), $orig);
$translation = __($orig); print T_js_decl($key[0], _ngettext($key[0], $key[1], 1)); // Singular
print T_js_decl($orig, $translation); print T_js_decl($key[1], _ngettext($key[0], $key[1], 2)); // Plural
} else {
$translation = _dgettext($domain,$orig);
print T_js_decl($orig, $translation);
}
} }
} }
} }