/** * 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 = '') { global $use_gettext; static $domains_already_seen = array(); $return_value = textdomain(NULL); // empty domain defaults to "squirrelmail" // if (empty($domain_name)) { $domain_name = 'squirrelmail'; } // only need to call bindtextdomain() once unless // $use_gettext is turned on // if (!$use_gettext && in_array($domain_name, $domains_already_seen)) { textdomain($domain_name); return $return_value; } $domains_already_seen[] = $domain_name; if (empty($directory)) { $directory = SM_PATH . 'locale/'; } sq_bindtextdomain($domain_name, $directory); textdomain($domain_name); return $return_value; }
/** * Set up the language to be output * if $do_search is true, then scan the browser information * for a possible language that we know * * Function sets system locale environment (LC_ALL, LANG, LANGUAGE), * gettext translation bindings and html header information. * * Function returns error codes, if there is some fatal error. * 0 = no error, * 1 = mbstring support is not present, * 2 = mbstring support is not present, user's translation reverted to en_US. * * @param string $sm_language translation used by user's interface * @param bool $do_search use browser's preferred language detection functions. Defaults to false. * @param bool $default set $sm_language to $squirrelmail_default_language if language detection fails or language is not set. Defaults to false. * @return int function execution error codes. */ function set_up_language($sm_language, $do_search = false, $default = false) { static $SetupAlready = 0; global $use_gettext, $languages, $squirrelmail_language, $squirrelmail_default_language, $default_charset, $sm_notAlias, $username, $data_dir; if ($SetupAlready) { return; } $SetupAlready = TRUE; sqgetGlobalVar('HTTP_ACCEPT_LANGUAGE', $accept_lang, SQ_SERVER); if ($do_search && !$sm_language && isset($accept_lang)) { $sm_language = substr($accept_lang, 0, 2); } if ((!$sm_language || $default) && isset($squirrelmail_default_language)) { $squirrelmail_language = $squirrelmail_default_language; $sm_language = $squirrelmail_default_language; } $sm_notAlias = $sm_language; // Catching removed translation // System reverts to English translation if user prefs contain translation // that is not available in $languages array if (!isset($languages[$sm_notAlias])) { $sm_notAlias = "en_US"; } while (isset($languages[$sm_notAlias]['ALIAS'])) { $sm_notAlias = $languages[$sm_notAlias]['ALIAS']; } if (isset($sm_language) && $use_gettext && $sm_language != '' && isset($languages[$sm_notAlias]['CHARSET'])) { sq_bindtextdomain('squirrelmail', SM_PATH . 'locale/'); sq_textdomain('squirrelmail'); if (function_exists('bind_textdomain_codeset')) { if ($sm_notAlias == 'ja_JP') { bind_textdomain_codeset("squirrelmail", 'EUC-JP'); } else { bind_textdomain_codeset("squirrelmail", $languages[$sm_notAlias]['CHARSET']); } } if (isset($languages[$sm_notAlias]['LOCALE'])) { $longlocale = $languages[$sm_notAlias]['LOCALE']; } else { $longlocale = $sm_notAlias; } if (!ini_get('safe_mode') && getenv('LC_ALL') != $longlocale) { putenv("LC_ALL={$longlocale}"); putenv("LANG={$longlocale}"); putenv("LANGUAGE={$longlocale}"); putenv("LC_NUMERIC=C"); if ($sm_notAlias == 'tr_TR') { putenv("LC_CTYPE=C"); } } setlocale(LC_ALL, $longlocale); // Workaround for plugins that use numbers with floating point // It might be removed if plugins use correct decimal delimiters // according to locale settings. setlocale(LC_NUMERIC, 'C'); // Workaround for specific Turkish strtolower/strtoupper rules. // Many functions expect English conversion rules. if ($sm_notAlias == 'tr_TR') { setlocale(LC_CTYPE, 'C'); } // Set text direction/alignment variables if (isset($languages[$sm_notAlias]['DIR']) && $languages[$sm_notAlias]['DIR'] == 'rtl') { /** * Text direction * @global string $text_direction */ $text_direction = 'rtl'; /** * Left alignment * @global string $left_align */ $left_align = 'right'; /** * Right alignment * @global string $right_align */ $right_align = 'left'; } else { $text_direction = 'ltr'; $left_align = 'left'; $right_align = 'right'; } $squirrelmail_language = $sm_notAlias; if ($squirrelmail_language == 'ja_JP') { header('Content-Type: text/html; charset=EUC-JP'); if (!function_exists('mb_internal_encoding')) { // Error messages can't be displayed here $error = 1; // Revert to English if possible. if (function_exists('setPref') && $username != '' && $data_dir != "") { setPref($data_dir, $username, 'language', "en_US"); $error = 2; } // stop further execution in order not to get php errors on mb_internal_encoding(). return $error; } if (function_exists('mb_language')) { mb_language('Japanese'); } mb_internal_encoding('EUC-JP'); mb_http_output('pass'); } elseif ($squirrelmail_language == 'en_US') { header('Content-Type: text/html; charset=' . $default_charset); } else { header('Content-Type: text/html; charset=' . $languages[$sm_notAlias]['CHARSET']); } } return 0; }
/**/ if (file_exists('../../include/init.php')) { include_once '../../include/init.php'; } else { if (file_exists('../../include/validate.php')) { //if (!defined('SM_PATH')) define('SM_PATH', '../../'); define('SM_PATH', '../../'); include_once SM_PATH . 'include/validate.php'; } else { chdir('..'); include_once '../src/validate.php'; } } displayPageHeader($color, 'none'); /** sm 1.5.1 code */ sq_bindtextdomain('test', SM_PATH . 'locale'); sq_textdomain('test'); ?> <h3 align="center">ngettext test strings</h3> <p>Test depends on selected translation and translated strings in locale/xx/LC_MESSAGES/test.mo files.</p> <?php echo "<pre>"; for ($i = -10; $i <= 250; $i++) { echo sprintf(ngettext("%s squirrel on the tree.", "%s squirrels on the tree.", $i), $i); echo "\n"; } echo "</pre>"; sq_textdomain('squirrelmail'); echo "</body></html>";