static gchar * get_current_locale_name (void) { char *locale; char *p, *ret; #ifdef HOST_WIN32 locale = g_win32_getlocale (); #elif defined (__APPLE__) locale = get_darwin_locale (); if (!locale) locale = get_posix_locale (); #else locale = get_posix_locale (); #endif if (locale == NULL) return NULL; p = strchr (locale, '.'); if (p != NULL) *p = 0; p = strchr (locale, '@'); if (p != NULL) *p = 0; p = strchr (locale, '_'); if (p != NULL) *p = '-'; ret = g_ascii_strdown (locale, -1); g_free (locale); return ret; }
/** Find out which language to use (e.g. for live game commentary). Write the code (en, de etc.) into the buffer. */ void language_get_code(gchar *buf) { #ifdef DEBUG printf("language_get_code\n"); #endif gchar *cur_locale = NULL; #ifdef G_OS_UNIX cur_locale = setlocale(LC_MESSAGES, NULL); #else cur_locale = g_win32_getlocale (); #endif if(strcmp(opt_str("string_opt_language_code"), "C") == 0) strcpy(buf, "en"); else if(strcmp(opt_str("string_opt_language_code"), "") == 0 && cur_locale != NULL) { strncpy(buf, cur_locale, 2); buf[2] = '\0'; } else strcpy(buf, opt_str("string_opt_language_code")); }
gchar* gdk_set_locale (void) { if (!setlocale (LC_ALL, "")) g_warning ("locale not supported by C library"); return g_win32_getlocale (); }
const char *subsurface_gettext_domainpath(char *argv0) { /* first hackishly make sure that the LANGUAGE information is correctly set up * in the environment */ char buffer[80]; snprintf(buffer, sizeof(buffer), "LANGUAGE=%s.UTF-8", g_win32_getlocale()); putenv(buffer); /* always use translation directory relative to install location, regardless of argv0 */ return "./share/locale"; }
/* * basically copied from gtk_get_default_language() */ gchar * gimp_get_default_language (const gchar *category) { gchar *lang; gchar *p; gint cat = LC_CTYPE; if (! category) category = "LC_CTYPE"; #ifdef G_OS_WIN32 p = getenv ("LC_ALL"); if (p != NULL) lang = g_strdup (p); else { p = getenv ("LANG"); if (p != NULL) lang = g_strdup (p); else { p = getenv (category); if (p != NULL) lang = g_strdup (p); else lang = g_win32_getlocale (); } } #else if (strcmp (category, "LC_CTYPE") == 0) cat = LC_CTYPE; else if (strcmp (category, "LC_MESSAGES") == 0) cat = LC_MESSAGES; else g_warning ("unsupported category used with gimp_get_default_language()"); lang = g_strdup (setlocale (cat, NULL)); #endif p = strchr (lang, '.'); if (p) *p = '\0'; p = strchr (lang, '@'); if (p) *p = '\0'; return lang; }
static gchar* gnc_get_ea_locale_dir(const char *top_dir) { static gchar *default_locale = "C"; gchar *ret; gchar *locale; struct stat buf; int i; #ifdef HAVE_LC_MESSAGES locale = g_strdup(setlocale(LC_MESSAGES, NULL)); #else # ifdef G_OS_WIN32 /* On win32, setlocale() doesn't say anything useful. Use glib's function instead. */ locale = g_win32_getlocale(); if (!locale) { PWARN ("Couldn't retrieve locale. Falling back to default one."); locale = g_strdup ("C"); } # else /* * Mac OS X 10.1 and earlier, not only doesn't have LC_MESSAGES * setlocale can sometimes return NULL instead of "C" */ locale = g_strdup(setlocale(LC_ALL, NULL) ? setlocale(LC_ALL, NULL) : "C"); # endif #endif i = strlen(locale); ret = g_build_filename(top_dir, locale, (char *)NULL); while (g_stat(ret, &buf) != 0) { i--; if (i < 1) { g_free(ret); ret = g_build_filename(top_dir, default_locale, (char *)NULL); break; } locale[i] = '\0'; g_free(ret); ret = g_build_filename(top_dir, locale, (char *)NULL); } g_free(locale); return ret; }
static gboolean _g_dgettext_should_translate (void) { static gsize translate = 0; enum { SHOULD_TRANSLATE = 1, SHOULD_NOT_TRANSLATE = 2 }; if (G_UNLIKELY (g_once_init_enter (&translate))) { gboolean should_translate = TRUE; const char *default_domain = textdomain (NULL); const char *translator_comment = gettext (""); #ifndef G_OS_WIN32 const char *translate_locale = setlocale (LC_MESSAGES, NULL); #else const char *translate_locale = g_win32_getlocale (); #endif /* We should NOT translate only if all the following hold: * - user has called textdomain() and set textdomain to non-default * - default domain has no translations * - locale does not start with "en_" and is not "C" * * Rationale: * - If text domain is still the default domain, maybe user calls * it later. Continue with old behavior of translating. * - If locale starts with "en_", we can continue using the * translations even if the app doesn't have translations for * this locale. That is, en_UK and en_CA for example. * - If locale is "C", maybe user calls setlocale(LC_ALL,"") later. * Continue with old behavior of translating. */ if (!default_domain || !translator_comment || !translate_locale || (0 != strcmp (default_domain, "messages") && '\0' == *translator_comment && 0 != strncmp (translate_locale, "en_", 3) && 0 != strcmp (translate_locale, "C"))) should_translate = FALSE; g_once_init_leave (&translate, should_translate ? SHOULD_TRANSLATE : SHOULD_NOT_TRANSLATE); } return translate == SHOULD_TRANSLATE; }
char * libgncmod_tax_us_gnc_module_path(void) { # ifdef G_OS_WIN32 gchar *thislocale = g_win32_getlocale(); gboolean is_de_DE = (strncmp(thislocale, "de_DE", 5) == 0); g_free(thislocale); # else /* !G_OS_WIN32 */ const char *thislocale = setlocale(LC_ALL, NULL); gboolean is_de_DE = (strncmp(thislocale, "de_DE", 5) == 0); # endif /* G_OS_WIN32 */ if (is_de_DE) return g_strdup("gnucash/tax/de_DE"); else return g_strdup("gnucash/tax/us"); }
/* Returns the first child with the name child_name and the "lang" * attribute that matches the current LC_MESSAGES, or else, the first * child with the name child_name and no "lang" attribute. */ xmlNode * e_xml_get_child_by_name_by_lang (const xmlNode *parent, const xmlChar *child_name, const gchar *lang) { #ifdef G_OS_WIN32 gchar *freeme = NULL; #endif xmlNode *child; /* This is the default version of the string. */ xmlNode *C = NULL; g_return_val_if_fail (parent != NULL, NULL); g_return_val_if_fail (child_name != NULL, NULL); if (lang == NULL) { #ifndef G_OS_WIN32 #ifdef HAVE_LC_MESSAGES lang = setlocale (LC_MESSAGES, NULL); #else lang = setlocale (LC_CTYPE, NULL); #endif #else lang = freeme = g_win32_getlocale (); #endif } for (child = parent->xmlChildrenNode; child != NULL; child = child->next) { if (xmlStrcmp (child->name, child_name) == 0) { xmlChar *this_lang = xmlGetProp ( child, (const guchar *)"lang"); if (this_lang == NULL) { C = child; } else if (xmlStrcmp (this_lang, (xmlChar *) lang) == 0) { #ifdef G_OS_WIN32 g_free (freeme); #endif return child; } } } #ifdef G_OS_WIN32 g_free (freeme); #endif return C; }
void gnc_push_locale (int category, const char *locale) { char *saved_locale; g_return_if_fail (locale != NULL); # ifdef G_OS_WIN32 /* On win32, setlocale() doesn't say anything useful. Use glib's function instead. */ saved_locale = g_win32_getlocale(); # else saved_locale = g_strdup(setlocale(category, NULL) ? setlocale(category, NULL) : "C"); #endif locale_stack = g_list_prepend (locale_stack, saved_locale); setlocale (category, locale); }
int libgncmod_tax_us_gnc_module_init(int refcount) { /* This is a very simple hack that loads the (new, special) German tax definition file in a German locale, or (default) loads the US tax file. */ # ifdef G_OS_WIN32 gchar *thislocale = g_win32_getlocale(); gboolean is_de_DE = (strncmp(thislocale, "de_DE", 5) == 0); g_free(thislocale); # else /* !G_OS_WIN32 */ const char *thislocale = setlocale(LC_ALL, NULL); gboolean is_de_DE = (strncmp(thislocale, "de_DE", 5) == 0); # endif /* G_OS_WIN32 */ if (is_de_DE) lmod("(gnucash tax de_DE)"); else lmod("(gnucash tax us)"); return TRUE; }
static gchar *get_language() { gchar *language; gchar *c; #ifdef G_OS_WIN32 language = g_win32_getlocale(); #else language = g_strdup(setlocale(LC_MESSAGES, NULL)); #endif if (!language) return g_strdup("en"); if((c = strchr(language, ',')) != NULL) *c = '\0'; if((c = strchr(language, '_')) != NULL) *c = '\0'; return language; }
static void calculate_locale (GnomeThemeFile *df) { char *p, *lang; #ifndef G_OS_WIN32 lang = g_strdup (setlocale (LC_MESSAGES, NULL)); #else lang = g_win32_getlocale (); #endif if (lang) { p = strchr (lang, '.'); if (p) *p = '\0'; p = strchr (lang, '@'); if (p) *p = '\0'; } else lang = g_strdup ("C"); p = strchr (lang, '_'); if (p) { df->current_locale[0] = g_strdup (lang); *p = '\0'; df->current_locale[1] = lang; } else { df->current_locale[0] = lang; df->current_locale[1] = NULL; } }
void sgpgme_init() { gchar *ctype_locale = NULL, *messages_locale = NULL; gchar *ctype_utf8_locale = NULL, *messages_utf8_locale = NULL; gpgme_engine_info_t engineInfo; if (gpgme_check_version("1.0.0")) { #ifdef LC_CTYPE debug_print("setting gpgme CTYPE locale\n"); #ifdef G_OS_WIN32 ctype_locale = g_win32_getlocale(); #else ctype_locale = g_strdup(setlocale(LC_CTYPE, NULL)); #endif if (ctype_locale) { debug_print("setting gpgme CTYPE locale to: %s\n", ctype_locale); if (strchr(ctype_locale, '.')) *(strchr(ctype_locale, '.')) = '\0'; else if (strchr(ctype_locale, '@')) *(strchr(ctype_locale, '@')) = '\0'; ctype_utf8_locale = g_strconcat(ctype_locale, ".UTF-8", NULL); debug_print("setting gpgme locale to UTF8: %s\n", ctype_utf8_locale ? ctype_utf8_locale : "NULL"); gpgme_set_locale(NULL, LC_CTYPE, ctype_utf8_locale); debug_print("done\n"); g_free(ctype_utf8_locale); g_free(ctype_locale); } else { debug_print("couldn't set gpgme CTYPE locale\n"); } #endif #ifdef LC_MESSAGES debug_print("setting gpgme MESSAGES locale\n"); #ifdef G_OS_WIN32 messages_locale = g_win32_getlocale(); #else messages_locale = g_strdup(setlocale(LC_MESSAGES, NULL)); #endif if (messages_locale) { debug_print("setting gpgme MESSAGES locale to: %s\n", messages_locale); if (strchr(messages_locale, '.')) *(strchr(messages_locale, '.')) = '\0'; else if (strchr(messages_locale, '@')) *(strchr(messages_locale, '@')) = '\0'; messages_utf8_locale = g_strconcat(messages_locale, ".UTF-8", NULL); debug_print("setting gpgme locale to UTF8: %s\n", messages_utf8_locale ? messages_utf8_locale : "NULL"); gpgme_set_locale(NULL, LC_MESSAGES, messages_utf8_locale); debug_print("done\n"); g_free(messages_utf8_locale); g_free(messages_locale); } else { debug_print("couldn't set gpgme MESSAGES locale\n"); } #endif if (!gpgme_get_engine_info(&engineInfo)) { while (engineInfo) { debug_print("GpgME Protocol: %s\n" "Version: %s (req %s)\n" "Executable: %s\n", gpgme_get_protocol_name(engineInfo->protocol) ? gpgme_get_protocol_name(engineInfo->protocol):"???", engineInfo->version ? engineInfo->version:"???", engineInfo->req_version ? engineInfo->req_version:"???", engineInfo->file_name ? engineInfo->file_name:"???"); if (engineInfo->protocol == GPGME_PROTOCOL_OpenPGP && gpgme_engine_check_version(engineInfo->protocol) != GPG_ERR_NO_ERROR) { if (engineInfo->file_name && !engineInfo->version) { alertpanel_error(_("Gpgme protocol '%s' is unusable: " "Engine '%s' isn't installed properly."), gpgme_get_protocol_name(engineInfo->protocol), engineInfo->file_name); } else if (engineInfo->file_name && engineInfo->version && engineInfo->req_version) { alertpanel_error(_("Gpgme protocol '%s' is unusable: " "Engine '%s' version %s is installed, " "but version %s is required.\n"), gpgme_get_protocol_name(engineInfo->protocol), engineInfo->file_name, engineInfo->version, engineInfo->req_version); } else { alertpanel_error(_("Gpgme protocol '%s' is unusable " "(unknown problem)"), gpgme_get_protocol_name(engineInfo->protocol)); } } engineInfo = engineInfo->next; } } } else { sgpgme_disable_all(); if (prefs_gpg_get_config()->gpg_warning) { AlertValue val; val = alertpanel_full (_("Warning"), _("GnuPG is not installed properly, or needs " "to be upgraded.\n" "OpenPGP support disabled."), GTK_STOCK_CLOSE, NULL, NULL, TRUE, NULL, ALERT_WARNING, G_ALERTDEFAULT); if (val & G_ALERTDISABLE) prefs_gpg_get_config()->gpg_warning = FALSE; } } }
static VALUE rg_s_locale(VALUE self) { return CSTR2RVAL_FREE(g_win32_getlocale()); }
/* NOTE: Owns the lock on return if keep is TRUE ! */ static void e_iconv_init(int keep) { char *from, *to, *locale; int i; LOCK(); if (iconv_charsets != NULL) { if (!keep) UNLOCK(); return; } iconv_charsets = g_hash_table_new(g_str_hash, g_str_equal); for (i = 0; known_iconv_charsets[i].charset != NULL; i++) { from = g_strdup(known_iconv_charsets[i].charset); to = g_strdup(known_iconv_charsets[i].iconv_name); e_strdown (from); g_hash_table_insert(iconv_charsets, from, to); } e_dlist_init(&iconv_cache_list); iconv_cache = g_hash_table_new(g_str_hash, g_str_equal); iconv_cache_open = g_hash_table_new(NULL, NULL); #ifndef G_OS_WIN32 locale = setlocale (LC_ALL, NULL); #else locale = g_win32_getlocale (); #endif if (!locale || !strcmp (locale, "C") || !strcmp (locale, "POSIX")) { /* The locale "C" or "POSIX" is a portable locale; its * LC_CTYPE part corresponds to the 7-bit ASCII character * set. */ locale_charset = NULL; locale_lang = NULL; } else { #ifdef G_OS_WIN32 g_get_charset (&locale_charset); locale_charset = g_strdup (locale_charset); e_strdown (locale_charset); #else #ifdef HAVE_CODESET locale_charset = g_strdup (nl_langinfo (CODESET)); e_strdown (locale_charset); #else /* A locale name is typically of the form language[_terri- * tory][.codeset][@modifier], where language is an ISO 639 * language code, territory is an ISO 3166 country code, and * codeset is a character set or encoding identifier like * ISO-8859-1 or UTF-8. */ char *codeset, *p; codeset = strchr (locale, '.'); if (codeset) { codeset++; /* ; is a hack for debian systems and / is a hack for Solaris systems */ for (p = codeset; *p && !strchr ("@;/", *p); p++); locale_charset = g_strndup (codeset, p - codeset); e_strdown (locale_charset); } else { /* charset unknown */ locale_charset = NULL; } #endif #endif /* !G_OS_WIN32 */ /* parse the locale lang */ locale_parse_lang (locale); } #ifdef G_OS_WIN32 g_free (locale); #endif if (!keep) UNLOCK(); }
/** * ario_plugin_info_new: * @filename: the filename where to read the plugin information * * Creates a new #ArioPluginInfo from a file on the disk. * * Return value: a newly created #ArioPluginInfo. */ ArioPluginInfo * _ario_plugin_info_new (const gchar *file) { ArioPluginInfo *info; GKeyFile *plugin_file = NULL; gchar *str; gchar *locale = NULL; #ifdef WIN32 gchar *tmp; tmp = g_win32_getlocale (); locale = g_ascii_strdown (tmp, -1); g_free (tmp); #endif g_return_val_if_fail (file != NULL, NULL); ARIO_LOG_DBG ("Loading plugin: %s", file); info = g_new0 (ArioPluginInfo, 1); info->refcount = 1; info->file = g_strdup (file); plugin_file = g_key_file_new (); if (!g_key_file_load_from_file (plugin_file, file, G_KEY_FILE_NONE, NULL)) { g_warning ("Bad plugin file: %s", file); goto error; } if (!g_key_file_has_key (plugin_file, "Ario Plugin", "IAge", NULL)) { ARIO_LOG_DBG ("IAge key does not exist in file: %s", file); goto error; } /* Check IAge=1 */ if (g_key_file_get_integer (plugin_file, "Ario Plugin", "IAge", NULL) != 1) { ARIO_LOG_DBG ("Wrong IAge in file: %s", file); goto error; } /* Get module name */ str = g_key_file_get_string (plugin_file, "Ario Plugin", "Module", NULL); if ((str != NULL) && (*str != '\0')) { info->module_name = str; } else { g_warning ("Could not find 'Module' in %s", file); goto error; } /* Get the dependency list */ info->dependencies = g_key_file_get_string_list (plugin_file, "Ario Plugin", "Depends", NULL, NULL); if (info->dependencies == NULL) { ARIO_LOG_DBG ("Could not find 'Depends' in %s", file); info->dependencies = g_new0 (gchar *, 1); }