diff --git a/gio/gio-querymodules.c b/gio/gio-querymodules.c index 74c659462..eb5094f4d 100644 --- a/gio/gio-querymodules.c +++ b/gio/gio-querymodules.c @@ -26,6 +26,8 @@ #include #include +#include "glib/glib-private.h" + static gboolean is_valid_module_name (const gchar *basename) { @@ -160,7 +162,7 @@ main (gint argc, return 1; } - setlocale (LC_ALL, ""); + setlocale (LC_ALL, GLIB_DEFAULT_LOCALE); /* Be defensive and ensure we're linked to GObject */ g_type_ensure (G_TYPE_OBJECT); diff --git a/gio/gio-tool.c b/gio/gio-tool.c index 847a2188b..c0aec7492 100644 --- a/gio/gio-tool.c +++ b/gio/gio-tool.c @@ -28,7 +28,7 @@ #include #include "gio-tool.h" - +#include "glib/glib-private.h" void print_error (const gchar *format, ...) @@ -253,9 +253,20 @@ main (int argc, char **argv) const char *command; gboolean do_help; - setlocale (LC_ALL, ""); +#ifdef G_OS_WIN32 + gchar *localedir; +#endif + + setlocale (LC_ALL, GLIB_DEFAULT_LOCALE); textdomain (GETTEXT_PACKAGE); + +#ifdef G_OS_WIN32 + localedir = _glib_get_locale_dir (); + bindtextdomain (GETTEXT_PACKAGE, localedir); + g_free (localedir); +#else bindtextdomain (GETTEXT_PACKAGE, GLIB_LOCALE_DIR); +#endif #ifdef HAVE_BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); diff --git a/gio/glib-compile-resources.c b/gio/glib-compile-resources.c index 399c567d2..ccffbce2c 100644 --- a/gio/glib-compile-resources.c +++ b/gio/glib-compile-resources.c @@ -43,10 +43,7 @@ #include "gvdb/gvdb-builder.h" #include "gconstructor_as_data.h" - -#ifdef G_OS_WIN32 #include "glib/glib-private.h" -#endif typedef struct { @@ -754,7 +751,7 @@ main (int argc, char **argv) gchar *tmp; #endif - setlocale (LC_ALL, ""); + setlocale (LC_ALL, GLIB_DEFAULT_LOCALE); textdomain (GETTEXT_PACKAGE); #ifdef G_OS_WIN32 diff --git a/gio/glib-compile-schemas.c b/gio/glib-compile-schemas.c index f8b5b6825..f22265b82 100644 --- a/gio/glib-compile-schemas.c +++ b/gio/glib-compile-schemas.c @@ -29,10 +29,7 @@ #include "gvdb/gvdb-builder.h" #include "strinfo.c" - -#ifdef G_OS_WIN32 #include "glib/glib-private.h" -#endif static void strip_string (GString *string) @@ -2188,7 +2185,7 @@ main (int argc, char **argv) gchar *tmp = NULL; #endif - setlocale (LC_ALL, ""); + setlocale (LC_ALL, GLIB_DEFAULT_LOCALE); textdomain (GETTEXT_PACKAGE); #ifdef G_OS_WIN32 diff --git a/gio/gresource-tool.c b/gio/gresource-tool.c index d1de02631..1914c5228 100644 --- a/gio/gresource-tool.c +++ b/gio/gresource-tool.c @@ -41,9 +41,7 @@ #include #include -#ifdef G_OS_WIN32 #include "glib/glib-private.h" -#endif #if defined(HAVE_LIBELF) && defined(HAVE_MMAP) #define USE_LIBELF @@ -610,7 +608,7 @@ main (int argc, char *argv[]) gchar *tmp; #endif - setlocale (LC_ALL, ""); + setlocale (LC_ALL, GLIB_DEFAULT_LOCALE); textdomain (GETTEXT_PACKAGE); #ifdef G_OS_WIN32 diff --git a/gio/gsettings-tool.c b/gio/gsettings-tool.c index b7dd9d8fb..3096f9d9b 100644 --- a/gio/gsettings-tool.c +++ b/gio/gsettings-tool.c @@ -25,9 +25,7 @@ #include #include -#ifdef G_OS_WIN32 #include "glib/glib-private.h" -#endif static GSettingsSchemaSource *global_schema_source; static GSettings *global_settings; @@ -743,7 +741,7 @@ main (int argc, char **argv) gchar *tmp; #endif - setlocale (LC_ALL, ""); + setlocale (LC_ALL, GLIB_DEFAULT_LOCALE); textdomain (GETTEXT_PACKAGE); #ifdef G_OS_WIN32 diff --git a/glib/glib-private.h b/glib/glib-private.h index d0099236f..8b7ab132e 100644 --- a/glib/glib-private.h +++ b/glib/glib-private.h @@ -84,4 +84,25 @@ typedef struct { GLIB_AVAILABLE_IN_ALL GLibPrivateVTable *glib__private__ (void); +/* Please see following for the use of ".ACP" over "" + * on Windows, although both are accepted at compile-time + * but "" renders translated console messages unreadable if + * built with Visual Studio 2012 and later (this is, unfortunately, + * undocumented): + * + * https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/setlocale-wsetlocale + * https://gitlab.gnome.org/GNOME/glib/merge_requests/895#note_525881 + * https://gitlab.gnome.org/GNOME/glib/merge_requests/895#note_525900 + * + * Additional related items: + * https://stackoverflow.com/questions/22604329/php-5-5-setlocale-not-working-in-cli-on-windows + * https://bugs.php.net/bug.php?id=66265 + */ + +#ifdef G_OS_WIN32 +# define GLIB_DEFAULT_LOCALE ".ACP" +#else +# define GLIB_DEFAULT_LOCALE "" +#endif + #endif /* __GLIB_PRIVATE_H__ */