/** * Export the variable LC_XXXX to the system * * @param locale the locale (ex : fr_FR or en_US) */ BOOL exportLocaleToSystem(const wchar_t *locale) { if (locale == NULL) { #ifdef _MSC_VER fprintf(stderr, "Localization: Have not been able to find a suitable locale. Remains to default %s.\n", "LC_CTYPE"); #else fprintf(stderr, "Localization: Have not been able to find a suitable locale. Remains to default %ls.\n", EXPORTENVLOCALESTR); #endif return FALSE; } /* It will put in the env something like LC_MESSAGES=fr_FR */ if ( !setenvcW(EXPORTENVLOCALESTR, locale)) { #ifdef _MSC_VER fprintf(stderr, "Localization: Failed to declare the system variable %s.\n", "LC_CTYPE"); #else fprintf(stderr, "Localization: Failed to declare the system variable %d.\n", EXPORTENVLOCALE); #endif return FALSE; } #ifdef _MSC_VER #ifdef USE_SAFE_GETTEXT_DLL { /* gettext is buggy on Windows */ /* We need to set a external environment variable to scilab env. */ char* pstr = NULL; wchar_t env[MAX_PATH]; os_swprintf(env, MAX_PATH, L"%ls=%ls", EXPORTENVLOCALESTR, locale); pstr = wide_string_to_UTF8(env); gettext_putenv(pstr); FREE(pstr); } #endif #else /* Export LC_NUMERIC to the system to make sure that the rest of system is using the english notation (Java, Tcl ...) */ setenvc("LC_NUMERIC", LCNUMERICVALUE); #endif return TRUE; }
/*--------------------------------------------------------------------------*/ BOOL setenvc(const char *stringIn, const char *valueIn) { #ifdef _MSC_VER wchar_t* wstringIn = to_wide_string(stringIn); wchar_t* wvalueIn = to_wide_string(valueIn); if (setenvcW(wstringIn, wvalueIn) == 0) { FREE(wstringIn); FREE(wvalueIn); return FALSE; } FREE(wstringIn); FREE(wvalueIn); #else /* linux and Mac OS X */ /* setenv() function is strongly preferred to putenv() */ /* http://developer.apple.com/documentation/Darwin/Reference/ManPages/man3/setenv.3.html */ #ifndef _MAX_ENV #define _MAX_ENV 32767 #endif int len_env = (int)(strlen(stringIn) + strlen(valueIn) + 1); if (len_env < _MAX_ENV) { if ( setenv(stringIn, valueIn, 1) ) { return FALSE; } } else { return FALSE; } setenvtcl(stringIn, valueIn); #endif return TRUE; }