X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=include%2Flanguages.php;h=7ecea5b13a5f5e83da7dfcb7045e50ce92685b24;hp=0fbcc34d3f979b9374c7050c6d328788215ac9a2;hb=da0135f62f730728c0c08c1ce5786c6332a366f2;hpb=fdf58ef92a0b69f93bd08e22be831aa8172bfe62 diff --git a/include/languages.php b/include/languages.php index 0fbcc34d..7ecea5b1 100644 --- a/include/languages.php +++ b/include/languages.php @@ -22,20 +22,75 @@ */ +/** + * Wrapper for textdomain(), bindtextdomain() and + * bind_textdomain_codeset() primarily intended for + * plugins when changing into their own text domain + * and back again. + * + * Note that if plugins using this function have + * their translation files located in the SquirrelMail + * locale directory, the second argument is optional. + * + * @param string $domain_name The name of the text domain + * (usually the plugin name, or + * "squirrelmail") being switched to. + * @param string $directory The directory that contains + * all translations for the domain + * (OPTIONAL; default is SquirrelMail + * locale directory). + * + * @return string The name of the text domain that was set + * *BEFORE* it is changed herein - NOTE that + * this differs from PHP's textdomain() + * + * @since 1.5.2 and 1.4.10 + */ +function sq_change_text_domain($domain_name, $directory='') { + + static $domains_already_seen = array(); + global $gettext_domain; + $return_value = $gettext_domain; + + // only need to call bindtextdomain() once + // + if (in_array($domain_name, $domains_already_seen)) { + sq_textdomain($domain_name); + return $return_value; + } + + $domains_already_seen[] = $domain_name; + + if (empty($directory)) $directory = SM_PATH . 'locale/'; + + sq_bindtextdomain($domain_name, $directory); + sq_textdomain($domain_name); + + return $return_value; +} + /** * Gettext bindtextdomain wrapper. * * Wrapper solves differences between php versions in order to provide * ngettext support. Should be used if translation uses ngettext * functions. - * @since 1.5.1 + * + * This also provides a bind_textdomain_codeset call to make sure the + * domain's encoding will not be overridden. + * + * @since 1.4.10 and 1.5.1 * @param string $domain gettext domain name - * @param string $dir directory that contains all translations + * @param string $dir directory that contains all translations (OPTIONAL; + * if not specified, defaults to SquirrelMail locale + * directory) * @return string path to translation directory */ -function sq_bindtextdomain($domain,$dir) { +function sq_bindtextdomain($domain,$dir='') { global $l10n, $gettext_flags, $sm_notAlias; + if (empty($dir)) $dir = SM_PATH . 'locale/'; + if ($gettext_flags==7) { // gettext extension without ngettext if (substr($dir, -1) != '/') $dir .= '/'; @@ -46,6 +101,19 @@ function sq_bindtextdomain($domain,$dir) { $dir=bindtextdomain($domain,$dir); + // set codeset in order to avoid gettext charset conversions + if (function_exists('bind_textdomain_codeset') + && isset($languages[$sm_notAlias]['CHARSET'])) { + + // Japanese translation uses different internal charset + if ($sm_notAlias == 'ja_JP') { + bind_textdomain_codeset ($domain_name, 'EUC-JP'); + } else { + bind_textdomain_codeset ($domain_name, $languages[$sm_notAlias]['CHARSET']); + } + + } + return $dir; } @@ -381,16 +449,6 @@ function set_up_language($sm_language, $do_search = false, $default = false) { sq_bindtextdomain( 'squirrelmail', SM_PATH . 'locale/' ); sq_textdomain( 'squirrelmail' ); - // set codeset in order to avoid gettext charset conversions - if (function_exists('bind_textdomain_codeset')) { - // Japanese translation uses different internal charset - if ($sm_notAlias == 'ja_JP') { - bind_textdomain_codeset ('squirrelmail', 'EUC-JP'); - } else { - bind_textdomain_codeset ('squirrelmail', $languages[$sm_notAlias]['CHARSET'] ); - } - } - // Use LOCALE key, if it is set. if (isset($languages[$sm_notAlias]['LOCALE'])){ $longlocale=$languages[$sm_notAlias]['LOCALE'];