]> www.fi.muni.cz Git - evince.git/commitdiff
[windows] Fix localization on Windows
authorHib Eris <hib@hiberis.nl>
Mon, 17 May 2010 09:38:16 +0000 (11:38 +0200)
committerHib Eris <hib@hiberis.nl>
Tue, 25 May 2010 12:23:03 +0000 (14:23 +0200)
Fixes bgo#610548

libdocument/ev-init.c
previewer/ev-previewer.c
shell/main.c

index 2b247ebe2e02fd8460b85fa2ec3e0c47919bd881..fb10ac57dc2ec207cd450f703d86c6d9b0df9817 100644 (file)
@@ -21,6 +21,9 @@
 
 #include <glib.h>
 #include <glib/gi18n-lib.h>
+#ifdef G_OS_WIN32
+#include <windows.h>
+#endif
 
 #include "ev-init.h"
 #include "ev-backends-manager.h"
 
 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 ();
index 990a003cecf4f35594b5eed489e95c8f36dcce73..14d4f2f332306543779310a2f53998b61013c0b5 100644 (file)
@@ -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
index 5f33c543354452c65f91c6795befd07603332aff..4ed0b05ebd42067d934d64b144599ba637c43df7 100644 (file)
@@ -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