From 9a217e97c8852bda5a7fdf1cad41da769f013fef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Sat, 12 Feb 2011 02:07:39 +0100 Subject: [PATCH] Change the way translations are done. * Require gettext-tools to build. * Depend on libintl on Win32. --- CMakeLists.txt | 39 ++++++++++++++++------ Win32Depends.cmake | 6 ++-- cmake/FindGettext.cmake | 14 +++----- cmake/FindLibIntl.cmake | 38 ++++++++++++++++++++++ config.h.in | 19 ++++------- po/make-template.sh | 2 +- src/ld-window-main.c | 72 +++++++++++++++++++++-------------------- src/logdiag.c | 3 +- 8 files changed, 120 insertions(+), 73 deletions(-) create mode 100644 cmake/FindLibIntl.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index cf9bfc1..5ed6cee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,14 +94,16 @@ find_package (Lua51 REQUIRED) find_package (JsonGlib REQUIRED) # Localization -find_package (Gettext) -if (GETTEXT_FOUND) - set (HAVE_GETTEXT true) - file (GLOB project_TRANSLATIONS ${CMAKE_CURRENT_SOURCE_DIR}/po/*.po) - GETTEXT_CREATE_TRANSLATIONS ( - ${CMAKE_CURRENT_SOURCE_DIR}/po/${CMAKE_PROJECT_NAME}.pot - ALL ${project_TRANSLATIONS}) -endif (GETTEXT_FOUND) +find_package (Gettext REQUIRED) +file (GLOB project_PO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/po/*.po) +GETTEXT_CREATE_TRANSLATIONS ( + ${CMAKE_CURRENT_SOURCE_DIR}/po/${CMAKE_PROJECT_NAME}.pot + ALL ${project_PO_FILES}) + +foreach (file ${project_PO_FILES}) + get_filename_component (translation "${file}" NAME_WE) + list (APPEND project_TRANSLATIONS "${translation}") +endforeach (file) # Documentation # TODO: Add pregenerated docs to the tree @@ -218,6 +220,11 @@ include_directories (${GTK2_INCLUDE_DIRS} set (logdiag_LIBS ${GTK2_LIBRARIES} ${JSON_GLIB_LIBRARIES} ${LUA_LIBRARIES}) +if (WIN32) + find_package (LibIntl REQUIRED) + list (APPEND logdiag_LIBS ${LIBINTL_LIBRARIES}) +endif (WIN32) + # Build the library add_library (liblogdiag STATIC ${liblogdiag_SOURCES} ${liblogdiag_HEADERS}) set_target_properties (liblogdiag PROPERTIES OUTPUT_NAME logdiag) @@ -258,7 +265,8 @@ if (WIN32) install (DIRECTORY ${WIN32_DEPENDS_PATH}/bin/ DESTINATION . - FILES_MATCHING PATTERN "*.dll") + FILES_MATCHING PATTERN "*.dll" + PATTERN "libgettext*" EXCLUDE) install (DIRECTORY ${WIN32_DEPENDS_PATH}/etc/ DESTINATION etc) @@ -268,9 +276,20 @@ if (WIN32) ${WIN32_DEPENDS_PATH}/lib/gdk-pixbuf-2.0 DESTINATION lib) install (DIRECTORY - ${WIN32_DEPENDS_PATH}/share/locale ${WIN32_DEPENDS_PATH}/share/themes DESTINATION share) + + # Avoid partial translations + file (GLOB locales ${WIN32_DEPENDS_PATH}/share/locale/*) + foreach (locale ${locales}) + get_filename_component (translation ${locale} NAME) + list (FIND project_TRANSLATIONS ${translation} translation_found) + if (translation_found GREATER -1) + install (DIRECTORY + ${WIN32_DEPENDS_PATH}/share/locale/${translation} + DESTINATION share/locale) + endif (translation_found GREATER -1) + endforeach (locale) else (WIN32) install (TARGETS logdiag DESTINATION bin) install (FILES share/logdiag.desktop DESTINATION share/applications) diff --git a/Win32Depends.cmake b/Win32Depends.cmake index cab4ee5..7c1f38e 100644 --- a/Win32Depends.cmake +++ b/Win32Depends.cmake @@ -44,7 +44,8 @@ set (pkg_gtk_urls "${pkg_gtk_root}/librsvg/2.32/svg-gdk-pixbuf-loader_2.32.1-1_win32.zip" "${pkg_gtk_root}/libcroco/0.6/libcroco_0.6.2-1_win32.zip" "${pkg_gtk_root}/dependencies/libxml2_2.7.7-1_win32.zip" - "${pkg_gtk_root}/dependencies/libxml2-dev_2.7.7-1_win32.zip") + "${pkg_gtk_root}/dependencies/libxml2-dev_2.7.7-1_win32.zip" + "${pkg_gtk_root}/dependencies/gettext-tools-0.17.zip") set (pkg_gtk_md5 "a545c0ca1e6a312701d42a18e49572af" "2c712a8d7a652363241c0967098515db" @@ -52,7 +53,8 @@ set (pkg_gtk_md5 "bf4e34f1f175b88430159d33e01d0c49" "2d90c71404be0de4e5f3259f63a3e278" "bd6b3d8c35e06a00937db65887c6e287" - "b6f59b70eef0992df37f8db891d4b283") + "b6f59b70eef0992df37f8db891d4b283" + "09baff956ebd1c391c7f71e9bd768edd") set (pkg_opensuse_root "http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_Factory/noarch") set (pkg_opensuse_urls diff --git a/cmake/FindGettext.cmake b/cmake/FindGettext.cmake index 4f8e6fb..d2e3c95 100644 --- a/cmake/FindGettext.cmake +++ b/cmake/FindGettext.cmake @@ -14,7 +14,7 @@ #============================================================================= # Copyright 2007-2009 Kitware, Inc. -# Copyright 2010 Přemysl Janouch +# Copyright 2010-2011 Přemysl Janouch # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -41,7 +41,6 @@ #============================================================================= find_program (GETTEXT_MSGMERGE_EXECUTABLE msgmerge) - find_program (GETTEXT_MSGFMT_EXECUTABLE msgfmt) macro (GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg) @@ -93,13 +92,8 @@ macro (GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg) DEPENDS ${_gmoFiles}) endmacro (GETTEXT_CREATE_TRANSLATIONS) -if (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE) - set (GETTEXT_FOUND TRUE) -else (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE) - set (GETTEXT_FOUND FALSE) - if (GetText_REQUIRED) - message (FATAL_ERROR "GetText not found") - endif (GetText_REQUIRED) -endif (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE) +include (FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS (Gettext DEFAULT_MSG + GETTEXT_MSGMERGE_EXECUTABLE GETTEXT_MSGFMT_EXECUTABLE) diff --git a/cmake/FindLibIntl.cmake b/cmake/FindLibIntl.cmake new file mode 100644 index 0000000..49fee79 --- /dev/null +++ b/cmake/FindLibIntl.cmake @@ -0,0 +1,38 @@ +# - Find libintl +# This module looks for libintl. +# This module defines the following values: +# LIBINTL_FOUND +# LIBINTL_LIBRARIES + +#============================================================================= +# Copyright Přemysl Janouch 2011 +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +# OF SUCH DAMAGE. +#============================================================================= + +find_library (LIBINTL_LIBRARIES intl) + +include (FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS (LibIntl DEFAULT_MSG LIBINTL_LIBRARIES) + +mark_as_advanced (LIBINTL_LIBRARIES) + diff --git a/config.h.in b/config.h.in index 5ebdc87..0cc98c6 100644 --- a/config.h.in +++ b/config.h.in @@ -25,22 +25,15 @@ #cmakedefine HAVE_SANE___RESTRICT #cmakedefine HAVE_RESTRICT -#cmakedefine HAVE_GETTEXT +#include -#define Q_(s) (s) -#ifdef HAVE_GETTEXT - #include - #include - #define _(s) gettext(s) - #define N_(s1, s2, n) ngettext(s1, s2, n) - - #define GETTEXT_DOMAIN "${PROJECT_NAME}" +#define GETTEXT_DOMAIN "${PROJECT_NAME}" +#ifdef _WIN32 + #define GETTEXT_DIRNAME "share/locale" +#else #define GETTEXT_DIRNAME "${CMAKE_INSTALL_PREFIX}/share/locale" -#else /* ! HAVE_GETTEXT */ - #define _(s) (s) - #define N_(s1, s2, n) ((n) == 1 ? (s1) : (s2)) -#endif /* ! HAVE_GETTEXT */ +#endif #ifndef HAVE_SANE___RESTRICT diff --git a/po/make-template.sh b/po/make-template.sh index f76a620..272c583 100755 --- a/po/make-template.sh +++ b/po/make-template.sh @@ -30,7 +30,7 @@ if [ "$MAJOR" != "" ]; then fi # Finally make the template -xgettext -LC -k_ -kN_:1,2 -kG_ $SOURCES -o "$PACKAGE".pot \ +xgettext -LC -k_ -kN_ $SOURCES -o "$PACKAGE".pot \ --package-name="$PACKAGE" --package-version="$VERSION" \ --copyright-holder="Přemysl Janouch" diff --git a/src/ld-window-main.c b/src/ld-window-main.c index 0c671ed..463f2ef 100644 --- a/src/ld-window-main.c +++ b/src/ld-window-main.c @@ -110,61 +110,61 @@ static void on_action_normal_size (GtkAction *action, LdWindowMain *self); /* Actions for menus, toolbars, accelerators. */ static GtkActionEntry wm_action_entries[] = { - {"FileMenu", NULL, Q_("_File"), NULL, NULL, NULL}, - {"New", GTK_STOCK_NEW, Q_("_New"), "N", - Q_("Create a new diagram"), + {"FileMenu", NULL, N_("_File"), NULL, NULL, NULL}, + {"New", GTK_STOCK_NEW, N_("_New"), "N", + N_("Create a new diagram"), G_CALLBACK (on_action_new)}, - {"Open", GTK_STOCK_OPEN, Q_("_Open..."), "O", - Q_("Open a diagram"), + {"Open", GTK_STOCK_OPEN, N_("_Open..."), "O", + N_("Open a diagram"), G_CALLBACK (on_action_open)}, - {"Save", GTK_STOCK_SAVE, Q_("_Save"), "S", - Q_("Save the current diagram"), + {"Save", GTK_STOCK_SAVE, N_("_Save"), "S", + N_("Save the current diagram"), G_CALLBACK (on_action_save)}, - {"SaveAs", GTK_STOCK_SAVE_AS, Q_("Save _As..."), "S", - Q_("Save the current diagram with another name"), + {"SaveAs", GTK_STOCK_SAVE_AS, N_("Save _As..."), "S", + N_("Save the current diagram with another name"), G_CALLBACK (on_action_save_as)}, /* - * {"Export", NULL, Q_("_Export"), NULL, - * Q_("Export the diagram"), + * {"Export", NULL, N_("_Export"), NULL, + * N_("Export the diagram"), * NULL}, */ - {"Quit", GTK_STOCK_QUIT, Q_("_Quit"), "Q", - Q_("Quit the application"), + {"Quit", GTK_STOCK_QUIT, N_("_Quit"), "Q", + N_("Quit the application"), G_CALLBACK (on_action_quit)}, - {"EditMenu", NULL, Q_("_Edit"), NULL, NULL, NULL}, - {"Undo", GTK_STOCK_UNDO, Q_("_Undo"), "Z", - Q_("Undo the last action"), + {"EditMenu", NULL, N_("_Edit"), NULL, NULL, NULL}, + {"Undo", GTK_STOCK_UNDO, N_("_Undo"), "Z", + N_("Undo the last action"), G_CALLBACK (on_action_undo)}, - {"Redo", GTK_STOCK_REDO, Q_("_Redo"), "Z", - Q_("Redo the last undone action"), + {"Redo", GTK_STOCK_REDO, N_("_Redo"), "Z", + N_("Redo the last undone action"), G_CALLBACK (on_action_redo)}, /* - * {"Cut", GTK_STOCK_CUT, Q_("Cu_t"), "X", NULL, NULL}, - * {"Copy", GTK_STOCK_COPY, Q_("_Copy"), "C", NULL, NULL}, - * {"Paste", GTK_STOCK_PASTE, Q_("_Paste"), "V", NULL, NULL}, + * {"Cut", GTK_STOCK_CUT, N_("Cu_t"), "X", NULL, NULL}, + * {"Copy", GTK_STOCK_COPY, N_("_Copy"), "C", NULL, NULL}, + * {"Paste", GTK_STOCK_PASTE, N_("_Paste"), "V", NULL, NULL}, */ - {"Delete", GTK_STOCK_DELETE, Q_("_Delete"), "Delete", - Q_("Delete the contents of the selection"), + {"Delete", GTK_STOCK_DELETE, N_("_Delete"), "Delete", + N_("Delete the contents of the selection"), G_CALLBACK (on_action_delete)}, - {"SelectAll", GTK_STOCK_SELECT_ALL, Q_("Select _All"), "A", - Q_("Select all objects in the diagram"), + {"SelectAll", GTK_STOCK_SELECT_ALL, N_("Select _All"), "A", + N_("Select all objects in the diagram"), G_CALLBACK (on_action_select_all)}, - {"ViewMenu", NULL, Q_("_View"), NULL, NULL, NULL}, - {"ZoomIn", GTK_STOCK_ZOOM_IN, Q_("_Zoom In"), "plus", - Q_("Zoom into the diagram"), + {"ViewMenu", NULL, N_("_View"), NULL, NULL, NULL}, + {"ZoomIn", GTK_STOCK_ZOOM_IN, N_("_Zoom In"), "plus", + N_("Zoom into the diagram"), G_CALLBACK (on_action_zoom_in)}, - {"ZoomOut", GTK_STOCK_ZOOM_OUT, Q_("Zoom _Out"), "minus", - Q_("Zoom out of the diagram"), + {"ZoomOut", GTK_STOCK_ZOOM_OUT, N_("Zoom _Out"), "minus", + N_("Zoom out of the diagram"), G_CALLBACK (on_action_zoom_out)}, - {"NormalSize", GTK_STOCK_ZOOM_100, Q_("_Normal Size"), "0", - Q_("Reset zoom level back to the default"), + {"NormalSize", GTK_STOCK_ZOOM_100, N_("_Normal Size"), "0", + N_("Reset zoom level back to the default"), G_CALLBACK (on_action_normal_size)}, - {"HelpMenu", NULL, Q_("_Help"), NULL, NULL, NULL}, - {"About", GTK_STOCK_ABOUT, Q_("_About"), NULL, - Q_("Show a dialog about this application"), + {"HelpMenu", NULL, N_("_Help"), NULL, NULL, NULL}, + {"About", GTK_STOCK_ABOUT, N_("_About"), NULL, + N_("Show a dialog about this application"), G_CALLBACK (on_action_about)} }; @@ -216,6 +216,8 @@ ld_window_main_init (LdWindowMain *self) G_CALLBACK (on_ui_proxy_disconnected), self); priv->action_group = gtk_action_group_new ("MainActions"); + gtk_action_group_set_translation_domain + (priv->action_group, GETTEXT_DOMAIN); gtk_action_group_add_actions (priv->action_group, wm_action_entries, G_N_ELEMENTS (wm_action_entries), self); gtk_ui_manager_insert_action_group (priv->ui_manager, diff --git a/src/logdiag.c b/src/logdiag.c index 20783b1..8191d7f 100644 --- a/src/logdiag.c +++ b/src/logdiag.c @@ -9,6 +9,7 @@ */ #include +#include #include "config.h" @@ -20,13 +21,11 @@ main (int argc, char *argv[]) { GtkWidget *wnd; -#ifdef HAVE_GETTEXT setlocale (LC_ALL, ""); bindtextdomain (GETTEXT_DOMAIN, GETTEXT_DIRNAME); bind_textdomain_codeset (GETTEXT_DOMAIN, "UTF-8"); textdomain (GETTEXT_DOMAIN); -#endif /* For custom command line arguments, see: * http://git.gnome.org/browse/glade3/tree/src/main.c