[colobot] 61/145: Proper plural form translations for ObligatoryToken

Didier Raboud odyx at moszumanska.debian.org
Mon Jul 11 12:56:17 UTC 2016


This is an automated email from the git hooks/post-receive script.

odyx pushed a commit to branch debian/master
in repository colobot.

commit 14e2910f83098e44f5d17036f090033b6d2b2b3a
Author: krzys-h <krzys_h at interia.pl>
Date:   Sat Apr 9 16:28:11 2016 +0200

    Proper plural form translations for ObligatoryToken
---
 cmake/FindGettext.cmake | 218 ------------------------------------------------
 po/CMakeLists.txt       |  35 +++++++-
 po/colobot.pot          |  38 +++++----
 po/de.po                |  54 +++++-------
 po/fr.po                |  83 +++++++-----------
 po/pl.po                |  97 ++++++++-------------
 po/ru.po                |  57 ++++++-------
 src/common/restext.cpp  |   2 -
 src/script/script.cpp   |  26 ++++--
 9 files changed, 187 insertions(+), 423 deletions(-)

diff --git a/cmake/FindGettext.cmake b/cmake/FindGettext.cmake
deleted file mode 100644
index ca1150e..0000000
--- a/cmake/FindGettext.cmake
+++ /dev/null
@@ -1,218 +0,0 @@
-##
-# Patched version of original CMake module
-# Added variable GETTEXT_INSTALL_PREFIX to optionally override installation path of resulting translations
-##
-
-# - Find GNU gettext tools
-# This module looks for the GNU gettext tools. This module defines the
-# following values:
-#  GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool.
-#  GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool.
-#  GETTEXT_FOUND: True if gettext has been found.
-#  GETTEXT_VERSION_STRING: the version of gettext found (since CMake 2.8.8)
-#
-# Additionally it provides the following macros:
-# GETTEXT_CREATE_TRANSLATIONS ( outputFile [ALL] file1 ... fileN )
-#    This will create a target "translations" which will convert the
-#    given input po files into the binary output mo file. If the
-#    ALL option is used, the translations will also be created when
-#    building the default target.
-# GETTEXT_PROCESS_POT( <potfile> [ALL] [INSTALL_DESTINATION <destdir>] LANGUAGES <lang1> <lang2> ... )
-#     Process the given pot file to mo files.
-#     If INSTALL_DESTINATION is given then automatically install rules will be created,
-#     the language subdirectory will be taken into account (by default use share/locale/).
-#     If ALL is specified, the pot file is processed when building the all traget.
-#     It creates a custom target "potfile".
-# GETTEXT_PROCESS_PO_FILES( <lang> [ALL] [INSTALL_DESTINATION <dir>] PO_FILES <po1> <po2> ... )
-#     Process the given po files to mo files for the given language.
-#     If INSTALL_DESTINATION is given then automatically install rules will be created,
-#     the language subdirectory will be taken into account (by default use share/locale/).
-#     If ALL is specified, the po files are processed when building the all traget.
-#     It creates a custom target "pofiles".
-
-#=============================================================================
-# Copyright 2007-2009 Kitware, Inc.
-# Copyright 2007      Alexander Neundorf <neundorf at kde.org>
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-#  License text for the above reference.)
-
-find_program(GETTEXT_MSGMERGE_EXECUTABLE msgmerge)
-
-find_program(GETTEXT_MSGFMT_EXECUTABLE msgfmt)
-
-if(GETTEXT_MSGMERGE_EXECUTABLE)
-   execute_process(COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --version
-                  OUTPUT_VARIABLE gettext_version
-                  ERROR_QUIET
-                  OUTPUT_STRIP_TRAILING_WHITESPACE)
-   if (gettext_version MATCHES "^msgmerge \\(.*\\) [0-9]")
-      string(REGEX REPLACE "^msgmerge \\([^\\)]*\\) ([0-9\\.]+[^ \n]*).*" "\\1" GETTEXT_VERSION_STRING "${gettext_version}")
-   endif()
-   unset(gettext_version)
-endif()
-
-set(GETTEXT_INSTALL_PREFIX share/locale)
-
-include(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Gettext
-                                  REQUIRED_VARS GETTEXT_MSGMERGE_EXECUTABLE GETTEXT_MSGFMT_EXECUTABLE
-                                  VERSION_VAR GETTEXT_VERSION_STRING)
-
-include(CMakeParseArguments)
-
-function(_GETTEXT_GET_UNIQUE_TARGET_NAME _name _unique_name)
-   set(propertyName "_GETTEXT_UNIQUE_COUNTER_${_name}")
-   get_property(currentCounter GLOBAL PROPERTY "${propertyName}")
-   if(NOT currentCounter)
-      set(currentCounter 1)
-   endif()
-   set(${_unique_name} "${_name}_${currentCounter}" PARENT_SCOPE)
-   math(EXPR currentCounter "${currentCounter} + 1")
-   set_property(GLOBAL PROPERTY ${propertyName} ${currentCounter} )
-endfunction()
-
-macro(GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg)
-   # make it a real variable, so we can modify it here
-   set(_firstPoFile "${_firstPoFileArg}")
-
-   set(_gmoFiles)
-   get_filename_component(_potName ${_potFile} NAME)
-   string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName})
-   get_filename_component(_absPotFile ${_potFile} ABSOLUTE)
-
-   set(_addToAll)
-   if(${_firstPoFile} STREQUAL "ALL")
-      set(_addToAll "ALL")
-      set(_firstPoFile)
-   endif()
-
-   foreach (_currentPoFile ${_firstPoFile} ${ARGN})
-      get_filename_component(_absFile ${_currentPoFile} ABSOLUTE)
-      get_filename_component(_abs_PATH ${_absFile} PATH)
-      get_filename_component(_lang ${_absFile} NAME_WE)
-      set(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo)
-
-      add_custom_command(
-         OUTPUT ${_gmoFile}
-         COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_absFile} ${_absPotFile}
-         COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_absFile}
-         DEPENDS ${_absPotFile} ${_absFile}
-      )
-
-      install(FILES ${_gmoFile} DESTINATION ${GETTEXT_INSTALL_PREFIX}/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo)
-      set(_gmoFiles ${_gmoFiles} ${_gmoFile})
-
-   endforeach ()
-
-   if(NOT TARGET translations)
-      add_custom_target(translations)
-   endif()
-
-  _GETTEXT_GET_UNIQUE_TARGET_NAME(translations uniqueTargetName)
-
-   add_custom_target(${uniqueTargetName} ${_addToAll} DEPENDS ${_gmoFiles})
-
-   add_dependencies(translations ${uniqueTargetName})
-
-endmacro()
-
-
-function(GETTEXT_PROCESS_POT_FILE _potFile)
-   set(_gmoFiles)
-   set(_options ALL)
-   set(_oneValueArgs INSTALL_DESTINATION)
-   set(_multiValueArgs LANGUAGES)
-
-   CMAKE_PARSE_ARGUMENTS(_parsedArguments "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN})
-
-   get_filename_component(_potName ${_potFile} NAME)
-   string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName})
-   get_filename_component(_absPotFile ${_potFile} ABSOLUTE)
-
-   foreach (_lang ${_parsedArguments_LANGUAGES})
-      set(_poFile  "${CMAKE_CURRENT_BINARY_DIR}/${_lang}.po")
-      set(_gmoFile "${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo")
-
-      add_custom_command(
-         OUTPUT "${_poFile}"
-         COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_poFile} ${_absPotFile}
-         DEPENDS ${_absPotFile}
-      )
-
-      add_custom_command(
-         OUTPUT "${_gmoFile}"
-         COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_poFile}
-         DEPENDS ${_absPotFile} ${_poFile}
-      )
-
-      if(_parsedArguments_INSTALL_DESTINATION)
-         install(FILES ${_gmoFile} DESTINATION ${_parsedArguments_INSTALL_DESTINATION}/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo)
-      endif()
-      list(APPEND _gmoFiles ${_gmoFile})
-   endforeach ()
-
-  if(NOT TARGET potfiles)
-     add_custom_target(potfiles)
-  endif()
-
-  _GETTEXT_GET_UNIQUE_TARGET_NAME( potfiles uniqueTargetName)
-
-   if(_parsedArguments_ALL)
-      add_custom_target(${uniqueTargetName} ALL DEPENDS ${_gmoFiles})
-   else()
-      add_custom_target(${uniqueTargetName} DEPENDS ${_gmoFiles})
-   endif()
-
-   add_dependencies(potfiles ${uniqueTargetName})
-
-endfunction()
-
-
-function(GETTEXT_PROCESS_PO_FILES _lang)
-   set(_options ALL)
-   set(_oneValueArgs INSTALL_DESTINATION)
-   set(_multiValueArgs PO_FILES)
-   set(_gmoFiles)
-
-   CMAKE_PARSE_ARGUMENTS(_parsedArguments "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN})
-
-   foreach(_current_PO_FILE ${_parsedArguments_PO_FILES})
-      get_filename_component(_name ${_current_PO_FILE} NAME)
-      string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _basename ${_name})
-      set(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.gmo)
-      add_custom_command(OUTPUT ${_gmoFile}
-            COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_current_PO_FILE}
-            WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
-            DEPENDS ${_current_PO_FILE}
-         )
-
-      if(_parsedArguments_INSTALL_DESTINATION)
-         install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.gmo DESTINATION ${_parsedArguments_INSTALL_DESTINATION}/${_lang}/LC_MESSAGES/ RENAME ${_basename}.mo)
-      endif()
-      list(APPEND _gmoFiles ${_gmoFile})
-   endforeach()
-
-
-  if(NOT TARGET pofiles)
-     add_custom_target(pofiles)
-  endif()
-
-  _GETTEXT_GET_UNIQUE_TARGET_NAME( pofiles uniqueTargetName)
-
-   if(_parsedArguments_ALL)
-      add_custom_target(${uniqueTargetName} ALL DEPENDS ${_gmoFiles})
-   else()
-      add_custom_target(${uniqueTargetName} DEPENDS ${_gmoFiles})
-   endif()
-
-   add_dependencies(pofiles ${uniqueTargetName})
-
-endfunction()
diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt
index 3550e7c..6a5d707 100644
--- a/po/CMakeLists.txt
+++ b/po/CMakeLists.txt
@@ -4,11 +4,14 @@ find_package(Gettext REQUIRED)
 
 set(_potFile colobot.pot)
 
+# Extract translations
+
 find_program(XGETTEXT_CMD xgettext)
 
 add_custom_command(OUTPUT ${_potFile}
-    COMMAND ${XGETTEXT_CMD} ${colobot_SOURCE_DIR}/src/app/app.cpp --output=${_potFile}
-    COMMAND ${XGETTEXT_CMD} ${colobot_SOURCE_DIR}/src/common/restext.cpp --output=${_potFile} --join-existing --keyword=TR --no-location
+    COMMAND ${XGETTEXT_CMD} ${colobot_SOURCE_DIR}/src/app/app.cpp --output=${_potFile} --no-wrap
+    COMMAND ${XGETTEXT_CMD} ${colobot_SOURCE_DIR}/src/common/restext.cpp --output=${_potFile} --no-wrap --join-existing --no-location --keyword=TR
+    COMMAND ${XGETTEXT_CMD} ${colobot_SOURCE_DIR}/src/script/script.cpp --output=${_potFile} --no-wrap --join-existing --no-location
     COMMAND sed -i -e "s|^\\(\"POT-Creation-Date:\\).*$|\\1 DATE\\\\n\"|" ${_potFile}
 
     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
@@ -18,6 +21,30 @@ add_custom_command(OUTPUT ${_potFile}
 
 add_custom_target(update-pot DEPENDS ${_potFile})
 
+# Generate translations
+
 file(GLOB _poFiles *.po)
-set(GETTEXT_INSTALL_PREFIX ${COLOBOT_INSTALL_I18N_DIR})
-gettext_create_translations(${_potFile} ALL ${_poFiles})
+
+set(_gmoFiles)
+get_filename_component(_potName ${_potFile} NAME)
+string(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName})
+get_filename_component(_absPotFile ${_potFile} ABSOLUTE)
+
+foreach (_currentPoFile ${_poFiles})
+    get_filename_component(_absFile ${_currentPoFile} ABSOLUTE)
+    get_filename_component(_abs_PATH ${_absFile} PATH)
+    get_filename_component(_lang ${_absFile} NAME_WE)
+    set(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo)
+
+    add_custom_command(
+        OUTPUT ${_gmoFile}
+        COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --no-wrap --update --backup=none -s ${_absFile} ${_absPotFile}
+        COMMAND ${GETTEXT_MSGFMT_EXECUTABLE}  --check-format -o ${_gmoFile} ${_absFile}
+        DEPENDS ${_absPotFile} ${_absFile}
+    )
+
+    install(FILES ${_gmoFile} DESTINATION ${COLOBOT_INSTALL_I18N_DIR}/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo)
+    set(_gmoFiles ${_gmoFiles} ${_gmoFile})
+endforeach()
+
+add_custom_target(translations ALL DEPENDS ${_gmoFiles})
diff --git a/po/colobot.pot b/po/colobot.pot
index 442beb4..b39e7ad 100644
--- a/po/colobot.pot
+++ b/po/colobot.pot
@@ -16,6 +16,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
 msgid "Colobot rules!"
 msgstr ""
@@ -370,9 +371,7 @@ msgstr ""
 msgid "Film sequences\\Films before and after the missions"
 msgstr ""
 
-msgid ""
-"Camera border scrolling\\Scrolling when the mouse touches right or left "
-"border"
+msgid "Camera border scrolling\\Scrolling when the mouse touches right or left border"
 msgstr ""
 
 msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
@@ -459,8 +458,7 @@ msgstr ""
 msgid "Previous object\\Selects the previous object"
 msgstr ""
 
-msgid ""
-"Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)"
+msgid "Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)"
 msgstr ""
 
 msgid "Camera closer\\Moves the camera forward"
@@ -541,8 +539,7 @@ msgstr ""
 msgid "Normal\\Normal sound volume"
 msgstr ""
 
-msgid ""
-"Access to solution\\Shows the solution (detailed instructions for missions)"
+msgid "Access to solution\\Shows the solution (detailed instructions for missions)"
 msgstr ""
 
 msgid "Invert\\Invert values on this axis"
@@ -1505,8 +1502,7 @@ msgstr ""
 msgid "Inappropriate object"
 msgstr ""
 
-msgid ""
-"The mission is not accomplished yet (press \\key help; for more details)"
+msgid "The mission is not accomplished yet (press \\key help; for more details)"
 msgstr ""
 
 msgid "Bot destroyed"
@@ -1518,14 +1514,6 @@ msgstr ""
 msgid "Unable to control enemy objects"
 msgstr ""
 
-#, c-format
-msgid "You have to use \"%s\" at least %d times in this exercise (used: %d)"
-msgstr ""
-
-#, c-format
-msgid "You have to use \"%s\" at most %d times in this exercise (used: %d)"
-msgstr ""
-
 msgid "Inappropriate bot"
 msgstr ""
 
@@ -1792,3 +1780,19 @@ msgstr ""
 
 msgid "Button %1"
 msgstr ""
+
+#, c-format
+msgid "You have to use \"%1$s\" at least once in this exercise (used: %2$d)"
+msgid_plural "You have to use \"%1$s\" at least %3$d times in this exercise (used: %2$d)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "You cannot use \"%s\" in this exercise (used: %d)"
+msgstr ""
+
+#, c-format
+msgid "You have to use \"%1$s\" at most once in this exercise (used: %2$d)"
+msgid_plural "You have to use \"%1$s\" at most %3$d times in this exercise (used: %2$d)"
+msgstr[0] ""
+msgstr[1] ""
diff --git a/po/de.po b/po/de.po
index 300d209..972066e 100644
--- a/po/de.po
+++ b/po/de.po
@@ -86,9 +86,7 @@ msgid "<<< Well done; mission accomplished >>>"
 msgstr "<<< Bravo, Mission vollendet >>>"
 
 msgid "A label must be followed by \"for\"; \"while\"; \"do\" or \"switch\""
-msgstr ""
-"Ein Label kann nur vor den Anweisungen \"for\", \"while\", \"do\" oder "
-"\"switch\" vorkommen"
+msgstr "Ein Label kann nur vor den Anweisungen \"for\", \"while\", \"do\" oder \"switch\" vorkommen"
 
 msgid "A variable can not be declared twice"
 msgstr "Eine Variable wird zum zweiten Mal deklariert"
@@ -99,13 +97,11 @@ msgstr "Abbrechen\\Mission abbrechen"
 msgid "Access beyond array limit"
 msgstr "Zugriff im Array außerhalb der Grenzen"
 
-msgid ""
-"Access to solution\\Shows the solution (detailed instructions for missions)"
+msgid "Access to solution\\Shows the solution (detailed instructions for missions)"
 msgstr "Zeigt die Lösung\\Zeigt nach 3mal Scheitern die Lösung"
 
 msgid "Access to solutions\\Show program \"4: Solution\" in the exercises"
-msgstr ""
-"Lösung zugänglich\\Die Lösung ist im Programmslot \"4: Lösung\" zugänglich"
+msgstr "Lösung zugänglich\\Die Lösung ist im Programmslot \"4: Lösung\" zugänglich"
 
 msgid "Add new program"
 msgstr ""
@@ -328,11 +324,8 @@ msgid "Camera back\\Moves the camera backward"
 msgstr "Kamera weiter\\Bewegung der Kamera rückwärts"
 
 #, fuzzy
-msgid ""
-"Camera border scrolling\\Scrolling when the mouse touches right or left "
-"border"
-msgstr ""
-"Kameradrehung mit der Maus\\Die Kamera dreht wenn die Maus den Rand erreicht"
+msgid "Camera border scrolling\\Scrolling when the mouse touches right or left border"
+msgstr "Kameradrehung mit der Maus\\Die Kamera dreht wenn die Maus den Rand erreicht"
 
 msgid "Camera closer\\Moves the camera forward"
 msgstr "Kamera näher\\Bewegung der Kamera vorwärts"
@@ -1418,8 +1411,7 @@ msgstr "Spinne tödlich verwundet"
 msgid "Stack overflow"
 msgstr "Stack overflow"
 
-msgid ""
-"Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)"
+msgid "Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)"
 msgstr "Standardhandlung\\Führt die Standardhandlung des Roboters aus"
 
 msgid "Standard controls\\Standard key functions"
@@ -1483,11 +1475,8 @@ msgstr "Der Ausdruck muss einen boolschen Wert ergeben"
 msgid "The function returned no value "
 msgstr "Die Funktion hat kein Ergebnis zurückgegeben"
 
-msgid ""
-"The mission is not accomplished yet (press \\key help; for more details)"
-msgstr ""
-"Mission noch nicht beendet (Drücken Sie auf \\key help; für weitere "
-"Informationen)"
+msgid "The mission is not accomplished yet (press \\key help; for more details)"
+msgstr "Mission noch nicht beendet (Drücken Sie auf \\key help; für weitere Informationen)"
 
 msgid "The types of the two operands are incompatible "
 msgstr "Die zwei Operanden sind nicht kompatibel"
@@ -1705,16 +1694,24 @@ msgstr "Sie können keinen radioaktiven Gegenstand tragen"
 msgid "You can not carry an object under water"
 msgstr "Sie können unter Wasser nichts tragen"
 
+#, fuzzy, c-format
+msgid "You cannot use \"%s\" in this exercise (used: %d)"
+msgstr "In dieser Übung verboten"
+
 msgid "You found a usable object"
 msgstr "Sie haben ein brauchbares Objekt gefunden"
 
-#, c-format
-msgid "You have to use \"%s\" at least %d times in this exercise (used: %d)"
-msgstr ""
+#, fuzzy, c-format
+msgid "You have to use \"%1$s\" at least once in this exercise (used: %2$d)"
+msgid_plural "You have to use \"%1$s\" at least %3$d times in this exercise (used: %2$d)"
+msgstr[0] "In dieser Übung verboten"
+msgstr[1] "In dieser Übung verboten"
 
-#, c-format
-msgid "You have to use \"%s\" at most %d times in this exercise (used: %d)"
-msgstr ""
+#, fuzzy, c-format
+msgid "You have to use \"%1$s\" at most once in this exercise (used: %2$d)"
+msgid_plural "You have to use \"%1$s\" at most %3$d times in this exercise (used: %2$d)"
+msgstr[0] "In dieser Übung verboten"
+msgstr[1] "In dieser Übung verboten"
 
 msgid "You must get on the spaceship to take off "
 msgstr "Gehen Sie an Bord, bevor Sie abheben"
@@ -1870,9 +1867,6 @@ msgstr ""
 #~ msgid "Developed by :"
 #~ msgstr "Entwickelt von:"
 
-#~ msgid "Do not use in this exercise"
-#~ msgstr "In dieser Übung verboten"
-
 #, fuzzy
 #~ msgid "Do you want to quit Colobot: Gold Edition?"
 #~ msgstr "Wollen Sie COLOBOT schließen ?"
@@ -1931,9 +1925,7 @@ msgstr ""
 #~ msgid "Textures\\Quality of textures "
 #~ msgstr "Qualität der Texturen\\Qualität der Anzeige"
 
-#~ msgid ""
-#~ "The list is only available if a \\l;radar station\\u object\\radar; is "
-#~ "working.\n"
+#~ msgid "The list is only available if a \\l;radar station\\u object\\radar; is working.\n"
 #~ msgstr "Die Liste ist ohne \\l;Radar\\u object\\radar; nicht verfügbar.\n"
 
 #~ msgid "Use a joystick\\Joystick or keyboard"
diff --git a/po/fr.po b/po/fr.po
index a57ce32..6822fa0 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -79,9 +79,7 @@ msgid "<<< Well done; mission accomplished >>>"
 msgstr "<<< Bravo; mission terminée >>>"
 
 msgid "A label must be followed by \"for\"; \"while\"; \"do\" or \"switch\""
-msgstr ""
-"Un label ne peut se placer que devant un \"for\"; un \"while\"; un \"do\" ou "
-"un \"switch\""
+msgstr "Un label ne peut se placer que devant un \"for\"; un \"while\"; un \"do\" ou un \"switch\""
 
 msgid "A variable can not be declared twice"
 msgstr "Redéfinition d'une variable"
@@ -92,8 +90,7 @@ msgstr "Abandonner\\Abandonner la mission en cours"
 msgid "Access beyond array limit"
 msgstr "Accès hors du tableau"
 
-msgid ""
-"Access to solution\\Shows the solution (detailed instructions for missions)"
+msgid "Access to solution\\Shows the solution (detailed instructions for missions)"
 msgstr "Accès à la solution\\Donne la solution"
 
 msgid "Access to solutions\\Show program \"4: Solution\" in the exercises"
@@ -148,9 +145,7 @@ msgid "Automatic indent\\When program editing"
 msgstr "Indentation automatique\\Pendant l'édition d'un programme"
 
 msgid "Autosave interval\\How often your game will autosave"
-msgstr ""
-"Intervalle d'auto-sauvegarde\\À quels intervalles les parties vont-t-elles "
-"êtres sauvegardées automatiquement"
+msgstr "Intervalle d'auto-sauvegarde\\À quels intervalles les parties vont-t-elles êtres sauvegardées automatiquement"
 
 msgid "Autosave slots\\How many autosave slots you'll have"
 msgstr "Nombre d'auto-sauvegardes\\Combien d'auto-sauvegarde seront conservées"
@@ -320,20 +315,14 @@ msgstr "Caméra plus loin"
 msgid "Camera back\\Moves the camera backward"
 msgstr "Caméra plus loin\\Recule la caméra"
 
-msgid ""
-"Camera border scrolling\\Scrolling when the mouse touches right or left "
-"border"
-msgstr ""
-"Défilement dans les bords\\Défilement lorsque la souris touche les bords "
-"gauche ou droite"
+msgid "Camera border scrolling\\Scrolling when the mouse touches right or left border"
+msgstr "Défilement dans les bords\\Défilement lorsque la souris touche les bords gauche ou droite"
 
 msgid "Camera closer\\Moves the camera forward"
 msgstr "Caméra plus proche\\Avance la caméra"
 
 msgid "Camera down\\Decrease camera angle while visiting message origin"
-msgstr ""
-"Caméra plus basse\\Réduit l'angle de caméra lors de la vue de l'origine des "
-"messages"
+msgstr "Caméra plus basse\\Réduit l'angle de caméra lors de la vue de l'origine des messages"
 
 msgid "Camera nearest"
 msgstr "Caméra plus proche"
@@ -345,9 +334,7 @@ msgid "Camera to right"
 msgstr "Caméra à droite"
 
 msgid "Camera up\\Increase camera angle while visiting message origin"
-msgstr ""
-"Caméra plus haute\\Augmente l'angle de caméra lors de la vue de l'origine "
-"des messages"
+msgstr "Caméra plus haute\\Augmente l'angle de caméra lors de la vue de l'origine des messages"
 
 msgid "Can not produce not researched object"
 msgstr "Impossible de créer un objet n'ayant pas été recherché"
@@ -401,8 +388,7 @@ msgid "Code battles"
 msgstr "Batailles de code"
 
 msgid "Code battles\\Program your robot to be the best of them all!"
-msgstr ""
-"Batailles de code\\Programmez votre robot pour être le meilleur entre tous!"
+msgstr "Batailles de code\\Programmez votre robot pour être le meilleur entre tous!"
 
 msgid "Colobot rules!"
 msgstr "Colobot est super!"
@@ -851,12 +837,10 @@ msgid "Missions\\Select mission"
 msgstr "Missions\\La grande aventure"
 
 msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
-msgstr ""
-"Inversion souris X\\Inversion de la rotation lorsque la souris touche un bord"
+msgstr "Inversion souris X\\Inversion de la rotation lorsque la souris touche un bord"
 
 msgid "Mouse inversion Y\\Inversion of the scrolling direction on the Y axis"
-msgstr ""
-"Inversion souris Y\\Inversion de la rotation lorsque la souris touche un bord"
+msgstr "Inversion souris Y\\Inversion de la rotation lorsque la souris touche un bord"
 
 msgid "Move selected program down"
 msgstr "Déplace le programme sélectionné vers le bas"
@@ -1306,9 +1290,7 @@ msgid "Semicolon terminator missing"
 msgstr "Terminateur point-virgule non trouvé"
 
 msgid "Shadow resolution\\Higher means better range and quality, but slower"
-msgstr ""
-"Résolution des ombres\\Plus grand implique une meilleure qulité et "
-"amplitude, mais plus lent"
+msgstr "Résolution des ombres\\Plus grand implique une meilleure qulité et amplitude, mais plus lent"
 
 msgid "Shield level"
 msgstr "Niveau du bouclier"
@@ -1403,8 +1385,7 @@ msgstr "Araignée mortellement touchée"
 msgid "Stack overflow"
 msgstr "Débordement de la pile"
 
-msgid ""
-"Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)"
+msgid "Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)"
 msgstr "Action standard\\Action du bouton avec le cadre rouge"
 
 msgid "Standard controls\\Standard key functions"
@@ -1467,10 +1448,8 @@ msgstr "L'expression doit ętre un boolean"
 msgid "The function returned no value "
 msgstr "La fonction n'a pas retourné de résultat"
 
-msgid ""
-"The mission is not accomplished yet (press \\key help; for more details)"
-msgstr ""
-"La misssion n'est pas terminée (appuyez sur \\key help; pour plus de détails)"
+msgid "The mission is not accomplished yet (press \\key help; for more details)"
+msgstr "La misssion n'est pas terminée (appuyez sur \\key help; pour plus de détails)"
 
 msgid "The types of the two operands are incompatible "
 msgstr "Les deux opérandes ne sont pas de types compatibles"
@@ -1491,9 +1470,7 @@ msgid "This label does not exist"
 msgstr "Cette étiquette n'existe pas"
 
 msgid "This menu is for userlevels from mods, but you didn't install any"
-msgstr ""
-"Ce menu donne accès aux niveaux spéciaux (importés ou personnalisés), mais "
-"aucun n'est installé."
+msgstr "Ce menu donne accès aux niveaux spéciaux (importés ou personnalisés), mais aucun n'est installé."
 
 msgid "This object is not a member of a class"
 msgstr "L'objet n'est pas une instance d'une classe"
@@ -1682,8 +1659,7 @@ msgid "Yes"
 msgstr "Oui"
 
 msgid "You can fly with the keys (\\key gup;) and (\\key gdown;)"
-msgstr ""
-"Il est possible de voler avec les touches (\\key gup;) et (\\key gdown;)"
+msgstr "Il est possible de voler avec les touches (\\key gup;) et (\\key gdown;)"
 
 msgid "You can not carry a radioactive object"
 msgstr "Vous ne pouvez pas transporter un objet radioactif"
@@ -1691,16 +1667,24 @@ msgstr "Vous ne pouvez pas transporter un objet radioactif"
 msgid "You can not carry an object under water"
 msgstr "Vous ne pouvez pas transporter un objet sous l'eau"
 
+#, fuzzy, c-format
+msgid "You cannot use \"%s\" in this exercise (used: %d)"
+msgstr "Interdit dans cet exercice"
+
 msgid "You found a usable object"
 msgstr "Vous avez trouvé un objet utilisable"
 
-#, c-format
-msgid "You have to use \"%s\" at least %d times in this exercise (used: %d)"
-msgstr ""
+#, fuzzy, c-format
+msgid "You have to use \"%1$s\" at least once in this exercise (used: %2$d)"
+msgid_plural "You have to use \"%1$s\" at least %3$d times in this exercise (used: %2$d)"
+msgstr[0] "Interdit dans cet exercice"
+msgstr[1] "Interdit dans cet exercice"
 
-#, c-format
-msgid "You have to use \"%s\" at most %d times in this exercise (used: %d)"
-msgstr ""
+#, fuzzy, c-format
+msgid "You have to use \"%1$s\" at most once in this exercise (used: %2$d)"
+msgid_plural "You have to use \"%1$s\" at most %3$d times in this exercise (used: %2$d)"
+msgstr[0] "Interdit dans cet exercice"
+msgstr[1] "Interdit dans cet exercice"
 
 msgid "You must get on the spaceship to take off "
 msgstr "Vous devez embarquer pour pouvoir décoller"
@@ -1855,9 +1839,6 @@ msgstr ""
 #~ msgid "Developed by :"
 #~ msgstr "Développé par :"
 
-#~ msgid "Do not use in this exercise"
-#~ msgstr "Interdit dans cet exercice"
-
 #, fuzzy
 #~ msgid "Do you want to quit Colobot: Gold Edition?"
 #~ msgstr "Voulez-vous quitter COLOBOT ?"
@@ -1919,9 +1900,7 @@ msgstr ""
 #~ msgid "Textures\\Quality of textures "
 #~ msgstr "Qualité des textures\\Qualité des images"
 
-#~ msgid ""
-#~ "The list is only available if a \\l;radar station\\u object\\radar; is "
-#~ "working.\n"
+#~ msgid "The list is only available if a \\l;radar station\\u object\\radar; is working.\n"
 #~ msgstr "Liste non disponible sans \\l;radar\\u object\\radar;.\n"
 
 #~ msgid "Use a joystick\\Joystick or keyboard"
diff --git a/po/pl.po b/po/pl.po
index 5bc0a58..89cc236 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -14,12 +14,9 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: Pootle 2.5.1.1\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 "X-Language: pl_PL\n"
 "X-Source-Language: en_US\n"
-"X-POOTLE-MTIME: 1405002617.000000\n"
 
 msgid " Challenges in the chapter:"
 msgstr " Wyzwania w tym rozdziale:"
@@ -96,11 +93,8 @@ msgstr "Przerwij\\Przerywa bieżącą misję"
 msgid "Access beyond array limit"
 msgstr "Dostęp poza tablicę"
 
-msgid ""
-"Access to solution\\Shows the solution (detailed instructions for missions)"
-msgstr ""
-"Dostęp do rozwiązania\\Pokazuje rozwiązanie (szczegółowe instrukcje "
-"dotyczące misji)"
+msgid "Access to solution\\Shows the solution (detailed instructions for missions)"
+msgstr "Dostęp do rozwiązania\\Pokazuje rozwiązanie (szczegółowe instrukcje dotyczące misji)"
 
 msgid "Access to solutions\\Show program \"4: Solution\" in the exercises"
 msgstr "Accčs aux solutions\\Programme \"4: Solution\" dans les exercices"
@@ -154,14 +148,10 @@ msgid "Automatic indent\\When program editing"
 msgstr "Automatyczne wcięcia\\Automatyczne wcięcia podczas edycji programu"
 
 msgid "Autosave interval\\How often your game will autosave"
-msgstr ""
-"Częstotliwość autozapisu\\Jak często gra będzie automatycznie zapisywać twój "
-"postęp"
+msgstr "Częstotliwość autozapisu\\Jak często gra będzie automatycznie zapisywać twój postęp"
 
 msgid "Autosave slots\\How many autosave slots you'll have"
-msgstr ""
-"Sloty autozapisów\\Określa ile slotów na automatyczne zapisy będzie "
-"dostępnych"
+msgstr "Sloty autozapisów\\Określa ile slotów na automatyczne zapisy będzie dostępnych"
 
 msgid "Autosave\\Enables autosave"
 msgstr "Autozapis\\Włącza automatyczny zapis"
@@ -182,9 +172,7 @@ msgid "Bad argument for \"new\""
 msgstr "Zły argument dla funkcji \"new\""
 
 msgid "Big indent\\Indent 2 or 4 spaces per level defined by braces"
-msgstr ""
-"Duże wcięcie\\2 lub 4 spacje wcięcia na każdy poziom zdefiniowany przez "
-"klamry"
+msgstr "Duże wcięcie\\2 lub 4 spacje wcięcia na każdy poziom zdefiniowany przez klamry"
 
 msgid "Black box"
 msgstr "Czarna skrzynka"
@@ -330,12 +318,8 @@ msgstr "Camera awayest"
 msgid "Camera back\\Moves the camera backward"
 msgstr "Kamera dalej\\Oddala kamerę"
 
-msgid ""
-"Camera border scrolling\\Scrolling when the mouse touches right or left "
-"border"
-msgstr ""
-"Przewijanie kamery przy krawędzi\\Ekran jest przewijany gdy mysz dotknie "
-"prawej lub lewej jego krawędzi"
+msgid "Camera border scrolling\\Scrolling when the mouse touches right or left border"
+msgstr "Przewijanie kamery przy krawędzi\\Ekran jest przewijany gdy mysz dotknie prawej lub lewej jego krawędzi"
 
 msgid "Camera closer\\Moves the camera forward"
 msgstr "Kamera bliżej\\Przybliża kamerę"
@@ -407,8 +391,7 @@ msgid "Code battles"
 msgstr "Programobitwy"
 
 msgid "Code battles\\Program your robot to be the best of them all!"
-msgstr ""
-"Programobitwy\\Zaprogramuj swego robota by był najlepszy ze wszystkich!"
+msgstr "Programobitwy\\Zaprogramuj swego robota by był najlepszy ze wszystkich!"
 
 msgid "Colobot rules!"
 msgstr "Colobot rządzi!"
@@ -683,8 +666,7 @@ msgid "Help balloons\\Explain the function of the buttons"
 msgstr "Dymki pomocy\\Wyjaśnia funkcje przycisków"
 
 msgid "Highest\\Highest graphic quality (lowest frame rate)"
-msgstr ""
-"Najwyższa\\Maksymalna jakość grafiki (najniższa częstotliwość odświeżania)"
+msgstr "Najwyższa\\Maksymalna jakość grafiki (najniższa częstotliwość odświeżania)"
 
 msgid "Home"
 msgstr "Początek"
@@ -831,8 +813,7 @@ msgid "Loading terrain"
 msgstr "Wczytywanie terenu"
 
 msgid "Lowest\\Minimum graphic quality (highest frame rate)"
-msgstr ""
-"Najniższa\\Minimalna jakość grafiki (najwyższa częstotliwość odświeżania)"
+msgstr "Najniższa\\Minimalna jakość grafiki (najwyższa częstotliwość odświeżania)"
 
 msgid "Lunar Roving Vehicle"
 msgstr "Pojazd Księżycowy"
@@ -1033,8 +1014,7 @@ msgid "Organic matter"
 msgstr "Materia organiczna"
 
 msgid "Origin of last message\\Shows where the last message was sent from"
-msgstr ""
-"Miejsce nadania wiadomości\\Pokazuje skąd została wysłana ostatnia wiadomość"
+msgstr "Miejsce nadania wiadomości\\Pokazuje skąd została wysłana ostatnia wiadomość"
 
 msgid "Original game developed by:"
 msgstr "Twórcy oryginalnej gry:"
@@ -1118,8 +1098,7 @@ msgid "Practice bot"
 msgstr "Robot treningowy"
 
 msgid "Press \\key help; to read instructions on your SatCom"
-msgstr ""
-"Naciśnij klawisz \\key help; aby wyświetlić rozkazy na przekaźniku SatCom"
+msgstr "Naciśnij klawisz \\key help; aby wyświetlić rozkazy na przekaźniku SatCom"
 
 msgid "Previous"
 msgstr "Poprzedni"
@@ -1314,9 +1293,7 @@ msgid "Semicolon terminator missing"
 msgstr "Brak średnika na końcu wiersza"
 
 msgid "Shadow resolution\\Higher means better range and quality, but slower"
-msgstr ""
-"Rozdzielczość cieni\\Wyższa wartość oznacza wyższy zasięg i jakość, ale jest "
-"wolniejsza"
+msgstr "Rozdzielczość cieni\\Wyższa wartość oznacza wyższy zasięg i jakość, ale jest wolniejsza"
 
 msgid "Shield level"
 msgstr "Poziom osłony"
@@ -1411,11 +1388,8 @@ msgstr "Pająk śmiertelnie raniony"
 msgid "Stack overflow"
 msgstr "Przepełnienie stosu"
 
-msgid ""
-"Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)"
-msgstr ""
-"Standardowa akcja\\Standardowa akcja robota (podnieś/upuść, strzelaj, "
-"szukaj, itp.)"
+msgid "Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)"
+msgstr "Standardowa akcja\\Standardowa akcja robota (podnieś/upuść, strzelaj, szukaj, itp.)"
 
 msgid "Standard controls\\Standard key functions"
 msgstr "Standardowa kontrola\\Standardowe klawisze funkcyjne"
@@ -1477,8 +1451,7 @@ msgstr "Wyrażenie musi zwrócić wartość logiczną"
 msgid "The function returned no value "
 msgstr "Funkcja nie zwróciła żadnej wartości "
 
-msgid ""
-"The mission is not accomplished yet (press \\key help; for more details)"
+msgid "The mission is not accomplished yet (press \\key help; for more details)"
 msgstr "Misja nie jest wypełniona (naciśnij \\key help; aby uzyskać szczegóły)"
 
 msgid "The types of the two operands are incompatible "
@@ -1500,9 +1473,7 @@ msgid "This label does not exist"
 msgstr "Taka etykieta nie istnieje"
 
 msgid "This menu is for userlevels from mods, but you didn't install any"
-msgstr ""
-"To menu jest przeznaczone na poziomy użytkownika z modyfikacji, ale żadne "
-"nie są zainstalowane"
+msgstr "To menu jest przeznaczone na poziomy użytkownika z modyfikacji, ale żadne nie są zainstalowane"
 
 msgid "This object is not a member of a class"
 msgstr "Ten obiekt nie jest członkiem klasy"
@@ -1699,16 +1670,26 @@ msgstr "Nie możesz przenosić przedmiotów radioaktywnych"
 msgid "You can not carry an object under water"
 msgstr "Nie możesz przenosić przedmiotów pod wodą"
 
+#, c-format
+msgid "You cannot use \"%s\" in this exercise (used: %d)"
+msgstr "Nie możesz użyć \"%s\" w tym ćwiczeniu (użyto: %d)"
+
 msgid "You found a usable object"
 msgstr "Znaleziono użyteczny przedmiot"
 
 #, c-format
-msgid "You have to use \"%s\" at least %d times in this exercise (used: %d)"
-msgstr "Musisz użyć \"%s\" przynajmniej %d razy w tym ćwiczeniu (użyto: %d)"
+msgid "You have to use \"%1$s\" at least once in this exercise (used: %2$d)"
+msgid_plural "You have to use \"%1$s\" at least %3$d times in this exercise (used: %2$d)"
+msgstr[0] "Musisz użyć \"%1$s\" przynajmniej raz w tym ćwiczeniu (użyto: %2$d)"
+msgstr[1] "Musisz użyć \"%1$s\" przynajmniej %3$d razy w tym ćwiczeniu (użyto: %2$d)"
+msgstr[2] "Musisz użyć \"%1$s\" przynajmniej %3$d razy w tym ćwiczeniu (użyto: %2$d)"
 
 #, c-format
-msgid "You have to use \"%s\" at most %d times in this exercise (used: %d)"
-msgstr "Musisz użyć \"%s\" najwyżej %d razy w tym ćwiczeniu (użyto: %d)"
+msgid "You have to use \"%1$s\" at most once in this exercise (used: %2$d)"
+msgid_plural "You have to use \"%1$s\" at most %3$d times in this exercise (used: %2$d)"
+msgstr[0] "Możesz użyć \"%1$s\" najwyżej raz w tym ćwiczeniu (użyto: %2$d)"
+msgstr[1] "Możesz użyć \"%1$s\" najwyżej %3$d razy w tym ćwiczeniu (użyto: %2$d)"
+msgstr[2] "Możesz użyć \"%1$s\" najwyżej %3$d razy w tym ćwiczeniu (użyto: %2$d)"
 
 msgid "You must get on the spaceship to take off "
 msgstr "Musisz być na statku kosmicznym aby nim odlecieć"
@@ -1867,8 +1848,7 @@ msgstr ""
 #~ msgstr "Nieodpowiedni teren"
 
 #~ msgid "Key word help\\More detailed help about key words"
-#~ msgstr ""
-#~ "Pomoc dot. słów kluczowych\\Dokładniejsza pomoc na temat słów kluczowych"
+#~ msgstr "Pomoc dot. słów kluczowych\\Dokładniejsza pomoc na temat słów kluczowych"
 
 #~ msgid "Loading programs"
 #~ msgstr "Wczytywanie programów"
@@ -1886,8 +1866,7 @@ msgstr ""
 #~ msgstr "Wciąż za mało energii"
 
 #~ msgid "Num of decorative objects\\Number of purely ornamental objects"
-#~ msgstr ""
-#~ "Ilość elementów dekoracyjnych \\Ilość elementów czysto dekoracyjnych"
+#~ msgstr "Ilość elementów dekoracyjnych \\Ilość elementów czysto dekoracyjnych"
 
 #~ msgid "Object not found"
 #~ msgstr "Obiekt nieznany"
@@ -1913,12 +1892,8 @@ msgstr ""
 #~ msgid "Textures\\Quality of textures "
 #~ msgstr "Tekstury\\Jakość tekstur "
 
-#~ msgid ""
-#~ "The list is only available if a \\l;radar station\\u object\\radar; is "
-#~ "working.\n"
-#~ msgstr ""
-#~ "Lista jest dostępna jedynie gdy działa \\l;stacja radarowa\\u object"
-#~ "\\radar;.\n"
+#~ msgid "The list is only available if a \\l;radar station\\u object\\radar; is working.\n"
+#~ msgstr "Lista jest dostępna jedynie gdy działa \\l;stacja radarowa\\u object\\radar;.\n"
 
 #~ msgid "Use a joystick\\Joystick or keyboard"
 #~ msgstr "Używaj joysticka\\Joystick lub klawiatura"
diff --git a/po/ru.po b/po/ru.po
index 25bb06a..31d91d6 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -95,8 +95,7 @@ msgstr "Выход\\Прервать текущую миссию"
 msgid "Access beyond array limit"
 msgstr "Доступ к массиву за предел"
 
-msgid ""
-"Access to solution\\Shows the solution (detailed instructions for missions)"
+msgid "Access to solution\\Shows the solution (detailed instructions for missions)"
 msgstr "Доступ к решению\\Показывает решение (подробные инструкции для миссий)"
 
 msgid "Access to solutions\\Show program \"4: Solution\" in the exercises"
@@ -323,9 +322,7 @@ msgid "Camera back\\Moves the camera backward"
 msgstr "Отдалить камеру\\Перемещение камеры назад"
 
 #, fuzzy
-msgid ""
-"Camera border scrolling\\Scrolling when the mouse touches right or left "
-"border"
+msgid "Camera border scrolling\\Scrolling when the mouse touches right or left border"
 msgstr "Прокрутка\\Прокрутка, когда указатель мыши касается граней экрана"
 
 msgid "Camera closer\\Moves the camera forward"
@@ -1027,9 +1024,7 @@ msgid "Organic matter"
 msgstr "Органическое вещество"
 
 msgid "Origin of last message\\Shows where the last message was sent from"
-msgstr ""
-"Источник сообщения\\Показывает место, откуда было отправлено последнеее "
-"сообщение"
+msgstr "Источник сообщения\\Показывает место, откуда было отправлено последнеее сообщение"
 
 msgid "Original game developed by:"
 msgstr "Оригинальная игра была разработана:"
@@ -1156,8 +1151,7 @@ msgid "Programming help  (\\key prog;)"
 msgstr "Помощь в программировании (\\key prog;)"
 
 msgid "Programming help\\Gives more detailed help with programming"
-msgstr ""
-"Помощь в программировании\\Дает более детальную помощь в программировании"
+msgstr "Помощь в программировании\\Дает более детальную помощь в программировании"
 
 msgid "Programs dispatched by Houston"
 msgstr "Программы переданные с Хьюстона"
@@ -1408,11 +1402,8 @@ msgstr "Паук смертельно ранен"
 msgid "Stack overflow"
 msgstr "Переполнение стека"
 
-msgid ""
-"Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)"
-msgstr ""
-"Стандартное действие\\Стандартное действие бота (брать/взять, стрелять, "
-"искать и т.д.)"
+msgid "Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)"
+msgstr "Стандартное действие\\Стандартное действие бота (брать/взять, стрелять, искать и т.д.)"
 
 msgid "Standard controls\\Standard key functions"
 msgstr "Стандартное управление\\Сделать управление по умолчанию"
@@ -1475,10 +1466,8 @@ msgstr "Выражение должно возвращать логическо
 msgid "The function returned no value "
 msgstr "Функция не возвратила значения"
 
-msgid ""
-"The mission is not accomplished yet (press \\key help; for more details)"
-msgstr ""
-"Миссия еще не выполнена (нажмите \\key help; для более подробной информации)"
+msgid "The mission is not accomplished yet (press \\key help; for more details)"
+msgstr "Миссия еще не выполнена (нажмите \\key help; для более подробной информации)"
 
 msgid "The types of the two operands are incompatible "
 msgstr "Типы операндов несовместимы"
@@ -1696,16 +1685,24 @@ msgstr "Вы не можете нести радиоактивные объек
 msgid "You can not carry an object under water"
 msgstr "Вы не можете нести объекты под водой"
 
+#, fuzzy, c-format
+msgid "You cannot use \"%s\" in this exercise (used: %d)"
+msgstr "Не используй в этом упражнении"
+
 msgid "You found a usable object"
 msgstr "Вы нашли рабочий объект"
 
-#, c-format
-msgid "You have to use \"%s\" at least %d times in this exercise (used: %d)"
-msgstr ""
+#, fuzzy, c-format
+msgid "You have to use \"%1$s\" at least once in this exercise (used: %2$d)"
+msgid_plural "You have to use \"%1$s\" at least %3$d times in this exercise (used: %2$d)"
+msgstr[0] "Не используй в этом упражнении"
+msgstr[1] "Не используй в этом упражнении"
 
-#, c-format
-msgid "You have to use \"%s\" at most %d times in this exercise (used: %d)"
-msgstr ""
+#, fuzzy, c-format
+msgid "You have to use \"%1$s\" at most once in this exercise (used: %2$d)"
+msgid_plural "You have to use \"%1$s\" at most %3$d times in this exercise (used: %2$d)"
+msgstr[0] "Не используй в этом упражнении"
+msgstr[1] "Не используй в этом упражнении"
 
 msgid "You must get on the spaceship to take off "
 msgstr "Вы должны быть на борту корабля, чтобы взлететь"
@@ -1861,9 +1858,6 @@ msgstr ""
 #~ msgid "Developed by :"
 #~ msgstr "Разработка :"
 
-#~ msgid "Do not use in this exercise"
-#~ msgstr "Не используй в этом упражнении"
-
 #, fuzzy
 #~ msgid "Do you want to quit Colobot: Gold Edition?"
 #~ msgstr "Вы хотите закрыть COLOBOT?"
@@ -1922,11 +1916,8 @@ msgstr ""
 #~ msgid "Textures\\Quality of textures "
 #~ msgstr "Текстуры\\Качество текстур "
 
-#~ msgid ""
-#~ "The list is only available if a \\l;radar station\\u object\\radar; is "
-#~ "working.\n"
-#~ msgstr ""
-#~ "Список доступен только если \\l;radar station\\u object\\radar; работают\n"
+#~ msgid "The list is only available if a \\l;radar station\\u object\\radar; is working.\n"
+#~ msgstr "Список доступен только если \\l;radar station\\u object\\radar; работают\n"
 
 #~ msgid "Use a joystick\\Joystick or keyboard"
 #~ msgstr "Использовать джойстик\\Джойстик или клавиатура"
diff --git a/src/common/restext.cpp b/src/common/restext.cpp
index 966f993..2016464 100644
--- a/src/common/restext.cpp
+++ b/src/common/restext.cpp
@@ -632,8 +632,6 @@ void InitializeRestext()
     stringsErr[ERR_DELETEMOBILE]    = TR("Bot destroyed");
     stringsErr[ERR_DELETEBUILDING]  = TR("Building destroyed");
     stringsErr[ERR_ENEMY_OBJECT]    = TR("Unable to control enemy objects");
-    stringsErr[ERR_OBLIGATORYTOKEN] = TR("You have to use \"%s\" at least %d times in this exercise (used: %d)");
-    stringsErr[ERR_PROHIBITEDTOKEN] = TR("You have to use \"%s\" at most %d times in this exercise (used: %d)");
     stringsErr[ERR_WRONG_BOT]       = TR("Inappropriate bot");
 
     stringsErr[INFO_BUILD]          = TR("Building completed");
diff --git a/src/script/script.cpp b/src/script/script.cpp
index 4f7bf32..ff4c04d 100644
--- a/src/script/script.cpp
+++ b/src/script/script.cpp
@@ -44,6 +44,7 @@
 #include "ui/controls/interface.h"
 #include "ui/controls/list.h"
 
+#include <libintl.h>
 
 const int CBOT_IPF = 100;       // CBOT: default number of instructions / frame
 
@@ -774,13 +775,28 @@ void CScript::GetError(std::string& error)
     }
     else
     {
-        if ( m_error == static_cast<CBot::CBotError>(ERR_OBLIGATORYTOKEN) || m_error == static_cast<CBot::CBotError>(ERR_PROHIBITEDTOKEN) )
+        if (m_error == static_cast<CBot::CBotError>(ERR_OBLIGATORYTOKEN))
         {
-            std::string s;
-            GetResource(RES_ERR, m_error, s);
-            error = StrUtils::Format(s.c_str(), m_token.c_str(), m_tokenAllowed, m_tokenUsed);
+            error = StrUtils::Format(ngettext(
+                "You have to use \"%1$s\" at least once in this exercise (used: %2$d)",
+                "You have to use \"%1$s\" at least %3$d times in this exercise (used: %2$d)",
+                m_tokenAllowed), m_token.c_str(), m_tokenUsed, m_tokenAllowed);
+        }
+        else if (m_error == static_cast<CBot::CBotError>(ERR_PROHIBITEDTOKEN))
+        {
+            if (m_tokenAllowed == 0)
+            {
+                error = StrUtils::Format(gettext("You cannot use \"%s\" in this exercise (used: %d)"), m_token.c_str(), m_tokenUsed);
+            }
+            else
+            {
+                error = StrUtils::Format(ngettext(
+                    "You have to use \"%1$s\" at most once in this exercise (used: %2$d)",
+                    "You have to use \"%1$s\" at most %3$d times in this exercise (used: %2$d)",
+                    m_tokenAllowed), m_token.c_str(), m_tokenUsed, m_tokenAllowed);
+            }
         }
-        else if ( m_error < 1000 )
+        else if (m_error < 1000)
         {
             GetResource(RES_ERR, m_error, error);
         }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git



More information about the Pkg-games-commits mailing list