*/
+/**
+ * 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 .= '/';
$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;
}
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'];
$lang_dir = substr($lang_dir,0,-1);
}
if ($lang_dir != '..' && $lang_dir != '.' && $lang_dir != 'CVS' &&
- is_dir(SM_PATH.'locale/'.$lang_dir) &&
+ $lang_dir != '.svn' && is_dir(SM_PATH.'locale/'.$lang_dir) &&
file_exists(SM_PATH.'locale/'.$lang_dir.'/setup.php')) {
include_once(SM_PATH.'locale/'.$lang_dir.'/setup.php');
}