From 61c9b15fa57e40c9561ae8d5ca13228d4e7a897a Mon Sep 17 00:00:00 2001 From: Hib Eris Date: Mon, 17 May 2010 09:38:16 +0000 Subject: [windows] Fix localization on Windows Fixes bgo#610548 --- diff --git a/libdocument/ev-init.c b/libdocument/ev-init.c index 2b247eb..fb10ac5 100644 --- a/libdocument/ev-init.c +++ b/libdocument/ev-init.c @@ -21,6 +21,9 @@ #include #include +#ifdef G_OS_WIN32 +#include +#endif #include "ev-init.h" #include "ev-backends-manager.h" @@ -29,6 +32,54 @@ static int ev_init_count; +#ifdef G_OS_WIN32 + +static HMODULE evdocument_dll = NULL; + +#ifdef DLL_EXPORT +BOOL WINAPI +DllMain (HINSTANCE hinstDLL, + DWORD fdwReason, + LPVOID lpvReserved) +{ + if (fdwReason == DLL_PROCESS_ATTACH) + evdocument_dll = hinstDLL; + + return TRUE; +} +#endif + +#endif + +static gchar * +_ev_get_locale_dir (void) +{ +#ifdef G_OS_WIN32 + gchar *install_dir = NULL, *locale_dir; + gchar *retval = NULL; + + if (evdocument_dll != NULL) + install_dir = g_win32_get_package_installation_directory_of_module (evdocument_dll); + + if (install_dir) { + locale_dir = g_build_filename (install_dir, + "share", "locale", NULL); + + retval = g_win32_locale_filename_from_utf8 (locale_dir); + + g_free (install_dir); + g_free (locale_dir); + } + + if (retval) + return retval; + else + return g_strdup (""); +#else + return g_strdup (GNOMELOCALEDIR); +#endif +} + /** * ev_init: * @@ -49,7 +100,9 @@ ev_init (void) return have_backends; /* set up translation catalog */ - bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); + gchar *tmp = _ev_get_locale_dir (); + bindtextdomain (GETTEXT_PACKAGE, tmp); + g_free (tmp); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); _ev_debug_init (); diff --git a/previewer/ev-previewer.c b/previewer/ev-previewer.c index 990a003..14d4f2f 100644 --- a/previewer/ev-previewer.c +++ b/previewer/ev-previewer.c @@ -100,6 +100,33 @@ ev_previewer_load_document (const gchar *filename, g_free (uri); } +static gchar* +ev_previewer_get_locale_dir () +{ +#ifdef G_OS_WIN32 + gchar *install_dir = NULL, *locale_dir; + gchar *retval = NULL; + + install_dir = + g_win32_get_package_installation_directory_of_module (NULL); + + if (install_dir) { + locale_dir = g_build_filename (install_dir, + "share", "locale", NULL); + retval = g_win32_locale_filename_from_utf8 (locale_dir); + g_free (install_dir); + g_free (locale_dir); + } + + if (retval) + return retval; + else + return g_strdup (""); +#else + return g_strdup (GNOMELOCALEDIR); +#endif +} + gint main (gint argc, gchar **argv) { @@ -139,7 +166,9 @@ main (gint argc, gchar **argv) #ifdef ENABLE_NLS /* Initialize the i18n stuff */ - bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); + gchar *tmp = ev_previewer_get_locale_dir (); + bindtextdomain (GETTEXT_PACKAGE, tmp); + g_free (tmp); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); #endif diff --git a/shell/main.c b/shell/main.c index 5f33c54..4ed0b05 100644 --- a/shell/main.c +++ b/shell/main.c @@ -232,6 +232,33 @@ load_files (const char **files) } } +static gchar* +ev_get_locale_dir () +{ +#ifdef G_OS_WIN32 + gchar *install_dir = NULL, *locale_dir; + gchar *retval = NULL; + + install_dir = + g_win32_get_package_installation_directory_of_module (NULL); + + if (install_dir) { + locale_dir = g_build_filename (install_dir, + "share", "locale", NULL); + retval = g_win32_locale_filename_from_utf8 (locale_dir); + g_free (install_dir); + g_free (locale_dir); + } + + if (retval) + return retval; + else + return g_strdup (""); +#else + return g_strdup (GNOMELOCALEDIR); +#endif +} + int main (int argc, char *argv[]) { @@ -269,7 +296,9 @@ main (int argc, char *argv[]) #ifdef ENABLE_NLS /* Initialize the i18n stuff */ - bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); + gchar *tmp = ev_get_locale_dir (); + bindtextdomain (GETTEXT_PACKAGE, tmp); + g_free (tmp); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); #endif -- cgit v0.9.1