PATHS "${CUSTOM_GETTEXT_PATH}/bin"
DOC "path to msgfmt")
-FIND_PROGRAM(GETTEXT_MSGMERGE
- NAMES msgmerge
- PATHS "${CUSTOM_GETTEXT_PATH}/bin"
- DOC "path to msgmerge")
-
-FIND_PROGRAM(GETTEXT_MSGEN
- NAMES msgen
- PATHS "${CUSTOM_GETTEXT_PATH}/bin"
- DOC "path to msgen")
-
-FIND_PROGRAM(GETTEXT_EXTRACT
- NAMES xgettext
- PATHS "${CUSTOM_GETTEXT_PATH}/bin"
- DOC "path to xgettext")
-
# modern Linux, as well as Mac, seem to not need require special linking
# they do not because gettext is part of glibc
# TODO check the requirements on other BSDs and older Linux
SET(GETTEXT_MO_BUILD_PATH ${CMAKE_BINARY_DIR}/locale/<locale>/LC_MESSAGES)
SET(GETTEXT_MO_DEST_PATH locale/<locale>/LC_MESSAGES)
FILE(GLOB GETTEXT_AVAILABLE_LOCALES RELATIVE ${GETTEXT_PO_PATH} "${GETTEXT_PO_PATH}/*")
+ LIST(REMOVE_ITEM GETTEXT_AVAILABLE_LOCALES minetest.pot)
MACRO(SET_MO_PATHS _buildvar _destvar _locale)
STRING(REPLACE "<locale>" ${_locale} ${_buildvar} ${GETTEXT_MO_BUILD_PATH})
STRING(REPLACE "<locale>" ${_locale} ${_destvar} ${GETTEXT_MO_DEST_PATH})
+++ /dev/null
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: minetest\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-07-22 11:02+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: src/guiMainMenu.cpp:180
-msgid "Name/Password"
-msgstr ""
-
-#: src/guiMainMenu.cpp:203
-msgid "Address/Port"
-msgstr ""
-
-#: src/guiMainMenu.cpp:223
-msgid "Leave address blank to start a local server."
-msgstr ""
-
-#: src/guiMainMenu.cpp:230
-msgid "Fancy trees"
-msgstr ""
-
-#: src/guiMainMenu.cpp:236
-msgid "Smooth Lighting"
-msgstr ""
-
-#: src/guiMainMenu.cpp:244
-msgid "Start Game / Connect"
-msgstr ""
-
-#: src/guiMainMenu.cpp:253
-msgid "Change keys"
-msgstr ""
-
-#: src/guiMainMenu.cpp:276
-msgid "Creative Mode"
-msgstr ""
-
-#: src/guiMainMenu.cpp:282
-msgid "Enable Damage"
-msgstr ""
-
-#: src/guiMainMenu.cpp:290
-msgid "Delete map"
-msgstr ""
-
-#: src/guiMessageMenu.cpp:93 src/guiTextInputMenu.cpp:111
-msgid "Proceed"
-msgstr ""
-
-#: src/guiPasswordChange.cpp:102
-msgid "Old Password"
-msgstr ""
-
-#: src/guiPasswordChange.cpp:117
-msgid "New Password"
-msgstr ""
-
-#: src/guiPasswordChange.cpp:131
-msgid "Confirm Password"
-msgstr ""
-
-#: src/guiPasswordChange.cpp:146
-msgid "Change"
-msgstr ""
-
-#: src/guiPasswordChange.cpp:155
-msgid "Passwords do not match!"
-msgstr ""
-
-#: src/guiPauseMenu.cpp:110
-msgid "Continue"
-msgstr ""
-
-#: src/guiPauseMenu.cpp:117
-msgid "Change Password"
-msgstr ""
-
-#: src/guiPauseMenu.cpp:124
-msgid "Disconnect"
-msgstr ""
-
-#: src/guiPauseMenu.cpp:131
-msgid "Exit to OS"
-msgstr ""
-
-#: src/guiPauseMenu.cpp:138
-msgid ""
-"Keys:\n"
-"- WASD: Walk\n"
-"- Mouse left: dig blocks\n"
-"- Mouse right: place blocks\n"
-"- Mouse wheel: select item\n"
-"- 0...9: select item\n"
-"- Shift: sneak\n"
-"- R: Toggle viewing all loaded chunks\n"
-"- I: Inventory menu\n"
-"- ESC: This menu\n"
-"- T: Chat\n"
-msgstr ""
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-07-24 10:16+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/guiMainMenu.cpp:180
+msgid "Name/Password"
+msgstr ""
+
+#: src/guiMainMenu.cpp:203
+msgid "Address/Port"
+msgstr ""
+
+#: src/guiMainMenu.cpp:223
+msgid "Leave address blank to start a local server."
+msgstr ""
+
+#: src/guiMainMenu.cpp:230
+msgid "Fancy trees"
+msgstr ""
+
+#: src/guiMainMenu.cpp:236
+msgid "Smooth Lighting"
+msgstr ""
+
+#: src/guiMainMenu.cpp:244
+msgid "Start Game / Connect"
+msgstr ""
+
+#: src/guiMainMenu.cpp:253
+msgid "Change keys"
+msgstr ""
+
+#: src/guiMainMenu.cpp:276
+msgid "Creative Mode"
+msgstr ""
+
+#: src/guiMainMenu.cpp:282
+msgid "Enable Damage"
+msgstr ""
+
+#: src/guiMainMenu.cpp:290
+msgid "Delete map"
+msgstr ""
+
+#: src/guiMessageMenu.cpp:93 src/guiTextInputMenu.cpp:111
+msgid "Proceed"
+msgstr ""
+
+#: src/guiPasswordChange.cpp:102
+msgid "Old Password"
+msgstr ""
+
+#: src/guiPasswordChange.cpp:117
+msgid "New Password"
+msgstr ""
+
+#: src/guiPasswordChange.cpp:131
+msgid "Confirm Password"
+msgstr ""
+
+#: src/guiPasswordChange.cpp:146
+msgid "Change"
+msgstr ""
+
+#: src/guiPasswordChange.cpp:155
+msgid "Passwords do not match!"
+msgstr ""
+
+#: src/guiPauseMenu.cpp:110
+msgid "Continue"
+msgstr ""
+
+#: src/guiPauseMenu.cpp:117
+msgid "Change Password"
+msgstr ""
+
+#: src/guiPauseMenu.cpp:124
+msgid "Disconnect"
+msgstr ""
+
+#: src/guiPauseMenu.cpp:131
+msgid "Exit to OS"
+msgstr ""
+
+#: src/guiPauseMenu.cpp:138
+msgid ""
+"Keys:\n"
+"- WASD: Walk\n"
+"- Mouse left: dig blocks\n"
+"- Mouse right: place blocks\n"
+"- Mouse wheel: select item\n"
+"- 0...9: select item\n"
+"- Shift: sneak\n"
+"- R: Toggle viewing all loaded chunks\n"
+"- I: Inventory menu\n"
+"- ESC: This menu\n"
+"- T: Chat\n"
+msgstr ""
if(GETTEXT_FOUND AND USE_GETTEXT)
foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
- if (NOT LOCALE STREQUAL "en")
- set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
- set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
- install(FILES ${MO_BUILD_PATH} DESTINATION ${MO_DEST_PATH})
- endif(NOT LOCALE STREQUAL "en")
+ set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
+ set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
+ install(FILES ${MO_BUILD_PATH} DESTINATION ${MO_DEST_PATH})
endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
endif()
endif(BUILD_SERVER)
if (GETTEXT_FOUND AND USE_GETTEXT)
- add_custom_command(OUTPUT "${GETTEXT_PO_PATH}/en"
- COMMAND ${CMAKE_COMMAND} -E make_directory "${GETTEXT_PO_PATH}/en"
- COMMENT "po-update [en]: creating translation template base directory")
- set(POT_FILE "${GETTEXT_PO_PATH}/en/minetest.pot")
- file(GLOB GETTEXT_POT_DEPS *.cpp *.h)
- file(GLOB GETTEXT_POT_DEPS_REL RELATIVE ${CMAKE_SOURCE_DIR} *.cpp *.h)
- add_custom_command(OUTPUT ${POT_FILE}
- COMMAND ${GETTEXT_EXTRACT} -F -n -o ${POT_FILE} ${GETTEXT_POT_DEPS_REL}
- DEPENDS "${GETTEXT_PO_PATH}/en" ${GETTEXT_POT_DEPS}
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
- COMMENT "po-update [en]: updating translation template")
-
- set(PO_FILES)
set(MO_FILES)
foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
- # skip the 'en' locale which is treated separately
- if (NOT LOCALE STREQUAL "en")
- set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/minetest.po")
- add_custom_command(OUTPUT ${PO_FILE_PATH}
- COMMAND ${GETTEXT_MSGMERGE} -F -U ${PO_FILE_PATH} ${POT_FILE}
- DEPENDS ${POT_FILE}
- WORKING_DIRECTORY "${GETTEXT_PO_PATH}/${LOCALE}"
- COMMENT "po-update [${LOCALE}]: updating strings")
-
+ set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/minetest.po")
+ set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
+ set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
+
+ add_custom_command(OUTPUT ${MO_BUILD_PATH}
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${MO_BUILD_PATH}
+ COMMENT "mo-update [${LOCALE}]: Creating locale directory.")
+
+ add_custom_command(
+ OUTPUT ${MO_FILE_PATH}
+ COMMAND ${GETTEXT_MSGFMT} -o ${MO_FILE_PATH} ${PO_FILE_PATH}
+ DEPENDS ${MO_BUILD_PATH} ${PO_FILE_PATH}
+ WORKING_DIRECTORY "${GETTEXT_PO_PATH}/${LOCALE}"
+ COMMENT "mo-update [${LOCALE}]: Creating mo file."
+ )
- set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
- add_custom_command(OUTPUT ${MO_BUILD_PATH}
- COMMAND ${CMAKE_COMMAND} -E make_directory ${MO_BUILD_PATH}
- COMMENT "mo-update [${LOCALE}]: Creating locale directory.")
-
- set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
-
- add_custom_command(
- OUTPUT ${MO_FILE_PATH}
- COMMAND ${GETTEXT_MSGFMT} -o ${MO_FILE_PATH} ${PO_FILE_PATH}
- DEPENDS ${MO_BUILD_PATH} ${PO_FILE_PATH}
- WORKING_DIRECTORY "${GETTEXT_PO_PATH}/${LOCALE}"
- COMMENT "mo-update [${LOCALE}]: Creating mo file."
- )
-
- set(MO_FILES ${MO_FILES} ${MO_FILE_PATH})
- set(PO_FILES ${PO_FILES} ${PO_FILE_PATH})
- endif(NOT LOCALE STREQUAL "en")
+ set(MO_FILES ${MO_FILES} ${MO_FILE_PATH})
endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
add_custom_target(translations ALL COMMENT "mo update" DEPENDS ${MO_FILES})
- add_custom_target(updatepo COMMENT "po update" DEPENDS ${PO_FILES})
endif(GETTEXT_FOUND AND USE_GETTEXT)
# Subdirectories
--- /dev/null
+#!/bin/sh
+
+# Update/create minetest po files
+
+# an auxiliary function to abort processing with an optional error
+# message
+abort() {
+ test -n "$1" && echo >&2 "$1"
+ exit 1
+}
+
+# The po/ directory is assumed to be parallel to the directory where
+# this script is. Relative paths are fine for us so we can just
+# use the following trick (works both for manual invocations and for
+# script found from PATH)
+scriptisin="$(dirname "$(which "$0")")"
+
+# The script is executed from the parent of po/, which is also the
+# parent of the script directory and of the src/ directory.
+# We go through $scriptisin so that it can be executed from whatever
+# directory and still work correctly
+cd "$scriptisin/.."
+
+test -e po || abort "po/ directory not found"
+test -d po || abort "po/ is not a directory!"
+
+# Get a list of the languages we have to update/create
+
+cd po || abort "couldn't change directory to po!"
+
+# This assumes that we won't have dirnames with space, which is
+# the case for language codes, which are the only subdirs we expect to
+# find in po/ anyway. If you put anything else there, you need to suffer
+# the consequences of your actions, so we don't do sanity checks
+langs=""
+
+for lang in * ; do
+ if test ! -d $lang; then
+ continue
+ fi
+ langs="$langs $lang"
+done
+
+# go back
+cd ..
+
+# First thing first, update the .pot template. We place it in the po/
+# directory at the top level. You a recent enough xgettext that supports
+# --package-name
+potfile=po/minetest.pot
+xgettext --package-name=minetest -F -n -o $potfile src/*.cpp src/*.h
+
+# Now iterate on all languages and create the po file if missing, or update it
+# if it exists already
+for lang in $langs ; do # note the missing quotes around $langs
+ pofile=po/$lang/minetest.po
+ if test -e $pofile; then
+ echo "[$lang]: updating strings"
+ msgmerge -F -U $pofile $potfile
+ else
+ # This will ask for the translator identity
+ echo "[$lang]: NEW strings"
+ msginit -l $lang -o $pofile -i $potfile
+ fi
+done