View Issue Details

IDProjectCategoryView StatusLast Update
0008666ScribusTranslationpublic2016-11-21 21:12
Reporterspencerjackson Assigned Tocbradney  
PrioritynormalSeverityminorReproducibilityalways
Status assignedResolutionopen 
OSArchLinux 
Product Version1.5.0svn 
Summary0008666: [PATCH] Docstrings in Python Scripter plugin are not translated
DescriptionIn the Python Scripter plugin, docstrings are marked with the QT_TR_NOOP() macro. However, the QT translation functions are not directly applied against the strings, but rather are encapsulated inside of a function call to the plugin's own definition of tr()(which contains the call to QObject's tr()). I believe because of this degree of remove, QT is unable to translate these docstrings, even though translations have been defined. Further, some docstrings, those in objimageexport.h, objpdffile.h, and objprinter.h, are neither marked for translation, nor processed.
Steps To Reproduce1. Open Scribus in any language other than English
2. Open the Python Console(Script->Show Console)
3. Invoke help(moveObject)

The returned help will be in English.
Additional InformationTo fix this in the attached patch, I did several things. I redefined the PyDoc_STRVAR, so that docstrings were stored in static QStrings. Next, I replaced the QT_TR_NOOP() macro with calls to QCoreApplication::instance()->translate().
 
To translate the docstrings in the obj*.h files, I added translate() functions where appropriate. Then I removed the definition of the plugin's internal tr() function from scriptplugin.cpp, renamed it to formatDocstring(), for consistency as it no longer does any translating, and moved it to its own file. This way, scriptplugin.cpp, and the obj*.cpp files may #include it, and convert the docstrings into char*s. formatDocstring() has been changed slightly, in that now it accepts a reference to a QString, as opposed to attempting to create one itself.
TagsNo tags attached.
PatchYes

Relationships

related to 0002371 acknowledged Split GUI and Scripter translation files 

Activities

2009-12-30 20:30

 

0001-Fix-Scripter-docstring-translations.patch (152,016 bytes)   
From bbf4b1a63ca912804e6202c83dd5c122fc62b508 Mon Sep 17 00:00:00 2001
From: Spencer Jackson <spencerandrewjackson@gmail.com>
Date: Mon, 28 Dec 2009 14:09:40 -0500
Subject: [PATCH] Fix Scripter docstring translations

Modified PyDoc macros to produce static QStrings

Whereever translation function calls were missing, they were
added.

NOOP QT translation macros were replaced with actual translation
functions.

The plugin's interal tr() function was renamed to
formatDocstring(), as it no longer handles translation routines.
It was moved to its own file, so it could be called in the
obj*.cpp files.
---
 .../scribus/plugins/scriptplugin/CMakeLists.txt    |    1 +
 Scribus/scribus/plugins/scriptplugin/cmdcolor.h    |   18 +-
 Scribus/scribus/plugins/scriptplugin/cmddialog.h   |   10 +-
 Scribus/scribus/plugins/scriptplugin/cmddoc.h      |   40 +-
 Scribus/scribus/plugins/scriptplugin/cmdgetprop.h  |   38 +-
 .../scribus/plugins/scriptplugin/cmdgetsetprop.h   |   12 +-
 Scribus/scribus/plugins/scriptplugin/cmdmani.h     |   36 +-
 Scribus/scribus/plugins/scriptplugin/cmdmisc.h     |   54 ++--
 Scribus/scribus/plugins/scriptplugin/cmdobj.h      |   30 +-
 Scribus/scribus/plugins/scriptplugin/cmdpage.h     |   36 +-
 Scribus/scribus/plugins/scriptplugin/cmdsetprop.h  |   32 +-
 Scribus/scribus/plugins/scriptplugin/cmdstyle.h    |    4 +-
 Scribus/scribus/plugins/scriptplugin/cmdtext.h     |   70 ++--
 Scribus/scribus/plugins/scriptplugin/cmdvar.h      |   12 +
 .../plugins/scriptplugin/formatdocstring.cpp       |   38 ++
 .../scribus/plugins/scriptplugin/formatdocstring.h |    3 +
 .../plugins/scriptplugin/objimageexport.cpp        |   19 +-
 .../scribus/plugins/scriptplugin/objimageexport.h  |   21 +-
 .../scribus/plugins/scriptplugin/objpdffile.cpp    |    3 +-
 Scribus/scribus/plugins/scriptplugin/objpdffile.h  |    5 +-
 .../scribus/plugins/scriptplugin/objprinter.cpp    |    3 +-
 Scribus/scribus/plugins/scriptplugin/objprinter.h  |    5 +-
 .../scribus/plugins/scriptplugin/scriptplugin.cpp  |  446 +++++++++-----------
 23 files changed, 481 insertions(+), 455 deletions(-)
 create mode 100644 Scribus/scribus/plugins/scriptplugin/formatdocstring.cpp
 create mode 100644 Scribus/scribus/plugins/scriptplugin/formatdocstring.h

diff --git a/Scribus/scribus/plugins/scriptplugin/CMakeLists.txt b/Scribus/scribus/plugins/scriptplugin/CMakeLists.txt
index 6ed7b4d..1687fb3 100644
--- a/Scribus/scribus/plugins/scriptplugin/CMakeLists.txt
+++ b/Scribus/scribus/plugins/scriptplugin/CMakeLists.txt
@@ -44,6 +44,7 @@ SET(SCRIPTER_PLUGIN_SOURCES
   scripterprefsgui.cpp
   scriptplugin.cpp
   svgimport.cpp
+  formatdocstring.cpp
 )
 
 SET(SCRIBUS_SCRIPTER_PLUGIN "scriptplugin")
diff --git a/Scribus/scribus/plugins/scriptplugin/cmdcolor.h b/Scribus/scribus/plugins/scriptplugin/cmdcolor.h
index bf3f551..540f944 100644
--- a/Scribus/scribus/plugins/scriptplugin/cmdcolor.h
+++ b/Scribus/scribus/plugins/scriptplugin/cmdcolor.h
@@ -14,7 +14,7 @@ for which a new license (GPL+exception) is in place.
 
 /*! docstring */
 PyDoc_STRVAR(scribus_colornames__doc__,
-QT_TR_NOOP("getColorNames() -> list\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getColorNames() -> list\n\
 \n\
 Returns a list containing the names of all defined colors in the document.\n\
 If no document is open, returns a list of the default document colors.\n\
@@ -24,7 +24,7 @@ PyObject *scribus_colornames(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getcolor__doc__,
-QT_TR_NOOP("getColor(\"name\") -> tuple\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getColor(\"name\") -> tuple\n\
 \n\
 Returns a tuple (C, M, Y, K) containing the four color components of the\n\
 color \"name\" from the current document. If no document is open, returns\n\
@@ -38,7 +38,7 @@ PyObject *scribus_getcolor(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getcolorasrgb__doc__,
-QT_TR_NOOP("getColorAsRGB(\"name\") -> tuple\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getColorAsRGB(\"name\") -> tuple\n\
 \n\
 Returns a tuple (R,G,B) containing the three color components of the\n\
 color \"name\" from the current document, converted to the RGB color\n\
@@ -53,7 +53,7 @@ PyObject *scribus_getcolorasrgb(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setcolor__doc__,
-QT_TR_NOOP("changeColor(\"name\", c, m, y, k)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "changeColor(\"name\", c, m, y, k)\n\
 \n\
 Changes the color \"name\" to the specified CMYK value. The color value is\n\
 defined via four components c = Cyan, m = Magenta, y = Yellow and k = Black.\n\
@@ -67,7 +67,7 @@ PyObject *scribus_setcolor(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_newcolor__doc__,
-QT_TR_NOOP("defineColor(\"name\", c, m, y, k)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "defineColor(\"name\", c, m, y, k)\n\
 \n\
 Defines a new color \"name\". The color Value is defined via four components:\n\
 c = Cyan, m = Magenta, y = Yellow and k = Black. Color components should be in\n\
@@ -80,7 +80,7 @@ PyObject *scribus_newcolor(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_delcolor__doc__,
-QT_TR_NOOP("deleteColor(\"name\", \"replace\")\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "deleteColor(\"name\", \"replace\")\n\
 \n\
 Deletes the color \"name\". Every occurence of that color is replaced by the\n\
 color \"replace\". If not specified, \"replace\" defaults to the color\n\
@@ -97,7 +97,7 @@ PyObject *scribus_delcolor(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_replcolor__doc__,
-QT_TR_NOOP("replaceColor(\"name\", \"replace\")\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "replaceColor(\"name\", \"replace\")\n\
 \n\
 Every occurence of the color \"name\" is replaced by the color \"replace\".\n\
 \n\
@@ -110,7 +110,7 @@ PyObject *scribus_replcolor(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_isspotcolor__doc__,
-QT_TR_NOOP("isSpotColor(\"name\") -> bool\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "isSpotColor(\"name\") -> bool\n\
 \n\
 Returns True if the color \"name\" is a spot color.\n\
 See also setSpotColor()\n\
@@ -125,7 +125,7 @@ PyObject *scribus_isspotcolor(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setspotcolor__doc__,
-QT_TR_NOOP("setSpotColor(\"name\", spot)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setSpotColor(\"name\", spot)\n\
 \n\
 Set the color \"name\" as a spot color if spot parameter is True.\n\
 See also isSpotColor()\n\
diff --git a/Scribus/scribus/plugins/scriptplugin/cmddialog.h b/Scribus/scribus/plugins/scriptplugin/cmddialog.h
index 52f8ef3..aa26f01 100644
--- a/Scribus/scribus/plugins/scriptplugin/cmddialog.h
+++ b/Scribus/scribus/plugins/scriptplugin/cmddialog.h
@@ -14,7 +14,7 @@ for which a new license (GPL+exception) is in place.
 
 /*! docstring */
 PyDoc_STRVAR(scribus_newdocdia__doc__,
-QT_TR_NOOP("newDocDialog() -> bool\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "newDocDialog() -> bool\n\
 \n\
 Displays the \"New Document\" dialog box. Creates a new document if the user\n\
 accepts the settings. Does not create a document if the user presses cancel.\n\
@@ -25,7 +25,7 @@ PyObject *scribus_newdocdia(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_filedia__doc__,
-QT_TR_NOOP("fileDialog(\"caption\", [\"filter\", \"defaultname\", haspreview, issave, isdir]) -> string with filename\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "fileDialog(\"caption\", [\"filter\", \"defaultname\", haspreview, issave, isdir]) -> string with filename\n\
 \n\
 Shows a File Open dialog box with the caption \"caption\". Files are filtered\n\
 with the filter string \"filter\". A default filename or file path can also\n\
@@ -53,7 +53,7 @@ PyObject *scribus_mess(PyObject *self, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_messdia__doc__,
-QT_TR_NOOP("messageBox(\"caption\", \"message\",\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "messageBox(\"caption\", \"message\",\n\
     icon=ICON_NONE, button1=BUTTON_OK|BUTTONOPT_DEFAULT,\n\
     button2=BUTTON_NONE, button3=BUTTON_NONE) -> integer\n\
 \n\
@@ -92,7 +92,7 @@ PyObject *scribus_messdia(PyObject * /*self*/, PyObject* args, PyObject* kw);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_valdialog__doc__,
-QT_TR_NOOP("valueDialog(caption, message [,defaultvalue]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "valueDialog(caption, message [,defaultvalue]) -> string\n\
 \n\
 Shows the common 'Ask for string' dialog and returns its value as a string\n\
 Parameters: window title, text in the window and optional 'default' value.\n\
@@ -104,7 +104,7 @@ PyObject *scribus_valdialog(PyObject * /*self*/, PyObject* args);
 
 
 PyDoc_STRVAR(scribus_newstyledialog__doc__,
-QT_TR_NOOP("newStyleDialog() -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "newStyleDialog() -> string\n\
 \n\
 Shows 'Create new paragraph style' dialog. Function returns real\n\
 style name or None when user cancels the dialog.\n\
diff --git a/Scribus/scribus/plugins/scriptplugin/cmddoc.h b/Scribus/scribus/plugins/scriptplugin/cmddoc.h
index c64793e..b244809 100644
--- a/Scribus/scribus/plugins/scriptplugin/cmddoc.h
+++ b/Scribus/scribus/plugins/scriptplugin/cmddoc.h
@@ -13,7 +13,7 @@ for which a new license (GPL+exception) is in place.
 /** Document related Commands */
 
 PyDoc_STRVAR(scribus_newdocument__doc__,
-QT_TR_NOOP("newDocument(size, margins, orientation, firstPageNumber,\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "newDocument(size, margins, orientation, firstPageNumber,\n\
                         unit, pagesType, firstPageOrder, numPages) -> bool\n\
 \n\
 Creates a new document and returns true if successful. The parameters have the\n\
@@ -59,7 +59,7 @@ PyObject *scribus_newdocument(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_newdoc__doc__,
-QT_TR_NOOP("newDoc(size, margins, orientation, firstPageNumber,\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "newDoc(size, margins, orientation, firstPageNumber,\n\
                    unit, facingPages, firstSideLeft) -> bool\n\
 \n\
 WARNING: Obsolete procedure! Use newDocument instead.\n\
@@ -100,7 +100,7 @@ PyObject *scribus_newdoc(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_closedoc__doc__,
-QT_TR_NOOP("closeDoc()\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "closeDoc()\n\
 \n\
 Closes the current document without prompting to save.\n\
 \n\
@@ -111,7 +111,7 @@ PyObject *scribus_closedoc(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_havedoc__doc__,
-QT_TR_NOOP("haveDoc() -> bool\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "haveDoc() -> bool\n\
 \n\
 Returns true if there is a document open.\n\
 "));
@@ -120,7 +120,7 @@ PyObject *scribus_havedoc(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_opendoc__doc__,
-QT_TR_NOOP("openDoc(\"name\")\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "openDoc(\"name\")\n\
 \n\
 Opens the document \"name\".\n\
 \n\
@@ -131,7 +131,7 @@ PyObject *scribus_opendoc(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_savedoc__doc__,
-QT_TR_NOOP("saveDoc()\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "saveDoc()\n\
 \n\
 Saves the current document with its current name, returns true if successful.\n\
 If the document has not already been saved, this may bring up an interactive\n\
@@ -143,7 +143,7 @@ PyObject *scribus_savedoc(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getdocname__doc__,
-QT_TR_NOOP("getDocName() -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getDocName() -> string\n\
 \n\
 Returns the name the document was saved under.\n\
 If the document was not saved before the name is empty.\n\
@@ -153,7 +153,7 @@ PyObject *scribus_getdocname(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_savedocas__doc__,
-QT_TR_NOOP("saveDocAs(\"name\")\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "saveDocAs(\"name\")\n\
 \n\
 Saves the current document under the new name \"name\" (which may be a full or\n\
 relative path).\n\
@@ -165,7 +165,7 @@ PyObject *scribus_savedocas(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setinfo__doc__,
-QT_TR_NOOP("setInfo(\"author\", \"info\", \"description\") -> bool\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setInfo(\"author\", \"info\", \"description\") -> bool\n\
 \n\
 Sets the document information. \"Author\", \"Info\", \"Description\" are\n\
 strings.\n\
@@ -175,7 +175,7 @@ PyObject *scribus_setinfo(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setmargins__doc__,
-QT_TR_NOOP("setMargins(lr, rr, tr, br)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setMargins(lr, rr, tr, br)\n\
 \n\
 Sets the margins of the document, Left(lr), Right(rr), Top(tr) and Bottom(br)\n\
 margins are given in the measurement units of the document - see UNIT_<type>\n\
@@ -186,7 +186,7 @@ PyObject *scribus_setmargins(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setbaseline__doc__,
-QT_TR_NOOP("setBaseLine(grid, offset)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setBaseLine(grid, offset)\n\
 \n\
 Sets the base line settings of the document, grid spacing(grid), grid offset(offset).\n\
 Values are given in the measurement units of the document - see UNIT_<type>\n\
@@ -197,7 +197,7 @@ PyObject *scribus_setbaseline(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setunit__doc__,
-QT_TR_NOOP("setUnit(type)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setUnit(type)\n\
 \n\
 Changes the measurement unit of the document. Possible values for \"unit\" are\n\
 defined as constants UNIT_<type>.\n\
@@ -209,7 +209,7 @@ PyObject *scribus_setunit(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getunit__doc__,
-QT_TR_NOOP("getUnit() -> integer (Scribus unit constant)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getUnit() -> integer (Scribus unit constant)\n\
 \n\
 Returns the measurement units of the document. The returned value will be one\n\
 of the UNIT_* constants:\n\
@@ -220,7 +220,7 @@ PyObject *scribus_getunit(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_loadstylesfromfile__doc__,
-QT_TR_NOOP("loadStylesFromFile(\"filename\")\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "loadStylesFromFile(\"filename\")\n\
 \n\
 Loads paragraph styles from the Scribus document at \"filename\" into the\n\
 current document.\n\
@@ -230,7 +230,7 @@ PyObject *scribus_loadstylesfromfile(PyObject * /*self*/, PyObject *args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setdoctype__doc__,
-QT_TR_NOOP("setDocType(facingPages, firstPageLeft)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setDocType(facingPages, firstPageLeft)\n\
 \n\
 Sets the document type. To get facing pages set the first parameter to\n\
 FACINGPAGES, to switch facingPages off use NOFACINGPAGES instead.  If you want\n\
@@ -240,7 +240,7 @@ a right page use FIRSTPAGERIGHT.\n\
 PyObject *scribus_setdoctype(PyObject * /*self*/, PyObject* args);
 
 PyDoc_STRVAR(scribus_closemasterpage__doc__,
-QT_TR_NOOP("closeMasterPage()\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "closeMasterPage()\n\
 \n\
 Closes the currently active master page, if any, and returns editing\n\
 to normal. Begin editing with editMasterPage().\n\
@@ -248,14 +248,14 @@ to normal. Begin editing with editMasterPage().\n\
 PyObject* scribus_closemasterpage(PyObject* self);
 
 PyDoc_STRVAR(scribus_masterpagenames__doc__,
-QT_TR_NOOP("masterPageNames()\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "masterPageNames()\n\
 \n\
 Returns a list of the names of all master pages in the document.\n\
 "));
 PyObject* scribus_masterpagenames(PyObject* self);
 
 PyDoc_STRVAR(scribus_editmasterpage__doc__,
-QT_TR_NOOP("editMasterPage(pageName)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "editMasterPage(pageName)\n\
 \n\
 Enables master page editing and opens the named master page\n\
 for editing. Finish editing with closeMasterPage().\n\
@@ -263,7 +263,7 @@ for editing. Finish editing with closeMasterPage().\n\
 PyObject* scribus_editmasterpage(PyObject* self, PyObject* args);
 
 PyDoc_STRVAR(scribus_createmasterpage__doc__,
-QT_TR_NOOP("createMasterPage(pageName)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "createMasterPage(pageName)\n\
 \n\
 Creates a new master page named pageName and opens it for\n\
 editing.\n\
@@ -271,7 +271,7 @@ editing.\n\
 PyObject* scribus_createmasterpage(PyObject* self, PyObject* args);
 
 PyDoc_STRVAR(scribus_deletemasterpage__doc__,
-QT_TR_NOOP("deleteMasterPage(pageName)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "deleteMasterPage(pageName)\n\
 \n\
 Delete the named master page.\n\
 "));
diff --git a/Scribus/scribus/plugins/scriptplugin/cmdgetprop.h b/Scribus/scribus/plugins/scriptplugin/cmdgetprop.h
index 57ce8a0..7f5eafe 100644
--- a/Scribus/scribus/plugins/scriptplugin/cmdgetprop.h
+++ b/Scribus/scribus/plugins/scriptplugin/cmdgetprop.h
@@ -14,7 +14,7 @@ for which a new license (GPL+exception) is in place.
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getfillcolor__doc__,
-QT_TR_NOOP("getFillColor([\"name\"]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getFillColor([\"name\"]) -> string\n\
 \n\
 Returns the name of the fill color of the object \"name\".\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -24,7 +24,7 @@ PyObject *scribus_getfillcolor(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getfilltrans__doc__,
-QT_TR_NOOP("getFillTransparency([\"name\"]) -> float\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getFillTransparency([\"name\"]) -> float\n\
 \n\
 Returns the fill transparency of the object \"name\". If \"name\"\n\
 is not given the currently selected Item is used.\n\
@@ -34,7 +34,7 @@ PyObject *scribus_getfilltrans(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getfillblend__doc__,
-QT_TR_NOOP("getFillBlendmode([\"name\"]) -> integer\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getFillBlendmode([\"name\"]) -> integer\n\
 \n\
 Returns the fill blendmode of the object \"name\". If \"name\"\n\
 is not given the currently selected Item is used.\n\
@@ -44,7 +44,7 @@ PyObject *scribus_getfillblend(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getlinecolor__doc__,
-QT_TR_NOOP("getLineColor([\"name\"]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getLineColor([\"name\"]) -> string\n\
 \n\
 Returns the name of the line color of the object \"name\".\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -54,7 +54,7 @@ PyObject *scribus_getlinecolor(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getlinetrans__doc__,
-QT_TR_NOOP("getLineTransparency([\"name\"]) -> float\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getLineTransparency([\"name\"]) -> float\n\
 \n\
 Returns the line transparency of the object \"name\". If \"name\"\n\
 is not given the currently selected Item is used.\n\
@@ -64,7 +64,7 @@ PyObject *scribus_getlinetrans(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getlineblend__doc__,
-QT_TR_NOOP("getLineBlendmode([\"name\"]) -> integer\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getLineBlendmode([\"name\"]) -> integer\n\
 \n\
 Returns the line blendmode of the object \"name\". If \"name\"\n\
 is not given the currently selected Item is used.\n\
@@ -74,7 +74,7 @@ PyObject *scribus_getlineblend(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getlinewidth__doc__,
-QT_TR_NOOP("getLineWidth([\"name\"]) -> integer\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getLineWidth([\"name\"]) -> integer\n\
 \n\
 Returns the line width of the object \"name\". If \"name\"\n\
 is not given the currently selected Item is used.\n\
@@ -84,7 +84,7 @@ PyObject *scribus_getlinewidth(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getlineshade__doc__,
-QT_TR_NOOP("getLineShade([\"name\"]) -> integer\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getLineShade([\"name\"]) -> integer\n\
 \n\
 Returns the shading value of the line color of the object \"name\".\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -94,7 +94,7 @@ PyObject *scribus_getlineshade(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getlinejoin__doc__,
-QT_TR_NOOP("getLineJoin([\"name\"]) -> integer (see constants)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getLineJoin([\"name\"]) -> integer (see constants)\n\
 \n\
 Returns the line join style of the object \"name\". If \"name\" is not given\n\
 the currently selected item is used.  The join types are:\n\
@@ -105,7 +105,7 @@ PyObject *scribus_getlinejoin(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getlineend__doc__,
-QT_TR_NOOP("getLineEnd([\"name\"]) -> integer (see constants)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getLineEnd([\"name\"]) -> integer (see constants)\n\
 \n\
 Returns the line cap style of the object \"name\". If \"name\" is not given the\n\
 currently selected item is used. The cap types are:\n\
@@ -116,7 +116,7 @@ PyObject *scribus_getlineend(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getlinestyle__doc__,
-QT_TR_NOOP("getLineStyle([\"name\"]) -> integer (see constants)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getLineStyle([\"name\"]) -> integer (see constants)\n\
 \n\
 Returns the line style of the object \"name\". If \"name\" is not given the\n\
 currently selected item is used. Line style constants are:\n\
@@ -127,7 +127,7 @@ PyObject *scribus_getlinestyle(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getfillshade__doc__,
-QT_TR_NOOP("getFillShade([\"name\"]) -> integer\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getFillShade([\"name\"]) -> integer\n\
 \n\
 Returns the shading value of the fill color of the object \"name\".\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -137,7 +137,7 @@ PyObject *scribus_getfillshade(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getcornerrad__doc__,
-QT_TR_NOOP("getCornerRadius([\"name\"]) -> integer\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getCornerRadius([\"name\"]) -> integer\n\
 \n\
 Returns the corner radius of the object \"name\". The radius is\n\
 expressed in points. If \"name\" is not given the currently\n\
@@ -148,7 +148,7 @@ PyObject *scribus_getcornerrad(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getimgscale__doc__,
-QT_TR_NOOP("getImageScale([\"name\"]) -> (x,y)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getImageScale([\"name\"]) -> (x,y)\n\
 \n\
 Returns a (x, y) tuple containing the scaling values of the image frame\n\
 \"name\".  If \"name\" is not given the currently selected item is used.\n\
@@ -158,7 +158,7 @@ PyObject *scribus_getimgscale(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getimgname__doc__,
-QT_TR_NOOP("getImageName([\"name\"]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getImageName([\"name\"]) -> string\n\
 \n\
 Returns the filename for the image in the image frame. If \"name\" is not\n\
 given the currently selected item is used.\n\
@@ -168,7 +168,7 @@ PyObject *scribus_getimgname(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getposi__doc__,
-QT_TR_NOOP("getPosition([\"name\"]) -> (x,y)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getPosition([\"name\"]) -> (x,y)\n\
 \n\
 Returns a (x, y) tuple with the position of the object \"name\".\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -180,7 +180,7 @@ PyObject *scribus_getposi(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getsize__doc__,
-QT_TR_NOOP("getSize([\"name\"]) -> (width,height)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getSize([\"name\"]) -> (width,height)\n\
 \n\
 Returns a (width, height) tuple with the size of the object \"name\".\n\
 If \"name\" is not given the currently selected item is used. The size is\n\
@@ -192,7 +192,7 @@ PyObject *scribus_getsize(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getrotation__doc__,
-QT_TR_NOOP("getRotation([\"name\"]) -> integer\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getRotation([\"name\"]) -> integer\n\
 \n\
 Returns the rotation of the object \"name\". The value is expressed in degrees,\n\
 and clockwise is positive. If \"name\" is not given the currently selected item\n\
@@ -203,7 +203,7 @@ PyObject *scribus_getrotation(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getallobj__doc__,
-QT_TR_NOOP("getAllObjects() -> list\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getAllObjects() -> list\n\
 \n\
 Returns a list containing the names of all objects on the current page.\n\
 "));
diff --git a/Scribus/scribus/plugins/scriptplugin/cmdgetsetprop.h b/Scribus/scribus/plugins/scriptplugin/cmdgetsetprop.h
index 7a2e508..2c1dd0e 100644
--- a/Scribus/scribus/plugins/scriptplugin/cmdgetsetprop.h
+++ b/Scribus/scribus/plugins/scriptplugin/cmdgetsetprop.h
@@ -74,7 +74,7 @@ const char* getpropertytype(QObject* obj, const char* propname, bool includesupe
  * @sa getpropertytype(), scribus_getproperty(), scribus_setproperty()
  */
 PyDoc_STRVAR(scribus_propertyctype__doc__,
-QT_TR_NOOP("getPropertyCType(object, property, includesuper=True)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getPropertyCType(object, property, includesuper=True)\n\
 \n\
 Returns the name of the C type of `property' of `object'. See getProperty()\n\
 for details of arguments.\n\
@@ -93,7 +93,7 @@ PyObject* scribus_propertyctype(PyObject* /*self*/, PyObject* args, PyObject* kw
  *     scribus_setproperty()
  */
 PyDoc_STRVAR(scribus_getpropertynames__doc__,
-QT_TR_NOOP("getPropertyNames(object, includesuper=True)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getPropertyNames(object, includesuper=True)\n\
 \n\
 Return a list of property names supported by `object'.\n\
 If `includesuper' is true, return properties supported\n\
@@ -120,7 +120,7 @@ PyObject* scribus_getpropertynames(PyObject* self, PyObject* args, PyObject* kw)
  *     scribus_propertyctype()
  */
 PyDoc_STRVAR(scribus_getproperty__doc__,
-QT_TR_NOOP("getProperty(object, property)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getProperty(object, property)\n\
 \n\
 Return the value of the property `property' of the passed `object'.\n\
 \n\
@@ -155,7 +155,7 @@ PyObject* scribus_getproperty(PyObject* /*self*/, PyObject* args, PyObject* kw);
  *     scribus_propertyctype()
  */
 PyDoc_STRVAR(scribus_setproperty__doc__,
-QT_TR_NOOP("setProperty(object, property, value)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setProperty(object, property, value)\n\
 \n\
 Set `property' of `object' to `value'. If `value' cannot be converted to a type\n\
 compatible with the type of `property', an exception is raised. An exception may\n\
@@ -175,7 +175,7 @@ PyObject* scribus_setproperty(PyObject* /*self*/, PyObject* args, PyObject* kw);
  */
 /*Qt4
 PyDoc_STRVAR(scribus_getchildren__doc__,
-QT_TR_NOOP("getChildren(object, ofclass=None, ofname=None, regexpmatch=False, recursive=True)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getChildren(object, ofclass=None, ofname=None, regexpmatch=False, recursive=True)\n\
 \n\
 Return a list of children of `object', possibly restricted to children\n\
 of class named `ofclass' or children named `ofname'. If `recursive' is true,\n\
@@ -195,7 +195,7 @@ PyObject* scribus_getchildren(PyObject* self, PyObject* args, PyObject* kw);
  */
 /*Qt4
 PyDoc_STRVAR(scribus_getchild__doc__,
-QT_TR_NOOP("getChild(object, childname, ofclass=None, recursive=True)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getChild(object, childname, ofclass=None, recursive=True)\n\
 \n\
 Return the first child of `object' named `childname', possibly restricting\n\
 the search to children of type name `ofclass'. If `recursive' is true,\n\
diff --git a/Scribus/scribus/plugins/scriptplugin/cmdmani.h b/Scribus/scribus/plugins/scriptplugin/cmdmani.h
index b39306c..dd14619 100644
--- a/Scribus/scribus/plugins/scriptplugin/cmdmani.h
+++ b/Scribus/scribus/plugins/scriptplugin/cmdmani.h
@@ -14,7 +14,7 @@ for which a new license (GPL+exception) is in place.
 
 /*! docstring */
 PyDoc_STRVAR(scribus_moveobjrel__doc__,
-QT_TR_NOOP("moveObject(dx, dy [, \"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "moveObject(dx, dy [, \"name\"])\n\
 \n\
 Moves the object \"name\" by dx and dy relative to its current position. The\n\
 distances are expressed in the current measurement unit of the document (see\n\
@@ -26,7 +26,7 @@ PyObject *scribus_moveobjrel(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_moveobjabs__doc__,
-QT_TR_NOOP("moveObjectAbs(x, y [, \"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "moveObjectAbs(x, y [, \"name\"])\n\
 \n\
 Moves the object \"name\" to a new location. The coordinates are expressed in\n\
 the current measurement unit of the document (see UNIT constants).  If \"name\"\n\
@@ -38,7 +38,7 @@ PyObject *scribus_moveobjabs(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_rotobjrel__doc__,
-QT_TR_NOOP("rotateObject(rot [, \"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "rotateObject(rot [, \"name\"])\n\
 \n\
 Rotates the object \"name\" by \"rot\" degrees relatively. The object is\n\
 rotated by the vertex that is currently selected as the rotation point - by\n\
@@ -51,7 +51,7 @@ PyObject *scribus_rotobjrel(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_rotobjabs__doc__,
-QT_TR_NOOP("rotateObjectAbs(rot [, \"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "rotateObjectAbs(rot [, \"name\"])\n\
 \n\
 Sets the rotation of the object \"name\" to \"rot\". Positive values\n\
 mean counter clockwise rotation. If \"name\" is not given the currently\n\
@@ -62,7 +62,7 @@ PyObject *scribus_rotobjabs(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_sizeobjabs__doc__,
-QT_TR_NOOP("sizeObject(width, height [, \"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "sizeObject(width, height [, \"name\"])\n\
 \n\
 Resizes the object \"name\" to the given width and height. If \"name\"\n\
 is not given the currently selected item is used.\n\
@@ -72,7 +72,7 @@ PyObject *scribus_sizeobjabs(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getselobjnam__doc__,
-QT_TR_NOOP("getSelectedObject([nr]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getSelectedObject([nr]) -> string\n\
 \n\
 Returns the name of the selected object. \"nr\" if given indicates the number\n\
 of the selected object, e.g. 0 means the first selected object, 1 means the\n\
@@ -83,7 +83,7 @@ PyObject *scribus_getselobjnam(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_selcount__doc__,
-QT_TR_NOOP("selectionCount() -> integer\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "selectionCount() -> integer\n\
 \n\
 Returns the number of selected objects.\n\
 "));
@@ -92,7 +92,7 @@ PyObject *scribus_selcount(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_selectobj__doc__,
-QT_TR_NOOP("selectObject(\"name\")\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "selectObject(\"name\")\n\
 \n\
 Selects the object with the given \"name\".\n\
 "));
@@ -101,7 +101,7 @@ PyObject *scribus_selectobj(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_deselect__doc__,
-QT_TR_NOOP("deselectAll()\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "deselectAll()\n\
 \n\
 Deselects all objects in the whole document.\n\
 "));
@@ -110,7 +110,7 @@ PyObject *scribus_deselect(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_groupobj__doc__,
-QT_TR_NOOP("groupObjects(list)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "groupObjects(list)\n\
 \n\
 Groups the objects named in \"list\" together. \"list\" must contain the names\n\
 of the objects to be grouped. If \"list\" is not given the currently selected\n\
@@ -121,7 +121,7 @@ PyObject *scribus_groupobj(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_ungroupobj__doc__,
-QT_TR_NOOP("unGroupObjects(\"name\")\n\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "unGroupObjects(\"name\")\n\n\
 Destructs the group the object \"name\" belongs to.\
 If \"name\" is not given the currently selected item is used."));
 /*! Ungroup objects named in list. */
@@ -129,7 +129,7 @@ PyObject *scribus_ungroupobj(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_scalegroup__doc__,
-QT_TR_NOOP("scaleGroup(factor [,\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "scaleGroup(factor [,\"name\"])\n\
 \n\
 Scales the group the object \"name\" belongs to. Values greater than 1 enlarge\n\
 the group, values smaller than 1 make the group smaller e.g a value of 0.5\n\
@@ -144,7 +144,7 @@ PyObject *scribus_scalegroup(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_loadimage__doc__,
-QT_TR_NOOP("loadImage(\"filename\" [, \"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "loadImage(\"filename\" [, \"name\"])\n\
 \n\
 Loads the picture \"picture\" into the image frame \"name\". If \"name\" is\n\
 not given the currently selected item is used.\n\
@@ -156,7 +156,7 @@ PyObject *scribus_loadimage(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_scaleimage__doc__,
-QT_TR_NOOP("scaleImage(x, y [, \"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "scaleImage(x, y [, \"name\"])\n\
 \n\
 Sets the internal scaling factors of the picture in the image frame \"name\".\n\
 If \"name\" is not given the currently selected item is used. A number of 1\n\
@@ -170,7 +170,7 @@ PyObject *scribus_scaleimage(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setimagescale__doc__,
-QT_TR_NOOP("setImageScale(x, y [, \"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setImageScale(x, y [, \"name\"])\n\
 \n\
 Sets the scaling factors of the picture in the image frame \"name\".\n\
 If \"name\" is not given the currently selected item is used. A number of 1\n\
@@ -183,7 +183,7 @@ PyObject *scribus_setimagescale(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_lockobject__doc__,
-QT_TR_NOOP("lockObject([\"name\"]) -> bool\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "lockObject([\"name\"]) -> bool\n\
 \n\
 Locks the object \"name\" if it's unlocked or unlock it if it's locked.\n\
 If \"name\" is not given the currently selected item is used. Returns true\n\
@@ -194,7 +194,7 @@ PyObject *scribus_lockobject(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_islocked__doc__,
-QT_TR_NOOP("isLocked([\"name\"]) -> bool\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "isLocked([\"name\"]) -> bool\n\
 \n\
 Returns true if is the object \"name\" locked.  If \"name\" is not given the\n\
 currently selected item is used.\n\
@@ -203,7 +203,7 @@ currently selected item is used.\n\
 PyObject *scribus_islocked(PyObject * /*self*/, PyObject* args);
 
 PyDoc_STRVAR(scribus_setscaleimagetoframe__doc__,
-QT_TR_NOOP("setScaleImageToFrame(scaletoframe, proportional=None, name=<selection>)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setScaleImageToFrame(scaletoframe, proportional=None, name=<selection>)\n\
 \n\
 Sets the scale to frame on the selected or specified image frame to `scaletoframe'.\n\
 If `proportional' is specified, set fixed aspect ratio scaling to `proportional'.\n\
diff --git a/Scribus/scribus/plugins/scriptplugin/cmdmisc.h b/Scribus/scribus/plugins/scriptplugin/cmdmisc.h
index 59e612d..3274b02 100644
--- a/Scribus/scribus/plugins/scriptplugin/cmdmisc.h
+++ b/Scribus/scribus/plugins/scriptplugin/cmdmisc.h
@@ -16,7 +16,7 @@ for which a new license (GPL+exception) is in place.
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setredraw__doc__,
-QT_TR_NOOP("setRedraw(bool)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setRedraw(bool)\n\
 \n\
 Disables page redraw when bool = False, otherwise redrawing is enabled.\n\
 This change will persist even after the script exits, so make sure to call\n\
@@ -27,7 +27,7 @@ PyObject *scribus_setredraw(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_fontnames__doc__,
-QT_TR_NOOP("getFontNames() -> list\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getFontNames() -> list\n\
 \n\
 Returns a list with the names of all available fonts.\n\
 "));
@@ -36,7 +36,7 @@ PyObject *scribus_fontnames(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_xfontnames__doc__,
-QT_TR_NOOP("getXFontNames() -> list of tuples\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getXFontNames() -> list of tuples\n\
 \n\
 Returns a larger font info. It's a list of the tuples with:\n\
 [ (Scribus name, Family, Real name, subset (1|0), embed PS (1|0), font file), (...), ... ]\n\
@@ -49,7 +49,7 @@ PyObject *scribus_xfontnames(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_renderfont__doc__,
-QT_TR_NOOP("renderFont(\"name\", \"filename\", \"sample\", size, format=\"PPM\") -> bool\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "renderFont(\"name\", \"filename\", \"sample\", size, format=\"PPM\") -> bool\n\
 \n\
 Creates an image preview of font \"name\" with given text \"sample\" and size.\n\
 If \"filename\" is not \"\", image is saved into \"filename\". Otherwise\n\
@@ -65,7 +65,7 @@ PyObject *scribus_renderfont(PyObject* /*self*/, PyObject* args, PyObject* kw);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getlayers__doc__,
-QT_TR_NOOP("getLayers() -> list\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getLayers() -> list\n\
 \n\
 Returns a list with the names of all defined layers.\n\
 "));
@@ -74,7 +74,7 @@ PyObject *scribus_getlayers(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setactlayer__doc__,
-QT_TR_NOOP("setActiveLayer(\"name\")\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setActiveLayer(\"name\")\n\
 \n\
 Sets the active layer to the layer named \"name\".\n\
 \n\
@@ -86,7 +86,7 @@ PyObject *scribus_setactlayer(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getactlayer__doc__,
-QT_TR_NOOP("getActiveLayer() -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getActiveLayer() -> string\n\
 \n\
 Returns the name of the current active layer.\n\
 "));
@@ -95,7 +95,7 @@ PyObject *scribus_getactlayer(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_senttolayer__doc__,
-QT_TR_NOOP("sentToLayer(\"layer\" [, \"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "sentToLayer(\"layer\" [, \"name\"])\n\
 \n\
 Sends the object \"name\" to the layer \"layer\". The layer must exist.\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -108,7 +108,7 @@ PyObject *scribus_senttolayer(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_layervisible__doc__,
-QT_TR_NOOP("setLayerVisible(\"layer\", visible)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLayerVisible(\"layer\", visible)\n\
 \n\
 Sets the layer \"layer\" to be visible or not. If is the visible set to false\n\
 the layer is invisible.\n\
@@ -121,7 +121,7 @@ PyObject *scribus_layervisible(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_layerprint__doc__,
-QT_TR_NOOP("setLayerPrintable(\"layer\", printable)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLayerPrintable(\"layer\", printable)\n\
 \n\
 Sets the layer \"layer\" to be printable or not. If is the\n\
 printable set to false the layer won't be printed.\n\
@@ -134,7 +134,7 @@ PyObject *scribus_layerprint(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_layerlock__doc__,
-QT_TR_NOOP("setLayerLocked(\"layer\", locked)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLayerLocked(\"layer\", locked)\n\
 \n\
 Sets the layer \"layer\" to be locked or not. If locked is set to\n\
 true the layer will be locked.\n\
@@ -147,7 +147,7 @@ PyObject *scribus_layerlock(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_layeroutline__doc__,
-QT_TR_NOOP("setLayerOutlined(\"layer\", outline)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLayerOutlined(\"layer\", outline)\n\
 \n\
 Sets the layer \"layer\" to be locked or not. If outline is set to\n\
 true the layer will be displayed outlined.\n\
@@ -160,7 +160,7 @@ PyObject *scribus_layeroutline(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_layerflow__doc__,
-QT_TR_NOOP("setLayerFlow(\"layer\", flow)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLayerFlow(\"layer\", flow)\n\
 \n\
 Sets the layers \"layer\"  flowcontrol to flow. If flow is set to\n\
 true text in layers above this one will flow around objects on this layer.\n\
@@ -173,7 +173,7 @@ PyObject *scribus_layerflow(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_layerblend__doc__,
-QT_TR_NOOP("setLayerBlendmode(\"layer\", blend)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLayerBlendmode(\"layer\", blend)\n\
 \n\
 Sets the layers \"layer\"  blendmode to blend.\n\
 \n\
@@ -185,7 +185,7 @@ PyObject *scribus_layerblend(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_layertrans__doc__,
-QT_TR_NOOP("setLayerTransparency(\"layer\", trans)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLayerTransparency(\"layer\", trans)\n\
 \n\
 Sets the layers \"layer\"  transparency to trans.\n\
 \n\
@@ -197,7 +197,7 @@ PyObject *scribus_layertrans(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_glayervisib__doc__,
-QT_TR_NOOP("isLayerVisible(\"layer\") -> bool\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "isLayerVisible(\"layer\") -> bool\n\
 \n\
 Returns whether the layer \"layer\" is visible or not, a value of True means\n\
 that the layer \"layer\" is visible, a value of False means that the layer\n\
@@ -211,7 +211,7 @@ PyObject *scribus_glayervisib(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_glayerprint__doc__,
-QT_TR_NOOP("isLayerPrintable(\"layer\") -> bool\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "isLayerPrintable(\"layer\") -> bool\n\
 \n\
 Returns whether the layer \"layer\" is printable or not, a value of True means\n\
 that the layer \"layer\" can be printed, a value of False means that printing\n\
@@ -225,7 +225,7 @@ PyObject *scribus_glayerprint(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_glayerlock__doc__,
-QT_TR_NOOP("isLayerLocked(\"layer\") -> bool\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "isLayerLocked(\"layer\") -> bool\n\
 \n\
 Returns whether the layer \"layer\" is locked or not, a value of True means\n\
 that the layer \"layer\" is editable, a value of False means that the layer\n\
@@ -239,7 +239,7 @@ PyObject *scribus_glayerlock(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_glayeroutline__doc__,
-QT_TR_NOOP("isLayerOutlined(\"layer\") -> bool\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "isLayerOutlined(\"layer\") -> bool\n\
 \n\
 Returns whether the layer \"layer\" is outlined or not, a value of True means\n\
 that the layer \"layer\" is outlined, a value of False means that the layer\n\
@@ -253,7 +253,7 @@ PyObject *scribus_glayeroutline(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_glayerflow__doc__,
-QT_TR_NOOP("isLayerFlow(\"layer\") -> bool\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "isLayerFlow(\"layer\") -> bool\n\
 \n\
 Returns whether text flows around objects on layer \"layer\", a value of True means\n\
 that text flows around, a value of False means that the text does not flow around.\n\
@@ -266,7 +266,7 @@ PyObject *scribus_glayerflow(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_glayerblend__doc__,
-QT_TR_NOOP("getLayerBlendmode(\"layer\") -> int\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getLayerBlendmode(\"layer\") -> int\n\
 \n\
 Returns the \"layer\" layer blendmode,\n\
 \n\
@@ -278,7 +278,7 @@ PyObject *scribus_glayerblend(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_glayertrans__doc__,
-QT_TR_NOOP("getLayerTransparency(\"layer\") -> float\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getLayerTransparency(\"layer\") -> float\n\
 \n\
 Returns the \"layer\" layer transparency,\n\
 \n\
@@ -290,7 +290,7 @@ PyObject *scribus_glayertrans(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_removelayer__doc__,
-QT_TR_NOOP("deleteLayer(\"layer\")\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "deleteLayer(\"layer\")\n\
 \n\
 Deletes the layer with the name \"layer\". Nothing happens if the layer doesn't\n\
 exists or if it's the only layer in the document.\n\
@@ -303,7 +303,7 @@ PyObject *scribus_removelayer(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_createlayer__doc__,
-QT_TR_NOOP("createLayer(layer)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "createLayer(layer)\n\
 \n\
 Creates a new layer with the name \"name\".\n\
 \n\
@@ -314,7 +314,7 @@ PyObject *scribus_createlayer(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getlanguage__doc__,
-QT_TR_NOOP("getGuiLanguage() -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getGuiLanguage() -> string\n\
 \n\
 Returns a string with the -lang value.\n\
 "));
@@ -323,7 +323,7 @@ PyObject *scribus_getlanguage(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_moveselectiontofront__doc__,
-QT_TR_NOOP("moveSelectionToFront()\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "moveSelectionToFront()\n\
 \n\
 Moves current selection to front.\n\
 "));
@@ -332,7 +332,7 @@ PyObject *scribus_moveselectiontofront(PyObject*);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_moveselectiontoback__doc__,
-QT_TR_NOOP("moveSelectionToFront()\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "moveSelectionToFront()\n\
 \n\
 Moves current selection to back.\n\
 "));
diff --git a/Scribus/scribus/plugins/scriptplugin/cmdobj.h b/Scribus/scribus/plugins/scriptplugin/cmdobj.h
index f8ea066..34fb03f 100644
--- a/Scribus/scribus/plugins/scriptplugin/cmdobj.h
+++ b/Scribus/scribus/plugins/scriptplugin/cmdobj.h
@@ -14,7 +14,7 @@ for which a new license (GPL+exception) is in place.
 
 /*! docstring */
 PyDoc_STRVAR(scribus_newrect__doc__,
-QT_TR_NOOP("createRect(x, y, width, height, [\"name\"]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "createRect(x, y, width, height, [\"name\"]) -> string\n\
 \n\
 Creates a new rectangle on the current page and returns its name. The\n\
 coordinates are given in the current measurement units of the document\n\
@@ -31,7 +31,7 @@ PyObject *scribus_newrect(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_newellipse__doc__,
-QT_TR_NOOP("createEllipse(x, y, width, height, [\"name\"]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "createEllipse(x, y, width, height, [\"name\"]) -> string\n\
 \n\
 Creates a new ellipse on the current page and returns its name.\n\
 The coordinates are given in the current measurement units of the document\n\
@@ -48,7 +48,7 @@ PyObject *scribus_newellipse(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_newimage__doc__,
-QT_TR_NOOP("createImage(x, y, width, height, [\"name\"]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "createImage(x, y, width, height, [\"name\"]) -> string\n\
 \n\
 Creates a new picture frame on the current page and returns its name. The\n\
 coordinates are given in the current measurement units of the document.\n\
@@ -63,7 +63,7 @@ PyObject *scribus_newimage(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_newtext__doc__,
-QT_TR_NOOP("createText(x, y, width, height, [\"name\"]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "createText(x, y, width, height, [\"name\"]) -> string\n\
 \n\
 Creates a new text frame on the actual page and returns its name.\n\
 The coordinates are given in the actual measurement unit of the document (see\n\
@@ -78,7 +78,7 @@ PyObject *scribus_newtext(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_newline__doc__,
-QT_TR_NOOP("createLine(x1, y1, x2, y2, [\"name\"]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "createLine(x1, y1, x2, y2, [\"name\"]) -> string\n\
 \n\
 Creates a new line from the point(x1, y1) to the point(x2, y2) and returns\n\
 its name. The coordinates are given in the current measurement unit of the\n\
@@ -93,7 +93,7 @@ PyObject *scribus_newline(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_polyline__doc__,
-QT_TR_NOOP("createPolyLine(list, [\"name\"]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "createPolyLine(list, [\"name\"]) -> string\n\
 \n\
 Creates a new polyline and returns its name. The points for the polyline are\n\
 stored in the list \"list\" in the following order: [x1, y1, x2, y2...xn. yn].\n\
@@ -111,7 +111,7 @@ PyObject *scribus_polyline(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_polygon__doc__,
-QT_TR_NOOP("createPolygon(list, [\"name\"]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "createPolygon(list, [\"name\"]) -> string\n\
 \n\
 Creates a new polygon and returns its name. The points for the polygon are\n\
 stored in the list \"list\" in the following order: [x1, y1, x2, y2...xn. yn].\n\
@@ -131,7 +131,7 @@ PyObject *scribus_polygon(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_bezierline__doc__,
-QT_TR_NOOP("createBezierLine(list, [\"name\"]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "createBezierLine(list, [\"name\"]) -> string\n\
 \n\
 Creates a new bezier curve and returns its name. The points for the bezier\n\
 curve are stored in the list \"list\" in the following order:\n\
@@ -152,7 +152,7 @@ PyObject *scribus_bezierline(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_pathtext__doc__,
-QT_TR_NOOP("createPathText(x, y, \"textbox\", \"beziercurve\", [\"name\"]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "createPathText(x, y, \"textbox\", \"beziercurve\", [\"name\"]) -> string\n\
 \n\
 Creates a new pathText by merging the two objects \"textbox\" and\n\
 \"beziercurve\" and returns its name. The coordinates are given in the current\n\
@@ -170,7 +170,7 @@ PyObject *scribus_pathtext(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_deleteobj__doc__,
-QT_TR_NOOP("deleteObject([\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "deleteObject([\"name\"])\n\
 \n\
 Deletes the item with the name \"name\". If \"name\" is not given the currently\n\
 selected item is deleted.\n\
@@ -181,7 +181,7 @@ PyObject *scribus_deleteobj(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_textflow__doc__,
-QT_TR_NOOP("textFlowMode(\"name\" [, state])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "textFlowMode(\"name\" [, state])\n\
 \n\
 Enables/disables \"Text Flows Around Frame\" feature for object \"name\".\n\
 Called with parameters string name and optional int \"state\" (0 <= state <= 3).\n\
@@ -203,7 +203,7 @@ PyObject *scribus_textflow(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_objectexists__doc__,
-QT_TR_NOOP("objectExists([\"name\"]) -> bool\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "objectExists([\"name\"]) -> bool\n\
 \n\
 Test if an object with specified name really exists in the document.\n\
 The optional parameter is the object name. When no object name is given,\n\
@@ -220,7 +220,7 @@ PyObject *scribus_objectexists(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setstyle__doc__,
-QT_TR_NOOP("setStyle(\"style\" [, \"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setStyle(\"style\" [, \"name\"])\n\
 \n\
 Apply the named \"style\" to the object named \"name\". If object name is\n\
 given, style is applied to the current text selection in object \"name\".\n\
@@ -235,7 +235,7 @@ PyObject *scribus_setstyle(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getstylenames__doc__,
-QT_TR_NOOP("getAllStyles() -> list\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getAllStyles() -> list\n\
 \n\
 Return a list of the names of all paragraph styles in the current document.\n\
 "));
@@ -247,7 +247,7 @@ PyObject *scribus_getstylenames(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_duplicateobject__doc__,
-QT_TR_NOOP("duplicateObject([\"name\"]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "duplicateObject([\"name\"]) -> string\n\
 \n\
 creates a Duplicate of the selected Object (or Selection Group).\n\
 "));
diff --git a/Scribus/scribus/plugins/scriptplugin/cmdpage.h b/Scribus/scribus/plugins/scriptplugin/cmdpage.h
index 0d7c76b..725f25e 100644
--- a/Scribus/scribus/plugins/scriptplugin/cmdpage.h
+++ b/Scribus/scribus/plugins/scriptplugin/cmdpage.h
@@ -14,7 +14,7 @@ for which a new license (GPL+exception) is in place.
 
 /*! docstring */
 PyDoc_STRVAR(scribus_newpage__doc__,
-QT_TR_NOOP("newPage(where [,\"masterpage\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "newPage(where [,\"masterpage\"])\n\
 \n\
 Creates a new page. If \"where\" is -1 the new Page is appended to the\n\
 document, otherwise the new page is inserted before \"where\". Page numbers are\n\
@@ -29,7 +29,7 @@ PyObject *scribus_newpage(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_actualpage__doc__,
-QT_TR_NOOP("currentPage() -> integer\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "currentPage() -> integer\n\
 \n\
 Returns the number of the current working page. Page numbers are counted from 1\n\
 upwards, no matter what the displayed first page number of your document is.\n\
@@ -39,7 +39,7 @@ PyObject *scribus_actualpage(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_redraw__doc__,
-QT_TR_NOOP("redrawAll()\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "redrawAll()\n\
 \n\
 Redraws all pages.\n\
 "));
@@ -48,7 +48,7 @@ PyObject *scribus_redraw(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_pageposition__doc__,
-QT_TR_NOOP("getPageType() -> integer\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getPageType() -> integer\n\
 \n\
 Returns the type of the Page, 0 means left Page, 1 is a middle Page and 2 is a right Page\n\
 "));
@@ -57,7 +57,7 @@ PyObject *scribus_pageposition(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_savepageeps__doc__,
-QT_TR_NOOP("savePageAsEPS(\"name\")\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "savePageAsEPS(\"name\")\n\
 \n\
 Saves the current page as an EPS to the file \"name\".\n\
 \n\
@@ -68,7 +68,7 @@ PyObject *scribus_savepageeps(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_deletepage__doc__,
-QT_TR_NOOP("deletePage(nr)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "deletePage(nr)\n\
 \n\
 Deletes the given page. Does nothing if the document contains only one page.\n\
 Page numbers are counted from 1 upwards, no matter what the displayed first\n\
@@ -81,7 +81,7 @@ PyObject *scribus_deletepage(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_gotopage__doc__,
-QT_TR_NOOP("gotoPage(nr)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "gotoPage(nr)\n\
 \n\
 Moves to the page \"nr\" (that is, makes the current page \"nr\"). Note that\n\
 gotoPage doesn't (currently) change the page the user's view is displaying, it\n\
@@ -94,7 +94,7 @@ PyObject *scribus_gotopage(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_pagecount__doc__,
-QT_TR_NOOP("pageCount() -> integer\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "pageCount() -> integer\n\
 \n\
 Returns the number of pages in the document.\n\
 "));
@@ -103,7 +103,7 @@ PyObject *scribus_pagecount(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getHguides__doc__,
-QT_TR_NOOP("getHGuides() -> list\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getHGuides() -> list\n\
 \n\
 Returns a list containing positions of the horizontal guides. Values are in the\n\
 document's current units - see UNIT_<type> constants.\n\
@@ -113,7 +113,7 @@ PyObject *scribus_getHguides(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setHguides__doc__,
-QT_TR_NOOP("setHGuides(list)\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setHGuides(list)\n\
 \n\
 Sets horizontal guides. Input parameter must be a list of guide positions\n\
 measured in the current document units - see UNIT_<type> constants.\n\
@@ -126,7 +126,7 @@ PyObject *scribus_setHguides(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getVguides__doc__,
-QT_TR_NOOP("getVGuides()\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getVGuides()\n\
 \n\
 See getHGuides.\n\
 "));
@@ -135,7 +135,7 @@ PyObject *scribus_getVguides(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setVguides__doc__,
-QT_TR_NOOP("setVGuides()\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setVGuides()\n\
 \n\
 See setHGuides.\n\
 "));
@@ -144,7 +144,7 @@ PyObject *scribus_setVguides(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_pagedimension__doc__,
-QT_TR_NOOP("getPageSize() -> tuple\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getPageSize() -> tuple\n\
 \n\
 Returns a tuple with page dimensions measured in the document's current units.\n\
 See UNIT_<type> constants and getPageMargins()\n\
@@ -158,7 +158,7 @@ PyObject *scribus_pagedimension(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_pagensize__doc__,
-QT_TR_NOOP("getPageNSize() -> tuple\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getPageNSize() -> tuple\n\
 \n\
 Returns a tuple with a particular page's size measured in the document's current units.\n\
 See UNIT_<type> constants and getPageMargins()\n\
@@ -171,7 +171,7 @@ PyObject *scribus_pagensize(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_pagenmargins__doc__,
-QT_TR_NOOP("getPageNMargins() -> tuple\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getPageNMargins() -> tuple\n\
 \n\
 Returns a tuple with a particular page's margins measured in the document's current units.\n\
 See UNIT_<type> constants and getPageMargins()\n\
@@ -184,7 +184,7 @@ PyObject *scribus_pagenmargins(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getpageitems__doc__,
-QT_TR_NOOP("getPageItems() -> list\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getPageItems() -> list\n\
 \n\
 Returns a list of tuples with items on the current page. The tuple is:\n\
 (name, objectType, order) E.g. [('Text1', 4, 0), ('Image1', 2, 1)]\n\
@@ -200,7 +200,7 @@ PyObject *scribus_getpageitems(PyObject * /*self*/);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getpagemargins__doc__,
-QT_TR_NOOP("getPageMargins()\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getPageMargins()\n\
 \n\
 Returns the page margins as a (top, left, right, bottom) tuple in the current\n\
 units. See UNIT_<type> constants and getPageSize().\n\
@@ -213,7 +213,7 @@ PyObject *scribus_getpagemargins(PyObject * /*self*/);
 
 /*! importpage */
 PyDoc_STRVAR(scribus_importpage__doc__,
-QT_TR_NOOP("importPage(\"fromDoc\", (pageList), [create, imortwhere, importwherePage])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "importPage(\"fromDoc\", (pageList), [create, imortwhere, importwherePage])\n\
 \n\
 Imports a set of pages (given as a tuple) from an existing document (the file name must be given). This functions maps the \"Page->Import\" dropdown menu function.\n\
 fromDoc: string; the filename of the document to import pages from\n\
diff --git a/Scribus/scribus/plugins/scriptplugin/cmdsetprop.h b/Scribus/scribus/plugins/scriptplugin/cmdsetprop.h
index c5e9650..37c0520 100644
--- a/Scribus/scribus/plugins/scriptplugin/cmdsetprop.h
+++ b/Scribus/scribus/plugins/scriptplugin/cmdsetprop.h
@@ -14,7 +14,7 @@ for which a new license (GPL+exception) is in place.
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setgradfill__doc__,
-QT_TR_NOOP("setGradientFill(type, \"color1\", shade1, \"color2\", shade2, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setGradientFill(type, \"color1\", shade1, \"color2\", shade2, [\"name\"])\n\
 \n\
 Sets the gradient fill of the object \"name\" to type. Color descriptions are\n\
 the same as for setFillColor() and setFillShade(). See the constants for\n\
@@ -25,7 +25,7 @@ PyObject *scribus_setgradfill(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setgradstop__doc__,
-QT_TR_NOOP("setGradientStop(\"color\", shade, opacity, ramppoint, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setGradientStop(\"color\", shade, opacity, ramppoint, [\"name\"])\n\
 \n\
 Set or add a gradient stop to the gradient fill of the object \"name\" at position ramppoint.\n\
 Color descriptions are the same as for setFillColor() and setFillShade(). setGradientFill()\n\
@@ -36,7 +36,7 @@ PyObject *scribus_setgradstop(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setfillcolor__doc__,
-QT_TR_NOOP("setFillColor(\"color\", [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setFillColor(\"color\", [\"name\"])\n\
 \n\
 Sets the fill color of the object \"name\" to the color \"color\". \"color\"\n\
 is the name of one of the defined colors. If \"name\" is not given the\n\
@@ -47,7 +47,7 @@ PyObject *scribus_setfillcolor(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setfilltrans__doc__,
-QT_TR_NOOP("setFillTransparency(transparency, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setFillTransparency(transparency, [\"name\"])\n\
 \n\
 Sets the fill transparency of the object \"name\" to transparency\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -57,7 +57,7 @@ PyObject *scribus_setfilltrans(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setfillblend__doc__,
-QT_TR_NOOP("setFillBlendmode(blendmode, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setFillBlendmode(blendmode, [\"name\"])\n\
 \n\
 Sets the fill blendmode of the object \"name\" to blendmode\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -67,7 +67,7 @@ PyObject *scribus_setfillblend(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setlinecolor__doc__,
-QT_TR_NOOP("setLineColor(\"color\", [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLineColor(\"color\", [\"name\"])\n\
 \n\
 Sets the line color of the object \"name\" to the color \"color\". If \"name\"\n\
 is not given the currently selected item is used.\n\
@@ -77,7 +77,7 @@ PyObject *scribus_setlinecolor(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setlinetrans__doc__,
-QT_TR_NOOP("setLineTransparency(transparency, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLineTransparency(transparency, [\"name\"])\n\
 \n\
 Sets the line transparency of the object \"name\" to transparency\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -87,7 +87,7 @@ PyObject *scribus_setlinetrans(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setlineblend__doc__,
-QT_TR_NOOP("setLineBlendmode(blendmode, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLineBlendmode(blendmode, [\"name\"])\n\
 \n\
 Sets the line blendmode of the object \"name\" to blendmode\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -97,7 +97,7 @@ PyObject *scribus_setlineblend(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setlinewidth__doc__,
-QT_TR_NOOP("setLineWidth(width, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLineWidth(width, [\"name\"])\n\
 \n\
 Sets line width of the object \"name\" to \"width\". \"width\" must be in the\n\
 range from 0.0 to 12.0 inclusive, and is measured in points. If \"name\" is not\n\
@@ -110,7 +110,7 @@ PyObject *scribus_setlinewidth(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setlineshade__doc__,
-QT_TR_NOOP("setLineShade(shade, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLineShade(shade, [\"name\"])\n\
 \n\
 Sets the shading of the line color of the object \"name\" to \"shade\".\n\
 \"shade\" must be an integer value in the range from 0 (lightest) to 100\n\
@@ -124,7 +124,7 @@ PyObject *scribus_setlineshade(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setlinejoin__doc__,
-QT_TR_NOOP("setLineJoin(join, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLineJoin(join, [\"name\"])\n\
 \n\
 Sets the line join style of the object \"name\" to the style \"join\".\n\
 If \"name\" is not given the currently selected item is used. There are\n\
@@ -135,7 +135,7 @@ PyObject *scribus_setlinejoin(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setlineend__doc__,
-QT_TR_NOOP("setLineEnd(endtype, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLineEnd(endtype, [\"name\"])\n\
 \n\
 Sets the line cap style of the object \"name\" to the style \"cap\".\n\
 If \"name\" is not given the currently selected item is used. There are\n\
@@ -146,7 +146,7 @@ PyObject *scribus_setlineend(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setlinestyle__doc__,
-QT_TR_NOOP("setLineStyle(style, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLineStyle(style, [\"name\"])\n\
 \n\
 Sets the line style of the object \"name\" to the style \"style\". If \"name\"\n\
 is not given the currently selected item is used. There are predefined\n\
@@ -157,7 +157,7 @@ PyObject *scribus_setlinestyle(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setfillshade__doc__,
-QT_TR_NOOP("setFillShade(shade, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setFillShade(shade, [\"name\"])\n\
 \n\
 Sets the shading of the fill color of the object \"name\" to \"shade\".\n\
 \"shade\" must be an integer value in the range from 0 (lightest) to 100\n\
@@ -171,7 +171,7 @@ PyObject *scribus_setfillshade(PyObject * /*self*/, PyObject* args);
 
 /*! docstringscribus_setmultiline__doc__ */
 PyDoc_STRVAR(scribus_setcornerrad__doc__,
-QT_TR_NOOP("setCornerRadius(radius, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setCornerRadius(radius, [\"name\"])\n\
 \n\
 Sets the corner radius of the object \"name\". The radius is expressed\n\
 in points. If \"name\" is not given the currently selected item is used.\n\
@@ -183,7 +183,7 @@ PyObject *scribus_setcornerrad(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setmultiline__doc__,
-QT_TR_NOOP("setMultiLine(\"namedStyle\", [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setMultiLine(\"namedStyle\", [\"name\"])\n\
 \n\
 Sets the line style of the object \"name\" to the named style \"namedStyle\".\n\
 If \"name\" is not given the currently selected item is used.\n\
diff --git a/Scribus/scribus/plugins/scriptplugin/cmdstyle.h b/Scribus/scribus/plugins/scriptplugin/cmdstyle.h
index 1279884..7104252 100644
--- a/Scribus/scribus/plugins/scriptplugin/cmdstyle.h
+++ b/Scribus/scribus/plugins/scriptplugin/cmdstyle.h
@@ -19,7 +19,7 @@ for which a new license (GPL+exception) is in place.
 
 /*! docstring */
 PyDoc_STRVAR(scribus_createparagraphstyle__doc__,
-QT_TR_NOOP("createParagraphStyle(...)\n\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "createParagraphStyle(...)\n\n\
 Creates a paragraph style. This function takes the following keyword parameters:\n\n\
 \"name\" [required] -> specifies the name of the paragraphstyle to create\n\n\
 linespacingmode [optional] -> specifies the linespacing mode; possible modes are:\n\n\
@@ -49,7 +49,7 @@ PyObject *scribus_createparagraphstyle(PyObject * /* self */, PyObject* args, Py
 
 /*! docstring */
 PyDoc_STRVAR(scribus_createcharstyle__doc__,
-QT_TR_NOOP("createCharStyle(...)\n\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "createCharStyle(...)\n\n\
 Creates a character style. This function takes the following keyword parameters:\n\n\
 \"name\" [required] -> name of the char style to create\n\n\
 \"font\" [optional] -> name of the font to use\n\n\
diff --git a/Scribus/scribus/plugins/scriptplugin/cmdtext.h b/Scribus/scribus/plugins/scriptplugin/cmdtext.h
index e42dde7..ffa5bc4 100644
--- a/Scribus/scribus/plugins/scriptplugin/cmdtext.h
+++ b/Scribus/scribus/plugins/scriptplugin/cmdtext.h
@@ -14,7 +14,7 @@ for which a new license (GPL+exception) is in place.
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getfontsize__doc__,
-QT_TR_NOOP("getFontSize([\"name\"]) -> float\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getFontSize([\"name\"]) -> float\n\
 \n\
 Returns the font size in points for the text frame \"name\". If this text\n\
 frame has some text selected the value assigned to the first character of\n\
@@ -26,7 +26,7 @@ PyObject *scribus_getfontsize(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getfont__doc__,
-QT_TR_NOOP("getFont([\"name\"]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getFont([\"name\"]) -> string\n\
 \n\
 Returns the font name for the text frame \"name\". If this text frame\n\
 has some text selected the value assigned to the first character\n\
@@ -38,7 +38,7 @@ PyObject *scribus_getfont(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_gettextsize__doc__,
-QT_TR_NOOP("getTextLength([\"name\"]) -> integer\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getTextLength([\"name\"]) -> integer\n\
 \n\
 Returns the length of the text in the text frame \"name\".\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -48,7 +48,7 @@ PyObject *scribus_gettextsize(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_gettextlines__doc__,
-QT_TR_NOOP("getTextLines([\"name\"]) -> integer\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getTextLines([\"name\"]) -> integer\n\
 \n\
 Returns the number of lines of the text in the text frame \"name\".\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -58,7 +58,7 @@ PyObject *scribus_gettextlines(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getframetext__doc__,
-QT_TR_NOOP("getText([\"name\"]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getText([\"name\"]) -> string\n\
 \n\
 Returns the text of the text frame \"name\". If this text frame has some text\n\
 selected, the selected text is returned. All text in the frame, not just\n\
@@ -70,7 +70,7 @@ PyObject *scribus_getframetext(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_gettext__doc__,
-QT_TR_NOOP("getAllText([\"name\"]) -> string\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getAllText([\"name\"]) -> string\n\
 \n\
 Returns the text of the text frame \"name\" and of all text frames which are\n\
 linked with this frame. If this textframe has some text selected, the selected\n\
@@ -82,7 +82,7 @@ PyObject *scribus_gettext(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getlinespace__doc__,
-QT_TR_NOOP("getLineSpacing([\"name\"]) -> float\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getLineSpacing([\"name\"]) -> float\n\
 \n\
 Returns the line spacing (\"leading\") of the text frame \"name\" expressed in\n\
 points. If \"name\" is not given the currently selected item is used.\n\
@@ -92,7 +92,7 @@ PyObject *scribus_getlinespace(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_gettextdistances__doc__,
-QT_TR_NOOP("getTextDistances([\"name\"]) -> tuple\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getTextDistances([\"name\"]) -> tuple\n\
 \n\
 Returns the text distances of the text frame \"name\" expressed in points. The\n\
 distances are returned as a tuple like (left, right, top, bottom). If \"name\"\n\
@@ -103,7 +103,7 @@ PyObject *scribus_gettextdistances(PyObject */*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getcolumngap__doc__,
-QT_TR_NOOP("getColumnGap([\"name\"]) -> float\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getColumnGap([\"name\"]) -> float\n\
 \n\
 Returns the column gap size of the text frame \"name\" expressed in points. If\n\
 \"name\" is not given the currently selected item is used.\n\
@@ -113,7 +113,7 @@ PyObject *scribus_getcolumngap(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_getcolumns__doc__,
-QT_TR_NOOP("getColumns([\"name\"]) -> integer\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "getColumns([\"name\"]) -> integer\n\
 \n\
 Gets the number of columns of the text frame \"name\". If \"name\" is not\n\
 given the currently selected item is used.\n\
@@ -123,7 +123,7 @@ PyObject *scribus_getcolumns(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setboxtext__doc__,
-QT_TR_NOOP("setText(\"text\", [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setText(\"text\", [\"name\"])\n\
 \n\
 Sets the text of the text frame \"name\" to the text of the string \"text\".\n\
 Text must be UTF8 encoded - use e.g. unicode(text, 'iso-8859-2'). See the FAQ\n\
@@ -135,7 +135,7 @@ PyObject *scribus_setboxtext(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_inserttext__doc__,
-QT_TR_NOOP("insertText(\"text\", pos, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "insertText(\"text\", pos, [\"name\"])\n\
 \n\
 Inserts the text \"text\" at the position \"pos\" into the text frame \"name\".\n\
 Text must be UTF encoded (see setText() as reference) The first character has an\n\
@@ -149,7 +149,7 @@ PyObject *scribus_inserttext(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setfont__doc__,
-QT_TR_NOOP("setFont(\"font\", [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setFont(\"font\", [\"name\"])\n\
 \n\
 Sets the font of the text frame \"name\" to \"font\". If there is some text\n\
 selected only the selected text is changed.  If \"name\" is not given the\n\
@@ -162,7 +162,7 @@ PyObject *scribus_setfont(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setfontsize__doc__,
-QT_TR_NOOP("setFontSize(size, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setFontSize(size, [\"name\"])\n\
 \n\
 Sets the font size of the text frame \"name\" to \"size\". \"size\" is treated\n\
 as a value in points. If there is some text selected only the selected text is\n\
@@ -176,7 +176,7 @@ PyObject *scribus_setfontsize(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setlinespace__doc__,
-QT_TR_NOOP("setLineSpacing(size, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLineSpacing(size, [\"name\"])\n\
 \n\
 Sets the line spacing (\"leading\") of the text frame \"name\" to \"size\".\n\
 \"size\" is a value in points. If \"name\" is not given the currently selected\n\
@@ -189,7 +189,7 @@ PyObject *scribus_setlinespace(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setlinespacemode__doc__,
-QT_TR_NOOP("setLineSpacingMode(mode, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setLineSpacingMode(mode, [\"name\"])\n\
 \n\
 Sets the line spacing mode of the text frame \"name\" to \"mode\".\n\
 If \"name\" is not given the currently selected\n\
@@ -203,7 +203,7 @@ PyObject *scribus_setlinespacemode(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_settextdistances__doc__,
-QT_TR_NOOP("setTextDistances(left, right, top, bottom, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setTextDistances(left, right, top, bottom, [\"name\"])\n\
 \n\
 Sets the text distances of the text frame \"name\" to the values \"left\"\n\
 \"right\", \"top\" and \"bottom\". If \"name\" is not given the currently\n\
@@ -216,7 +216,7 @@ PyObject *scribus_settextdistances(PyObject */*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setcolumngap__doc__,
-QT_TR_NOOP("setColumnGap(size, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setColumnGap(size, [\"name\"])\n\
 \n\
 Sets the column gap of the text frame \"name\" to the value \"size\". If\n\
 \"name\" is not given the currently selected item is used.\n\
@@ -228,7 +228,7 @@ PyObject *scribus_setcolumngap(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setcolumns__doc__,
-QT_TR_NOOP("setColumns(nr, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setColumns(nr, [\"name\"])\n\
 \n\
 Sets the number of columns of the text frame \"name\" to the integer \"nr\".\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -240,7 +240,7 @@ PyObject *scribus_setcolumns(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setalign__doc__,
-QT_TR_NOOP("setTextAlignment(align, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setTextAlignment(align, [\"name\"])\n\
 \n\
 Sets the text alignment of the text frame \"name\" to the specified alignment.\n\
 If \"name\" is not given the currently selected item is used. \"align\" should\n\
@@ -253,7 +253,7 @@ PyObject *scribus_setalign(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_selecttext__doc__,
-QT_TR_NOOP("selectText(start, count, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "selectText(start, count, [\"name\"])\n\
 \n\
 Selects \"count\" characters of text in the text frame \"name\" starting from the\n\
 character \"start\". Character counting starts at 0. If \"count\" is zero, any\n\
@@ -267,7 +267,7 @@ PyObject *scribus_selecttext(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_deletetext__doc__,
-QT_TR_NOOP("deleteText([\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "deleteText([\"name\"])\n\
 \n\
 Deletes any text in the text frame \"name\". If there is some text selected,\n\
 only the selected text will be deleted. If \"name\" is not given the currently\n\
@@ -278,7 +278,7 @@ PyObject *scribus_deletetext(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_settextfill__doc__,
-QT_TR_NOOP("setTextColor(\"color\", [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setTextColor(\"color\", [\"name\"])\n\
 \n\
 Sets the text color of the text frame \"name\" to the color \"color\". If there\n\
 is some text selected only the selected text is changed. If \"name\" is not\n\
@@ -289,7 +289,7 @@ PyObject *scribus_settextfill(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_settextstroke__doc__,
-QT_TR_NOOP("setTextStroke(\"color\", [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setTextStroke(\"color\", [\"name\"])\n\
 \n\
 Set \"color\" of the text stroke. If \"name\" is not given the currently\n\
 selected item is used.\n\
@@ -299,7 +299,7 @@ PyObject *scribus_settextstroke(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_settextscalingv__doc__,
-QT_TR_NOOP("setTextScalingV(scale, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setTextScalingV(scale, [\"name\"])\n\
 \n\
 Sets the vertical character scaling of the object \"name\" to \"scale\" in percent.\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -309,7 +309,7 @@ PyObject *scribus_settextscalingv(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_settextscalingh__doc__,
-QT_TR_NOOP("setTextScalingH(scale, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setTextScalingH(scale, [\"name\"])\n\
 \n\
 Sets the horizontal character scaling of the object \"name\" to \"scale\" in percent.\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -319,7 +319,7 @@ PyObject *scribus_settextscalingh(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_settextshade__doc__,
-QT_TR_NOOP("setTextShade(shade, [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setTextShade(shade, [\"name\"])\n\
 \n\
 Sets the shading of the text color of the object \"name\" to \"shade\". If\n\
 there is some text selected only the selected text is changed. \"shade\" must\n\
@@ -332,7 +332,7 @@ PyObject *scribus_settextshade(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_linktextframes__doc__,
-QT_TR_NOOP("linkTextFrames(\"fromname\", \"toname\")\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "linkTextFrames(\"fromname\", \"toname\")\n\
 \n\
 Link two text frames. The frame named \"fromname\" is linked to the\n\
 frame named \"toname\". The target frame must be an empty text frame\n\
@@ -349,7 +349,7 @@ PyObject *scribus_linktextframes(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_unlinktextframes__doc__,
-QT_TR_NOOP("unlinkTextFrames(\"name\")\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "unlinkTextFrames(\"name\")\n\
 \n\
 Remove the specified (named) object from the text frame flow/linkage. If the\n\
 frame was in the middle of a chain, the previous and next frames will be\n\
@@ -366,7 +366,7 @@ PyObject *scribus_unlinktextframes(PyObject * self, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_tracetext__doc__,
-QT_TR_NOOP("traceText([\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "traceText([\"name\"])\n\
 \n\
 Convert the text frame \"name\" to outlines. If \"name\" is not given the\n\
 currently selected item is used."));
@@ -377,7 +377,7 @@ currently selected item is used."));
 PyObject *scribus_tracetext(PyObject * self, PyObject* args);
 
 PyDoc_STRVAR(scribus_istextoverflowing__doc__,
-QT_TR_NOOP("textOverflows([\"name\", nolinks]) -> integer\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "textOverflows([\"name\", nolinks]) -> integer\n\
 \n\
 Returns the actual number of overflowing characters in text frame \"name\".\n\
 If is nolinks set to non zero value it takes only one frame - it doesn't\n\
@@ -390,7 +390,7 @@ May raise WrongFrameTypeError if the target frame is not an text frame\n"));
 PyObject *scribus_istextoverflowing(PyObject * self, PyObject* args, PyObject* kw);
 
 PyDoc_STRVAR(scribus_hyphenatetext__doc__,
-QT_TR_NOOP("hyphenateText([\"name\"]) -> bool\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "hyphenateText([\"name\"]) -> bool\n\
 \n\
 Does hyphenation on text frame \"name\".\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -404,7 +404,7 @@ May raise WrongFrameTypeError if the target frame is not a text frame\n\
 PyObject *scribus_hyphenatetext(PyObject *, PyObject* args);
 
 PyDoc_STRVAR(scribus_dehyphenatetext__doc__,
-QT_TR_NOOP("dehyphenateText([\"name\"]) -> bool\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "dehyphenateText([\"name\"]) -> bool\n\
 \n\
 Does dehyphenation on text frame \"name\".\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -419,7 +419,7 @@ PyObject *scribus_dehyphenatetext(PyObject *, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_setpdfbookmark__doc__,
-QT_TR_NOOP("setPDFBookmark(\"toggle\", [\"name\"])\n\
+QCoreApplication::instance()->translate("ScripterDocstring", "setPDFBookmark(\"toggle\", [\"name\"])\n\
 \n\
 Sets whether (toggle = 1) the text frame \"name\" is a bookmark nor not.\n\
 If \"name\" is not given the currently selected item is used.\n\
@@ -431,7 +431,7 @@ PyObject *scribus_setpdfbookmark(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
 PyDoc_STRVAR(scribus_ispdfbookmark__doc__,
- QT_TR_NOOP("isPDFBookmark([\"name\"]) -> bool\n\
+ QCoreApplication::instance()->translate("ScripterDocstring", "isPDFBookmark([\"name\"]) -> bool\n\
 \n\
 Returns true if the text frame \"name\" is a PDF bookmark.\n\
 If \"name\" is not given the currently selected item is used.\n\
diff --git a/Scribus/scribus/plugins/scriptplugin/cmdvar.h b/Scribus/scribus/plugins/scriptplugin/cmdvar.h
index 8f9a12d..2bda970 100644
--- a/Scribus/scribus/plugins/scriptplugin/cmdvar.h
+++ b/Scribus/scribus/plugins/scriptplugin/cmdvar.h
@@ -30,6 +30,18 @@ for which a new license (GPL+exception) is in place.
 	#define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True
 #endif
 
+/* Redefine macros for translatable inline documentation. */
+#undef PyDoc_VAR
+#undef PyDoc_STR
+#undef PyDoc_STRVAR
+#define PyDoc_VAR(name) static QString name
+#define PyDoc_STRVAR(name,str) PyDoc_VAR(name) = PyDoc_STR(str)
+#ifdef WITH_DOC_STRINGS
+#define PyDoc_STR(str) str
+#else
+#define PyDoc_STR(str) ""
+#endif
+
 // PV - commented out - why it was here?
 // #if defined(SCRIBUS_XOPEN_SOURCE)
 // #define _XOPEN_SOURCE
diff --git a/Scribus/scribus/plugins/scriptplugin/formatdocstring.cpp b/Scribus/scribus/plugins/scriptplugin/formatdocstring.cpp
new file mode 100644
index 0000000..d49d1bf
--- /dev/null
+++ b/Scribus/scribus/plugins/scriptplugin/formatdocstring.cpp
@@ -0,0 +1,38 @@
+#include "formatdocstring.h"
+
+#include <QString>
+
+/*! \brief Translate a docstring. Small helper function for use with the
+ * PyMethodDef struct.
+ */
+
+char* formatDocstring(QString& docstringConstant)
+{
+	// Alas, there's a lot of wasteful string copying going on
+	// here.
+	// pv - hack for ugly formating in console removing
+	docstringConstant.replace("\n\n", "<P>");
+	docstringConstant.replace('\n', " ");
+	docstringConstant.replace("<P>", "\n\n");
+	/*
+	 * Python doesn't support 'unicode' object docstrings in the PyMethodDef,
+	 * and has no way to specify what encoding docstrings are in. The passed C
+	 * strings passed are made into 'str' objects as-is. These are interpreted
+	 * as being in the Python sysdefaultencoding, usually 'ascii', when used.
+	 * We now set systemdefaultencoding to 'utf-8' ...  so we're going to pass
+	 * Python an 8-bit utf-8 encoded string in a char* .  With
+	 * sysdefaultencoding set correctly, Python will interpret it correctly and
+	 * we'll have our unicode docstrings. It's not as ugly a hack as it sounds,
+	 * you just have to remember that C and Python strings can both be
+	 * considered 8-bit strings of binary data that can be later interpreted as
+	 * a text string in a particular text encoding.
+	 */
+	//QCString utfTranslated = translated.utf8();
+	QByteArray trch = docstringConstant.toUtf8();
+	char* utfstr = strdup(trch.data());
+	if (!utfstr)
+		// Complain, but then return NULL anyway. Python will treat NULL as
+		// "no value" so that's fine.
+		qDebug("scriptplugin.cpp:tr() - strdup() failure");
+	return utfstr;
+}
diff --git a/Scribus/scribus/plugins/scriptplugin/formatdocstring.h b/Scribus/scribus/plugins/scriptplugin/formatdocstring.h
new file mode 100644
index 0000000..e8f9195
--- /dev/null
+++ b/Scribus/scribus/plugins/scriptplugin/formatdocstring.h
@@ -0,0 +1,3 @@
+class QString;
+
+char* formatDocstring(QString& docstring);
diff --git a/Scribus/scribus/plugins/scriptplugin/objimageexport.cpp b/Scribus/scribus/plugins/scriptplugin/objimageexport.cpp
index d36d456..654351c 100644
--- a/Scribus/scribus/plugins/scriptplugin/objimageexport.cpp
+++ b/Scribus/scribus/plugins/scriptplugin/objimageexport.cpp
@@ -7,6 +7,7 @@ for which a new license (GPL+exception) is in place.
 #include "objimageexport.h"
 #include "cmdutil.h"
 #include "page.h"
+#include "formatdocstring.h"
 
 #include <QImageWriter>
 #include <structmember.h>
@@ -58,9 +59,9 @@ static int ImageExport_init(ImageExport * /*self*/, PyObject * /*args*/, PyObjec
 }
 
 static PyMemberDef ImageExport_members[] = {
-	{const_cast<char*>("dpi"), T_INT, offsetof(ImageExport, dpi), 0, imgexp_dpi__doc__},
-	{const_cast<char*>("scale"), T_INT, offsetof(ImageExport, scale), 0, imgexp_scale__doc__},
-	{const_cast<char*>("quality"), T_INT, offsetof(ImageExport, quality), 0, imgexp_quality__doc__},
+	{const_cast<char*>("dpi"), T_INT, offsetof(ImageExport, dpi), 0, formatDocstring(imgexp_dpi__doc__)},
+	{const_cast<char*>("scale"), T_INT, offsetof(ImageExport, scale), 0, formatDocstring(imgexp_scale__doc__)},
+	{const_cast<char*>("quality"), T_INT, offsetof(ImageExport, quality), 0, formatDocstring(imgexp_quality__doc__)},
 	{NULL, 0, 0, 0, NULL} // sentinel
 };
 
@@ -130,9 +131,9 @@ static int ImageExport_setAllTypes(ImageExport * /*self*/, PyObject * /*value*/,
 }
 
 static PyGetSetDef ImageExport_getseters [] = {
-	{const_cast<char*>("name"), (getter)ImageExport_getName, (setter)ImageExport_setName, imgexp_filename__doc__, NULL},
-	{const_cast<char*>("type"), (getter)ImageExport_getType, (setter)ImageExport_setType, imgexp_type__doc__, NULL},
-	{const_cast<char*>("allTypes"), (getter)ImageExport_getAllTypes, (setter)ImageExport_setAllTypes, imgexp_alltypes__doc__, NULL},
+	{const_cast<char*>("name"), (getter)ImageExport_getName, (setter)ImageExport_setName, formatDocstring(imgexp_filename__doc__), NULL},
+	{const_cast<char*>("type"), (getter)ImageExport_getType, (setter)ImageExport_setType, formatDocstring(imgexp_type__doc__), NULL},
+	{const_cast<char*>("allTypes"), (getter)ImageExport_getAllTypes, (setter)ImageExport_setAllTypes, formatDocstring(imgexp_alltypes__doc__), NULL},
 	{NULL, NULL, NULL, NULL, NULL}  // sentinel
 };
 
@@ -196,8 +197,8 @@ static PyObject *ImageExport_saveAs(ImageExport *self, PyObject *args)
 }
 
 static PyMethodDef ImageExport_methods[] = {
-	{const_cast<char*>("save"), (PyCFunction)ImageExport_save, METH_NOARGS, imgexp_save__doc__},
-	{const_cast<char*>("saveAs"), (PyCFunction)ImageExport_saveAs, METH_VARARGS, imgexp_saveas__doc__},
+	{const_cast<char*>("save"), (PyCFunction)ImageExport_save, METH_NOARGS, formatDocstring(imgexp_save__doc__)},
+	{const_cast<char*>("saveAs"), (PyCFunction)ImageExport_saveAs, METH_VARARGS, formatDocstring(imgexp_saveas__doc__)},
 	{NULL, (PyCFunction)(0), 0, NULL} // sentinel
 };
 
@@ -223,7 +224,7 @@ PyTypeObject ImageExport_Type = {
 	0, //	 setattrofunc tp_setattro;
 	0, //	 PyBufferProcs *tp_as_buffer;
 	Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,	// long tp_flags;
-	imgexp__doc__, // char *tp_doc; /* Documentation string */
+	formatDocstring(imgexp__doc__), // char *tp_doc; /* Documentation string */
 	0, //	 traverseproc tp_traverse;
 	0, //	 inquiry tp_clear;
 	0, //	 richcmpfunc tp_richcompare;
diff --git a/Scribus/scribus/plugins/scriptplugin/objimageexport.h b/Scribus/scribus/plugins/scriptplugin/objimageexport.h
index b056520..df0fb95 100644
--- a/Scribus/scribus/plugins/scriptplugin/objimageexport.h
+++ b/Scribus/scribus/plugins/scriptplugin/objimageexport.h
@@ -13,7 +13,8 @@ for which a new license (GPL+exception) is in place.
 extern PyTypeObject ImageExport_Type;
 
 // docstrings
-PyDoc_STRVAR(imgexp__doc__,"Image export\n\
+PyDoc_STRVAR(imgexp__doc__,
+QCoreApplication::instance()->translate("ScripterDocstring","Image export\n\
 \n\
 Class ImageExport() provides the bitmap graphics exporting\n\
 for Python scripting as you know it from Export/Save as Image\n\
@@ -26,17 +27,17 @@ i.name = '/home/subik/test.png'\n\
 i.save()\n\
 \n\
 two last lines should be replaced with:\n\
-i.saveAs('/home/subik/test.png')");
+i.saveAs('/home/subik/test.png')"));
 
-PyDoc_STRVAR(imgexp_dpi__doc__, "This value will be used for export as DPI. Read/write integer.");
-PyDoc_STRVAR(imgexp_scale__doc__, "This is the scaling of the image. 100 = 100% etc. Read/write iteger.");
-PyDoc_STRVAR(imgexp_quality__doc__, "Quality/compression: minimum 1 (poor), maximum 100 (qaulity). Read/write integer.");
-PyDoc_STRVAR(imgexp_filename__doc__, "Filename of the image. With or without path. Read/write string.");
-PyDoc_STRVAR(imgexp_type__doc__, "Bitmap type. See allTypes list for more info. Read/write string.");
-PyDoc_STRVAR(imgexp_alltypes__doc__, "Available types. Read only list of strings.");
+PyDoc_STRVAR(imgexp_dpi__doc__, QCoreApplication::instance()->translate("ScripterDocstring", "This value will be used for export as DPI. Read/write integer."));
+PyDoc_STRVAR(imgexp_scale__doc__, QCoreApplication::instance()->translate("ScripterDocstring", "This is the scaling of the image. 100 = 100% etc. Read/write iteger."));
+PyDoc_STRVAR(imgexp_quality__doc__, QCoreApplication::instance()->translate("ScripterDocstring", "Quality/compression: minimum 1 (poor), maximum 100 (qaulity). Read/write integer."));
+PyDoc_STRVAR(imgexp_filename__doc__, QCoreApplication::instance()->translate("ScripterDocstring", "Filename of the image. With or without path. Read/write string."));
+PyDoc_STRVAR(imgexp_type__doc__, QCoreApplication::instance()->translate("ScripterDocstring", "Bitmap type. See allTypes list for more info. Read/write string."));
+PyDoc_STRVAR(imgexp_alltypes__doc__, QCoreApplication::instance()->translate("ScripterDocstring", "Available types. Read only list of strings."));
 
-PyDoc_STRVAR(imgexp_save__doc__, "save() -> boolean\n\nSaves image under previously set 'name'.");
-PyDoc_STRVAR(imgexp_saveas__doc__, "saveAs('filename') -> boolean\n\nSaves image as 'filename'.");
+PyDoc_STRVAR(imgexp_save__doc__, QCoreApplication::instance()->translate("ScripterDocstring", "save() -> boolean\n\nSaves image under previously set 'name'."));
+PyDoc_STRVAR(imgexp_saveas__doc__, QCoreApplication::instance()->translate("ScripterDocstring", "saveAs('filename') -> boolean\n\nSaves image as 'filename'."));
 
 // Nest items are not needed but are here for me to exercise
 // writing complete python objects
diff --git a/Scribus/scribus/plugins/scriptplugin/objpdffile.cpp b/Scribus/scribus/plugins/scriptplugin/objpdffile.cpp
index f3a46aa..43d8d87 100644
--- a/Scribus/scribus/plugins/scriptplugin/objpdffile.cpp
+++ b/Scribus/scribus/plugins/scriptplugin/objpdffile.cpp
@@ -12,6 +12,7 @@ for which a new license (GPL+exception) is in place.
 #include "scribuscore.h"
 #include <structmember.h>
 #include "ui/bookmarkpalette.h"
+#include "formatdocstring.h"
 
 #include <QFileInfo>
 #include <QList>
@@ -1198,7 +1199,7 @@ PyTypeObject PDFfile_Type = {
 	/* Flags to define presence of optional/expanded features */
 	Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,    // long tp_flags;
 
-	pdffile__doc__,      // char *tp_doc; /* Documentation string */
+	formatDocstring(pdffile__doc__),      // char *tp_doc; /* Documentation string */
 
 	/* Assigned meaning in release 2.0 */
 	/* call function for all accessible objects */
diff --git a/Scribus/scribus/plugins/scriptplugin/objpdffile.h b/Scribus/scribus/plugins/scriptplugin/objpdffile.h
index d840798..6503e8a 100644
--- a/Scribus/scribus/plugins/scriptplugin/objpdffile.h
+++ b/Scribus/scribus/plugins/scriptplugin/objpdffile.h
@@ -17,7 +17,8 @@ extern PyTypeObject PDFfile_Type;
 
 #define PDFfile_Check(op) ((op)->ob_type == &PDFfile_Type)
 
-PyDoc_STRVAR(pdffile__doc__,"Exporting PDF\n\
+PyDoc_STRVAR(pdffile__doc__,
+QCoreApplication::instance()->translate("ScripterDocstring", "Exporting PDF\n\
 \n\
 Class PDFfile() provides the PDF exporting\n\
 for Python scripting as you know it from Save as PDF\n\
@@ -26,6 +27,6 @@ Example:\n\
 pdf = PDFfile()\n\
 pdf.thumbnails = 1 # generate thumbnails too\n\
 pdf.file = 'mypdf.pdf' \n\
-pdf.save()");
+pdf.save()"));
 
 #endif /* OBJPDFFILE_H */
diff --git a/Scribus/scribus/plugins/scriptplugin/objprinter.cpp b/Scribus/scribus/plugins/scriptplugin/objprinter.cpp
index 96c9030..4798b0f 100644
--- a/Scribus/scribus/plugins/scriptplugin/objprinter.cpp
+++ b/Scribus/scribus/plugins/scriptplugin/objprinter.cpp
@@ -9,6 +9,7 @@ for which a new license (GPL+exception) is in place.
 #include "objprinter.h"
 #include "cmdutil.h"
 #include "prefsmanager.h"
+#include "formatdocstring.h"
 
 #include <structmember.h>
 #include <QFileInfo>
@@ -561,7 +562,7 @@ PyTypeObject Printer_Type = {
 	/* Flags to define presence of optional/expanded features */
 	Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,    // long tp_flags;
 
-	printer__doc__,      // char *tp_doc; /* Documentation string */
+	formatDocstring(printer__doc__),      // char *tp_doc; /* Documentation string */
 
 	/* Assigned meaning in release 2.0 */
 	/* call function for all accessible objects */
diff --git a/Scribus/scribus/plugins/scriptplugin/objprinter.h b/Scribus/scribus/plugins/scriptplugin/objprinter.h
index cf834a2..be8a1cc 100644
--- a/Scribus/scribus/plugins/scriptplugin/objprinter.h
+++ b/Scribus/scribus/plugins/scriptplugin/objprinter.h
@@ -17,12 +17,13 @@ extern PyTypeObject Printer_Type;
 
 #define Printer_Check(op) ((op)->ob_type == &Printer_Type)
 
-PyDoc_STRVAR(printer__doc__,"Printing\n\
+PyDoc_STRVAR(printer__doc__,
+QCoreApplication::instance()->translate("ScripterDocstring", "Printing\n\
 \n\
 Class Printer() provides printing for Python scripting.\n\
 \n\
 Example:\n\
 p = Printer()\n\
-p.print()");
+p.print()"));
 
 #endif /* OBJPRINTER_H */
diff --git a/Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp b/Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp
index 4a5d05c..4552945 100644
--- a/Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp
+++ b/Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp
@@ -38,6 +38,7 @@ for which a new license (GPL+exception) is in place.
 #include "cmdutil.h"
 #include "cmdstyle.h"
 #include "ui/customfdialog.h"
+#include "formatdocstring.h"
 #include "guiapp.h"
 #include "ui/helpbrowser.h"
 #include "menumanager.h"
@@ -247,41 +248,6 @@ void run()
 	return PyString_FromString(scripterCore->inValue.toUtf8().data());
 }
 
-/*! \brief Translate a docstring. Small helper function for use with the
- * PyMethodDef struct.
- */
-char* tr(const char* docstringConstant)
-{
-	// Alas, there's a lot of wasteful string copying going on
-	// here.
-	QString translated = QObject::tr(docstringConstant, "scripter docstring");
-	// pv - hack for ugly formating in console removing
-	translated.replace("\n\n", "<P>");
-	translated.replace('\n', " ");
-	translated.replace("<P>", "\n\n");
-	/*
-	 * Python doesn't support 'unicode' object docstrings in the PyMethodDef,
-	 * and has no way to specify what encoding docstrings are in. The passed C
-	 * strings passed are made into 'str' objects as-is. These are interpreted
-	 * as being in the Python sysdefaultencoding, usually 'ascii', when used.
-	 * We now set systemdefaultencoding to 'utf-8' ...  so we're going to pass
-	 * Python an 8-bit utf-8 encoded string in a char* .  With
-	 * sysdefaultencoding set correctly, Python will interpret it correctly and
-	 * we'll have our unicode docstrings. It's not as ugly a hack as it sounds,
-	 * you just have to remember that C and Python strings can both be
-	 * considered 8-bit strings of binary data that can be later interpreted as
-	 * a text string in a particular text encoding.
-	 */
-	//QCString utfTranslated = translated.utf8();
-	QByteArray trch = translated.toUtf8();
-	char* utfstr = strdup(trch.data());
-	if (!utfstr)
-		// Complain, but then return NULL anyway. Python will treat NULL as
-		// "no value" so that's fine.
-		qDebug("scriptplugin.cpp:tr() - strdup() failure");
-	return utfstr;
-}
-
 /* Now we're using the more pythonic convention for names:
  * class - ClassName
  * procedure/function/method - procedureName
@@ -289,216 +255,216 @@ char* tr(const char* docstringConstant)
 PyMethodDef scribus_methods[] = {
 	// 2004/10/03 pv - aliases with common Python syntax - ClassName methodName
 	// 2004-11-06 cr - move aliasing to dynamically generated wrapper functions, sort methoddef
-	{const_cast<char*>("changeColor"), scribus_setcolor, METH_VARARGS, tr(scribus_setcolor__doc__)},
-	{const_cast<char*>("closeDoc"), (PyCFunction)scribus_closedoc, METH_NOARGS, tr(scribus_closedoc__doc__)},
-	{const_cast<char*>("closeMasterPage"), (PyCFunction)scribus_closemasterpage, METH_NOARGS, tr(scribus_closemasterpage__doc__)},
-	{const_cast<char*>("createBezierLine"), scribus_bezierline, METH_VARARGS, tr(scribus_bezierline__doc__)},
-	{const_cast<char*>("createEllipse"), scribus_newellipse, METH_VARARGS, tr(scribus_newellipse__doc__)},
-	{const_cast<char*>("createImage"), scribus_newimage, METH_VARARGS, tr(scribus_newimage__doc__)},
-	{const_cast<char*>("createLayer"), scribus_createlayer, METH_VARARGS, tr(scribus_createlayer__doc__)},
-	{const_cast<char*>("createLine"), scribus_newline, METH_VARARGS, tr(scribus_newline__doc__)},
-	{const_cast<char*>("createMasterPage"), scribus_createmasterpage, METH_VARARGS, tr(scribus_createmasterpage__doc__)},
-	{const_cast<char*>("createPathText"), scribus_pathtext, METH_VARARGS, tr(scribus_pathtext__doc__)},
-	{const_cast<char*>("createPolygon"), scribus_polygon, METH_VARARGS, tr(scribus_polygon__doc__)},
-	{const_cast<char*>("createPolyLine"), scribus_polyline, METH_VARARGS, tr(scribus_polyline__doc__)},
-	{const_cast<char*>("createRect"), scribus_newrect, METH_VARARGS, tr(scribus_newrect__doc__)},
-	{const_cast<char*>("createText"), scribus_newtext, METH_VARARGS, tr(scribus_newtext__doc__)},
-	{const_cast<char*>("createParagraphStyle"), (PyCFunction)scribus_createparagraphstyle, METH_KEYWORDS, tr(scribus_createparagraphstyle__doc__)},
-	{const_cast<char*>("createCharStyle"), (PyCFunction)scribus_createcharstyle, METH_KEYWORDS, tr(scribus_createcharstyle__doc__)},
-	{const_cast<char*>("currentPage"), (PyCFunction)scribus_actualpage, METH_NOARGS, tr(scribus_actualpage__doc__)},
-	{const_cast<char*>("defineColor"), scribus_newcolor, METH_VARARGS, tr(scribus_newcolor__doc__)},
-	{const_cast<char*>("deleteColor"), scribus_delcolor, METH_VARARGS, tr(scribus_delcolor__doc__)},
-	{const_cast<char*>("deleteLayer"), scribus_removelayer, METH_VARARGS, tr(scribus_removelayer__doc__)},
-	{const_cast<char*>("deleteMasterPage"), scribus_deletemasterpage, METH_VARARGS, tr(scribus_deletemasterpage__doc__)},
-	{const_cast<char*>("deleteObject"), scribus_deleteobj, METH_VARARGS, tr(scribus_deleteobj__doc__)},
-	{const_cast<char*>("deletePage"), scribus_deletepage, METH_VARARGS, tr(scribus_deletepage__doc__)},
-	{const_cast<char*>("deleteText"), scribus_deletetext, METH_VARARGS, tr(scribus_deletetext__doc__)},
-	{const_cast<char*>("deselectAll"), (PyCFunction)scribus_deselect, METH_NOARGS, tr(scribus_deselect__doc__)},
-	{const_cast<char*>("docChanged"), scribus_docchanged, METH_VARARGS, tr(scribus_docchanged__doc__)},
-	{const_cast<char*>("editMasterPage"), scribus_editmasterpage, METH_VARARGS, tr(scribus_editmasterpage__doc__)},
-	{const_cast<char*>("fileDialog"), (PyCFunction)scribus_filedia, METH_VARARGS|METH_KEYWORDS, tr(scribus_filedia__doc__)},
-	{const_cast<char*>("getActiveLayer"), (PyCFunction)scribus_getactlayer, METH_NOARGS, tr(scribus_getactlayer__doc__)},
-	{const_cast<char*>("getAllObjects"), scribus_getallobj, METH_VARARGS, tr(scribus_getallobj__doc__)},
-	{const_cast<char*>("getAllStyles"), (PyCFunction)scribus_getstylenames, METH_NOARGS, tr(scribus_getstylenames__doc__)},
-	{const_cast<char*>("getAllText"), scribus_gettext, METH_VARARGS, tr(scribus_gettext__doc__)},
-	{const_cast<char*>("getColorNames"), (PyCFunction)scribus_colornames, METH_NOARGS, tr(scribus_colornames__doc__)},
-	{const_cast<char*>("getColor"), scribus_getcolor, METH_VARARGS, tr(scribus_getcolor__doc__)},
-	{const_cast<char*>("getColorAsRGB"), scribus_getcolorasrgb, METH_VARARGS, tr(scribus_getcolorasrgb__doc__)},
-	{const_cast<char*>("isSpotColor"), scribus_isspotcolor, METH_VARARGS, tr(scribus_isspotcolor__doc__)},
-	{const_cast<char*>("setSpotColor"), scribus_setspotcolor, METH_VARARGS, tr(scribus_setspotcolor__doc__)},
-	{const_cast<char*>("getTextDistances"), scribus_gettextdistances, METH_VARARGS, tr(scribus_gettextdistances__doc__)},
-	{const_cast<char*>("getColumnGap"), scribus_getcolumngap, METH_VARARGS, tr(scribus_getcolumngap__doc__)},
-	{const_cast<char*>("getColumns"), scribus_getcolumns, METH_VARARGS, tr(scribus_getcolumns__doc__)},
-	{const_cast<char*>("getCornerRadius"), scribus_getcornerrad, METH_VARARGS, tr(scribus_getcornerrad__doc__)},
-	{const_cast<char*>("getFillColor"), scribus_getfillcolor, METH_VARARGS, tr(scribus_getfillcolor__doc__)},
-	{const_cast<char*>("getFillShade"), scribus_getfillshade, METH_VARARGS, tr(scribus_getfillshade__doc__)},
-	{const_cast<char*>("getFillBlendmode"), scribus_getfillblend, METH_VARARGS, tr(scribus_getfillblend__doc__)},
-	{const_cast<char*>("getFillTransparency"), scribus_getfilltrans, METH_VARARGS, tr(scribus_getfilltrans__doc__)},
-	{const_cast<char*>("getFontNames"), (PyCFunction)scribus_fontnames, METH_NOARGS, tr(scribus_fontnames__doc__)},
-	{const_cast<char*>("getFont"), scribus_getfont, METH_VARARGS, tr(scribus_getfont__doc__)},
-	{const_cast<char*>("getFontSize"), scribus_getfontsize, METH_VARARGS, tr(scribus_getfontsize__doc__)},
-	{const_cast<char*>("getGuiLanguage"), (PyCFunction)scribus_getlanguage, METH_NOARGS, tr(scribus_getlanguage__doc__)},
-	{const_cast<char*>("getHGuides"), (PyCFunction)scribus_getHguides, METH_NOARGS, tr(scribus_getHguides__doc__)},
-	{const_cast<char*>("getImageFile"), scribus_getimgname, METH_VARARGS, tr(scribus_getimgname__doc__)},
-	{const_cast<char*>("getImageScale"), scribus_getimgscale, METH_VARARGS, tr(scribus_getimgscale__doc__)},
-	{const_cast<char*>("getLayers"), (PyCFunction)scribus_getlayers, METH_NOARGS, tr(scribus_getlayers__doc__)},
-	{const_cast<char*>("getLayerBlendmode"), scribus_glayerblend, METH_VARARGS, tr(scribus_glayerblend__doc__)},
-	{const_cast<char*>("getLayerTransparency"), scribus_glayertrans, METH_VARARGS, tr(scribus_glayertrans__doc__)},
-	{const_cast<char*>("getLineCap"), scribus_getlineend, METH_VARARGS, tr(scribus_getlineend__doc__)},
-	{const_cast<char*>("getLineColor"), scribus_getlinecolor, METH_VARARGS, tr(scribus_getlinecolor__doc__)},
-	{const_cast<char*>("getLineShade"), scribus_getlineshade, METH_VARARGS, tr(scribus_getlineshade__doc__)},
-	{const_cast<char*>("getLineBlendmode"), scribus_getlineblend, METH_VARARGS, tr(scribus_getlineblend__doc__)},
-	{const_cast<char*>("getLineTransparency"), scribus_getlinetrans, METH_VARARGS, tr(scribus_getlinetrans__doc__)},
-	{const_cast<char*>("getLineJoin"), scribus_getlinejoin, METH_VARARGS, tr(scribus_getlinejoin__doc__)},
-	{const_cast<char*>("getLineSpacing"), scribus_getlinespace, METH_VARARGS, tr(scribus_getlinespace__doc__)},
-	{const_cast<char*>("getLineStyle"), scribus_getlinestyle, METH_VARARGS, tr(scribus_getlinestyle__doc__)},
-	{const_cast<char*>("getLineWidth"), scribus_getlinewidth, METH_VARARGS, tr(scribus_getlinewidth__doc__)},
-	{const_cast<char*>("getPageItems"), (PyCFunction)scribus_getpageitems, METH_NOARGS, tr(scribus_getpageitems__doc__)},
-	{const_cast<char*>("getPageMargins"), (PyCFunction)scribus_getpagemargins, METH_NOARGS, tr(scribus_getpagemargins__doc__)},
-	{const_cast<char*>("getPageType"), (PyCFunction)scribus_pageposition, METH_VARARGS, tr(scribus_pageposition__doc__)},
-	{const_cast<char*>("getPageSize"), (PyCFunction)scribus_pagedimension, METH_NOARGS, tr(scribus_pagedimension__doc__)},
-	{const_cast<char*>("getPageNSize"), scribus_pagensize, METH_VARARGS, tr(scribus_pagensize__doc__)},
-	{const_cast<char*>("getPageNMargins"), scribus_pagenmargins, METH_VARARGS, tr(scribus_pagenmargins__doc__)},
-	{const_cast<char*>("importPage"), scribus_importpage, METH_VARARGS, tr(scribus_importpage__doc__)},
-	{const_cast<char*>("getPosition"), scribus_getposi, METH_VARARGS, tr(scribus_getposi__doc__)},
-	{const_cast<char*>("getRotation"), scribus_getrotation, METH_VARARGS, tr(scribus_getrotation__doc__)},
-	{const_cast<char*>("getSelectedObject"), scribus_getselobjnam, METH_VARARGS, tr(scribus_getselobjnam__doc__)},
-	{const_cast<char*>("getSize"), scribus_getsize, METH_VARARGS, tr(scribus_getsize__doc__)},
-	{const_cast<char*>("getTextColor"), scribus_getlinecolor, METH_VARARGS, tr(scribus_getlinecolor__doc__)},
-	{const_cast<char*>("getTextLength"), scribus_gettextsize, METH_VARARGS, tr(scribus_gettextsize__doc__)},
-	{const_cast<char*>("getTextLines"), scribus_gettextlines, METH_VARARGS, tr(scribus_gettextlines__doc__)},
-	{const_cast<char*>("getText"), scribus_getframetext, METH_VARARGS, tr(scribus_getframetext__doc__)},
-	{const_cast<char*>("getTextShade"), scribus_getlineshade, METH_VARARGS, tr(scribus_getlineshade__doc__)},
-	{const_cast<char*>("getUnit"), (PyCFunction)scribus_getunit, METH_NOARGS, tr(scribus_getunit__doc__)},
-	{const_cast<char*>("getVGuides"), (PyCFunction)scribus_getVguides, METH_NOARGS, tr(scribus_getVguides__doc__)},
-	{const_cast<char*>("getXFontNames"), (PyCFunction)scribus_xfontnames, METH_NOARGS, tr(scribus_xfontnames__doc__)},
-	{const_cast<char*>("gotoPage"), scribus_gotopage, METH_VARARGS, tr(scribus_gotopage__doc__)},
-	{const_cast<char*>("groupObjects"), scribus_groupobj, METH_VARARGS, tr(scribus_groupobj__doc__)},
-	{const_cast<char*>("haveDoc"), (PyCFunction)scribus_havedoc, METH_NOARGS, tr(scribus_havedoc__doc__)},
-	{const_cast<char*>("placeSVG"), scribus_placesvg, METH_VARARGS, tr(scribus_placesvg__doc__)},
-	{const_cast<char*>("placeEPS"), scribus_placeeps, METH_VARARGS, tr(scribus_placeeps__doc__)},
-	{const_cast<char*>("placeSXD"), scribus_placesxd, METH_VARARGS, tr(scribus_placesxd__doc__)},
-	{const_cast<char*>("placeODG"), scribus_placeodg, METH_VARARGS, tr(scribus_placeodg__doc__)},
-	{const_cast<char*>("insertText"), scribus_inserttext, METH_VARARGS, tr(scribus_inserttext__doc__)},
-	{const_cast<char*>("isLayerPrintable"), scribus_glayerprint, METH_VARARGS, tr(scribus_glayerprint__doc__)},
-	{const_cast<char*>("isLayerVisible"), scribus_glayervisib, METH_VARARGS, tr(scribus_glayervisib__doc__)},
-	{const_cast<char*>("isLayerLocked"), scribus_glayerlock, METH_VARARGS, tr(scribus_glayerlock__doc__)},
-	{const_cast<char*>("isLayerOutlined"), scribus_glayeroutline, METH_VARARGS, tr(scribus_glayeroutline__doc__)},
-	{const_cast<char*>("isLayerFlow"), scribus_glayerflow, METH_VARARGS, tr(scribus_glayerflow__doc__)},
-	{const_cast<char*>("isLocked"), scribus_islocked, METH_VARARGS, tr(scribus_islocked__doc__)},
-	{const_cast<char*>("linkTextFrames"), scribus_linktextframes, METH_VARARGS, tr(scribus_linktextframes__doc__)},
-	{const_cast<char*>("loadImage"), scribus_loadimage, METH_VARARGS, tr(scribus_loadimage__doc__)},
-	{const_cast<char*>("loadStylesFromFile"), scribus_loadstylesfromfile, METH_VARARGS, tr(scribus_loadstylesfromfile__doc__)},
-	{const_cast<char*>("lockObject"), scribus_lockobject, METH_VARARGS, tr(scribus_lockobject__doc__)},
-	{const_cast<char*>("masterPageNames"), (PyCFunction)scribus_masterpagenames, METH_NOARGS, tr(scribus_masterpagenames__doc__)},
-	{const_cast<char*>("messagebarText"), scribus_messagebartext, METH_VARARGS, tr(scribus_messagebartext__doc__)},
-	{const_cast<char*>("messageBox"), (PyCFunction)scribus_messdia, METH_VARARGS|METH_KEYWORDS, tr(scribus_messdia__doc__)},
-	{const_cast<char*>("moveObjectAbs"), scribus_moveobjabs, METH_VARARGS, tr(scribus_moveobjabs__doc__)},
-	{const_cast<char*>("moveObject"), scribus_moveobjrel, METH_VARARGS, tr(scribus_moveobjrel__doc__)},
-	{const_cast<char*>("newDocDialog"), (PyCFunction)scribus_newdocdia, METH_NOARGS, tr(scribus_newdocdia__doc__)},
-	{const_cast<char*>("newDoc"), scribus_newdoc, METH_VARARGS, tr(scribus_newdoc__doc__)},
-	{const_cast<char*>("newDocument"), scribus_newdocument, METH_VARARGS, tr(scribus_newdocument__doc__)},
-	{const_cast<char*>("newPage"), scribus_newpage, METH_VARARGS, tr(scribus_newpage__doc__)},
-	{const_cast<char*>("newStyleDialog"), scribus_newstyledialog, METH_NOARGS, tr(scribus_newstyledialog__doc__)},
-	{const_cast<char*>("objectExists"),scribus_objectexists, METH_VARARGS, tr(scribus_objectexists__doc__)},
-	{const_cast<char*>("openDoc"), scribus_opendoc, METH_VARARGS, tr(scribus_opendoc__doc__)},
-	{const_cast<char*>("pageCount"), (PyCFunction)scribus_pagecount, METH_NOARGS, tr(scribus_pagecount__doc__)},
+  {const_cast<char*>("changeColor"), scribus_setcolor, METH_VARARGS, formatDocstring(scribus_setcolor__doc__)},
+	{const_cast<char*>("closeDoc"), (PyCFunction)scribus_closedoc, METH_NOARGS, formatDocstring(scribus_closedoc__doc__)},
+	{const_cast<char*>("closeMasterPage"), (PyCFunction)scribus_closemasterpage, METH_NOARGS, formatDocstring(scribus_closemasterpage__doc__)},
+	{const_cast<char*>("createBezierLine"), scribus_bezierline, METH_VARARGS, formatDocstring(scribus_bezierline__doc__)},
+	{const_cast<char*>("createEllipse"), scribus_newellipse, METH_VARARGS, formatDocstring(scribus_newellipse__doc__)},
+	{const_cast<char*>("createImage"), scribus_newimage, METH_VARARGS, formatDocstring(scribus_newimage__doc__)},
+	{const_cast<char*>("createLayer"), scribus_createlayer, METH_VARARGS, formatDocstring(scribus_createlayer__doc__)},
+	{const_cast<char*>("createLine"), scribus_newline, METH_VARARGS, formatDocstring(scribus_newline__doc__)},
+	{const_cast<char*>("createMasterPage"), scribus_createmasterpage, METH_VARARGS, formatDocstring(scribus_createmasterpage__doc__)},
+	{const_cast<char*>("createPathText"), scribus_pathtext, METH_VARARGS, formatDocstring(scribus_pathtext__doc__)},
+	{const_cast<char*>("createPolygon"), scribus_polygon, METH_VARARGS, formatDocstring(scribus_polygon__doc__)},
+	{const_cast<char*>("createPolyLine"), scribus_polyline, METH_VARARGS, formatDocstring(scribus_polyline__doc__)},
+	{const_cast<char*>("createRect"), scribus_newrect, METH_VARARGS, formatDocstring(scribus_newrect__doc__)},
+	{const_cast<char*>("createText"), scribus_newtext, METH_VARARGS, formatDocstring(scribus_newtext__doc__)},
+	{const_cast<char*>("createParagraphStyle"), (PyCFunction)scribus_createparagraphstyle, METH_KEYWORDS, formatDocstring(scribus_createparagraphstyle__doc__)},
+	{const_cast<char*>("createCharStyle"), (PyCFunction)scribus_createcharstyle, METH_KEYWORDS, formatDocstring(scribus_createcharstyle__doc__)},
+	{const_cast<char*>("currentPage"), (PyCFunction)scribus_actualpage, METH_NOARGS, formatDocstring(scribus_actualpage__doc__)},
+	{const_cast<char*>("defineColor"), scribus_newcolor, METH_VARARGS, formatDocstring(scribus_newcolor__doc__)},
+	{const_cast<char*>("deleteColor"), scribus_delcolor, METH_VARARGS, formatDocstring(scribus_delcolor__doc__)},
+	{const_cast<char*>("deleteLayer"), scribus_removelayer, METH_VARARGS, formatDocstring(scribus_removelayer__doc__)},
+	{const_cast<char*>("deleteMasterPage"), scribus_deletemasterpage, METH_VARARGS, formatDocstring(scribus_deletemasterpage__doc__)},
+	{const_cast<char*>("deleteObject"), scribus_deleteobj, METH_VARARGS, formatDocstring(scribus_deleteobj__doc__)},
+	{const_cast<char*>("deletePage"), scribus_deletepage, METH_VARARGS, formatDocstring(scribus_deletepage__doc__)},
+	{const_cast<char*>("deleteText"), scribus_deletetext, METH_VARARGS, formatDocstring(scribus_deletetext__doc__)},
+	{const_cast<char*>("deselectAll"), (PyCFunction)scribus_deselect, METH_NOARGS, formatDocstring(scribus_deselect__doc__)},
+	{const_cast<char*>("docChanged"), scribus_docchanged, METH_VARARGS, formatDocstring(scribus_docchanged__doc__)},
+	{const_cast<char*>("editMasterPage"), scribus_editmasterpage, METH_VARARGS, formatDocstring(scribus_editmasterpage__doc__)},
+	{const_cast<char*>("fileDialog"), (PyCFunction)scribus_filedia, METH_VARARGS|METH_KEYWORDS, formatDocstring(scribus_filedia__doc__)},
+	{const_cast<char*>("getActiveLayer"), (PyCFunction)scribus_getactlayer, METH_NOARGS, formatDocstring(scribus_getactlayer__doc__)},
+	{const_cast<char*>("getAllObjects"), scribus_getallobj, METH_VARARGS, formatDocstring(scribus_getallobj__doc__)},
+	{const_cast<char*>("getAllStyles"), (PyCFunction)scribus_getstylenames, METH_NOARGS, formatDocstring(scribus_getstylenames__doc__)},
+	{const_cast<char*>("getAllText"), scribus_gettext, METH_VARARGS, formatDocstring(scribus_gettext__doc__)},
+	{const_cast<char*>("getColorNames"), (PyCFunction)scribus_colornames, METH_NOARGS, formatDocstring(scribus_colornames__doc__)},
+	{const_cast<char*>("getColor"), scribus_getcolor, METH_VARARGS, formatDocstring(scribus_getcolor__doc__)},
+	{const_cast<char*>("getColorAsRGB"), scribus_getcolorasrgb, METH_VARARGS, formatDocstring(scribus_getcolorasrgb__doc__)},
+	{const_cast<char*>("isSpotColor"), scribus_isspotcolor, METH_VARARGS, formatDocstring(scribus_isspotcolor__doc__)},
+	{const_cast<char*>("setSpotColor"), scribus_setspotcolor, METH_VARARGS, formatDocstring(scribus_setspotcolor__doc__)},
+	{const_cast<char*>("getTextDistances"), scribus_gettextdistances, METH_VARARGS, formatDocstring(scribus_gettextdistances__doc__)},
+	{const_cast<char*>("getColumnGap"), scribus_getcolumngap, METH_VARARGS, formatDocstring(scribus_getcolumngap__doc__)},
+	{const_cast<char*>("getColumns"), scribus_getcolumns, METH_VARARGS, formatDocstring(scribus_getcolumns__doc__)},
+	{const_cast<char*>("getCornerRadius"), scribus_getcornerrad, METH_VARARGS, formatDocstring(scribus_getcornerrad__doc__)},
+	{const_cast<char*>("getFillColor"), scribus_getfillcolor, METH_VARARGS, formatDocstring(scribus_getfillcolor__doc__)},
+	{const_cast<char*>("getFillShade"), scribus_getfillshade, METH_VARARGS, formatDocstring(scribus_getfillshade__doc__)},
+	{const_cast<char*>("getFillBlendmode"), scribus_getfillblend, METH_VARARGS, formatDocstring(scribus_getfillblend__doc__)},
+	{const_cast<char*>("getFillTransparency"), scribus_getfilltrans, METH_VARARGS, formatDocstring(scribus_getfilltrans__doc__)},
+	{const_cast<char*>("getFontNames"), (PyCFunction)scribus_fontnames, METH_NOARGS, formatDocstring(scribus_fontnames__doc__)},
+	{const_cast<char*>("getFont"), scribus_getfont, METH_VARARGS, formatDocstring(scribus_getfont__doc__)},
+	{const_cast<char*>("getFontSize"), scribus_getfontsize, METH_VARARGS, formatDocstring(scribus_getfontsize__doc__)},
+	{const_cast<char*>("getGuiLanguage"), (PyCFunction)scribus_getlanguage, METH_NOARGS, formatDocstring(scribus_getlanguage__doc__)},
+	{const_cast<char*>("getHGuides"), (PyCFunction)scribus_getHguides, METH_NOARGS, formatDocstring(scribus_getHguides__doc__)},
+	{const_cast<char*>("getImageFile"), scribus_getimgname, METH_VARARGS, formatDocstring(scribus_getimgname__doc__)},
+	{const_cast<char*>("getImageScale"), scribus_getimgscale, METH_VARARGS, formatDocstring(scribus_getimgscale__doc__)},
+	{const_cast<char*>("getLayers"), (PyCFunction)scribus_getlayers, METH_NOARGS, formatDocstring(scribus_getlayers__doc__)},
+	{const_cast<char*>("getLayerBlendmode"), scribus_glayerblend, METH_VARARGS, formatDocstring(scribus_glayerblend__doc__)},
+	{const_cast<char*>("getLayerTransparency"), scribus_glayertrans, METH_VARARGS, formatDocstring(scribus_glayertrans__doc__)},
+	{const_cast<char*>("getLineCap"), scribus_getlineend, METH_VARARGS, formatDocstring(scribus_getlineend__doc__)},
+	{const_cast<char*>("getLineColor"), scribus_getlinecolor, METH_VARARGS, formatDocstring(scribus_getlinecolor__doc__)},
+	{const_cast<char*>("getLineShade"), scribus_getlineshade, METH_VARARGS, formatDocstring(scribus_getlineshade__doc__)},
+	{const_cast<char*>("getLineBlendmode"), scribus_getlineblend, METH_VARARGS, formatDocstring(scribus_getlineblend__doc__)},
+	{const_cast<char*>("getLineTransparency"), scribus_getlinetrans, METH_VARARGS, formatDocstring(scribus_getlinetrans__doc__)},
+	{const_cast<char*>("getLineJoin"), scribus_getlinejoin, METH_VARARGS, formatDocstring(scribus_getlinejoin__doc__)},
+	{const_cast<char*>("getLineSpacing"), scribus_getlinespace, METH_VARARGS, formatDocstring(scribus_getlinespace__doc__)},
+	{const_cast<char*>("getLineStyle"), scribus_getlinestyle, METH_VARARGS, formatDocstring(scribus_getlinestyle__doc__)},
+	{const_cast<char*>("getLineWidth"), scribus_getlinewidth, METH_VARARGS, formatDocstring(scribus_getlinewidth__doc__)},
+	{const_cast<char*>("getPageItems"), (PyCFunction)scribus_getpageitems, METH_NOARGS, formatDocstring(scribus_getpageitems__doc__)},
+	{const_cast<char*>("getPageMargins"), (PyCFunction)scribus_getpagemargins, METH_NOARGS, formatDocstring(scribus_getpagemargins__doc__)},
+	{const_cast<char*>("getPageType"), (PyCFunction)scribus_pageposition, METH_VARARGS, formatDocstring(scribus_pageposition__doc__)},
+	{const_cast<char*>("getPageSize"), (PyCFunction)scribus_pagedimension, METH_NOARGS, formatDocstring(scribus_pagedimension__doc__)},
+	{const_cast<char*>("getPageNSize"), scribus_pagensize, METH_VARARGS, formatDocstring(scribus_pagensize__doc__)},
+	{const_cast<char*>("getPageNMargins"), scribus_pagenmargins, METH_VARARGS, formatDocstring(scribus_pagenmargins__doc__)},
+	{const_cast<char*>("importPage"), scribus_importpage, METH_VARARGS, formatDocstring(scribus_importpage__doc__)},
+	{const_cast<char*>("getPosition"), scribus_getposi, METH_VARARGS, formatDocstring(scribus_getposi__doc__)},
+	{const_cast<char*>("getRotation"), scribus_getrotation, METH_VARARGS, formatDocstring(scribus_getrotation__doc__)},
+	{const_cast<char*>("getSelectedObject"), scribus_getselobjnam, METH_VARARGS, formatDocstring(scribus_getselobjnam__doc__)},
+	{const_cast<char*>("getSize"), scribus_getsize, METH_VARARGS, formatDocstring(scribus_getsize__doc__)},
+	{const_cast<char*>("getTextColor"), scribus_getlinecolor, METH_VARARGS, formatDocstring(scribus_getlinecolor__doc__)},
+	{const_cast<char*>("getTextLength"), scribus_gettextsize, METH_VARARGS, formatDocstring(scribus_gettextsize__doc__)},
+	{const_cast<char*>("getTextLines"), scribus_gettextlines, METH_VARARGS, formatDocstring(scribus_gettextlines__doc__)},
+	{const_cast<char*>("getText"), scribus_getframetext, METH_VARARGS, formatDocstring(scribus_getframetext__doc__)},
+	{const_cast<char*>("getTextShade"), scribus_getlineshade, METH_VARARGS, formatDocstring(scribus_getlineshade__doc__)},
+	{const_cast<char*>("getUnit"), (PyCFunction)scribus_getunit, METH_NOARGS, formatDocstring(scribus_getunit__doc__)},
+	{const_cast<char*>("getVGuides"), (PyCFunction)scribus_getVguides, METH_NOARGS, formatDocstring(scribus_getVguides__doc__)},
+	{const_cast<char*>("getXFontNames"), (PyCFunction)scribus_xfontnames, METH_NOARGS, formatDocstring(scribus_xfontnames__doc__)},
+	{const_cast<char*>("gotoPage"), scribus_gotopage, METH_VARARGS, formatDocstring(scribus_gotopage__doc__)},
+	{const_cast<char*>("groupObjects"), scribus_groupobj, METH_VARARGS, formatDocstring(scribus_groupobj__doc__)},
+	{const_cast<char*>("haveDoc"), (PyCFunction)scribus_havedoc, METH_NOARGS, formatDocstring(scribus_havedoc__doc__)},
+	{const_cast<char*>("placeSVG"), scribus_placesvg, METH_VARARGS, formatDocstring(scribus_placesvg__doc__)},
+	{const_cast<char*>("placeEPS"), scribus_placeeps, METH_VARARGS, formatDocstring(scribus_placeeps__doc__)},
+	{const_cast<char*>("placeSXD"), scribus_placesxd, METH_VARARGS, formatDocstring(scribus_placesxd__doc__)},
+	{const_cast<char*>("placeODG"), scribus_placeodg, METH_VARARGS, formatDocstring(scribus_placeodg__doc__)},
+	{const_cast<char*>("insertText"), scribus_inserttext, METH_VARARGS, formatDocstring(scribus_inserttext__doc__)},
+	{const_cast<char*>("isLayerPrintable"), scribus_glayerprint, METH_VARARGS, formatDocstring(scribus_glayerprint__doc__)},
+	{const_cast<char*>("isLayerVisible"), scribus_glayervisib, METH_VARARGS, formatDocstring(scribus_glayervisib__doc__)},
+	{const_cast<char*>("isLayerLocked"), scribus_glayerlock, METH_VARARGS, formatDocstring(scribus_glayerlock__doc__)},
+	{const_cast<char*>("isLayerOutlined"), scribus_glayeroutline, METH_VARARGS, formatDocstring(scribus_glayeroutline__doc__)},
+	{const_cast<char*>("isLayerFlow"), scribus_glayerflow, METH_VARARGS, formatDocstring(scribus_glayerflow__doc__)},
+	{const_cast<char*>("isLocked"), scribus_islocked, METH_VARARGS, formatDocstring(scribus_islocked__doc__)},
+	{const_cast<char*>("linkTextFrames"), scribus_linktextframes, METH_VARARGS, formatDocstring(scribus_linktextframes__doc__)},
+	{const_cast<char*>("loadImage"), scribus_loadimage, METH_VARARGS, formatDocstring(scribus_loadimage__doc__)},
+	{const_cast<char*>("loadStylesFromFile"), scribus_loadstylesfromfile, METH_VARARGS, formatDocstring(scribus_loadstylesfromfile__doc__)},
+	{const_cast<char*>("lockObject"), scribus_lockobject, METH_VARARGS, formatDocstring(scribus_lockobject__doc__)},
+	{const_cast<char*>("masterPageNames"), (PyCFunction)scribus_masterpagenames, METH_NOARGS, formatDocstring(scribus_masterpagenames__doc__)},
+	{const_cast<char*>("messagebarText"), scribus_messagebartext, METH_VARARGS, formatDocstring(scribus_messagebartext__doc__)},
+	{const_cast<char*>("messageBox"), (PyCFunction)scribus_messdia, METH_VARARGS|METH_KEYWORDS, formatDocstring(scribus_messdia__doc__)},
+	{const_cast<char*>("moveObjectAbs"), scribus_moveobjabs, METH_VARARGS, formatDocstring(scribus_moveobjabs__doc__)},
+  {const_cast<char*>("moveObject"), scribus_moveobjrel, METH_VARARGS, formatDocstring(scribus_moveobjrel__doc__)},
+	{const_cast<char*>("newDocDialog"), (PyCFunction)scribus_newdocdia, METH_NOARGS, formatDocstring(scribus_newdocdia__doc__)},
+	{const_cast<char*>("newDoc"), scribus_newdoc, METH_VARARGS, formatDocstring(scribus_newdoc__doc__)},
+	{const_cast<char*>("newDocument"), scribus_newdocument, METH_VARARGS, formatDocstring(scribus_newdocument__doc__)},
+	{const_cast<char*>("newPage"), scribus_newpage, METH_VARARGS, formatDocstring(scribus_newpage__doc__)},
+	{const_cast<char*>("newStyleDialog"), scribus_newstyledialog, METH_NOARGS, formatDocstring(scribus_newstyledialog__doc__)},
+	{const_cast<char*>("objectExists"),scribus_objectexists, METH_VARARGS, formatDocstring(scribus_objectexists__doc__)},
+	{const_cast<char*>("openDoc"), scribus_opendoc, METH_VARARGS, formatDocstring(scribus_opendoc__doc__)},
+	{const_cast<char*>("pageCount"), (PyCFunction)scribus_pagecount, METH_NOARGS, formatDocstring(scribus_pagecount__doc__)},
 	{const_cast<char*>("pageDimension"), (PyCFunction)scribus_pagedimension, METH_NOARGS, "Obsolete function. Don't use it."},
-	{const_cast<char*>("progressReset"), (PyCFunction)scribus_progressreset, METH_NOARGS, tr(scribus_progressreset__doc__)},
-	{const_cast<char*>("progressSet"), scribus_progresssetprogress, METH_VARARGS, tr(scribus_progresssetprogress__doc__)},
-	{const_cast<char*>("progressTotal"), scribus_progresssettotalsteps, METH_VARARGS, tr(scribus_progresssettotalsteps__doc__)},
-	{const_cast<char*>("redrawAll"), (PyCFunction)scribus_redraw, METH_NOARGS, tr(scribus_redraw__doc__)},
-	{const_cast<char*>("renderFont"), (PyCFunction)scribus_renderfont, METH_KEYWORDS, tr(scribus_renderfont__doc__)},
-	{const_cast<char*>("replaceColor"), scribus_replcolor, METH_VARARGS, tr(scribus_replcolor__doc__)},
-	{const_cast<char*>("rotateObjectAbs"), scribus_rotobjabs, METH_VARARGS, tr(scribus_rotobjabs__doc__)},
-	{const_cast<char*>("rotateObject"), scribus_rotobjrel, METH_VARARGS, tr(scribus_rotobjrel__doc__)},
-	{const_cast<char*>("getDocName"), (PyCFunction)scribus_getdocname, METH_NOARGS, tr(scribus_getdocname__doc__)},
-	{const_cast<char*>("saveDocAs"), scribus_savedocas, METH_VARARGS, tr(scribus_savedocas__doc__)},
-	{const_cast<char*>("saveDoc"), (PyCFunction)scribus_savedoc, METH_NOARGS, tr(scribus_savedoc__doc__)},
-	{const_cast<char*>("savePageAsEPS"), scribus_savepageeps, METH_VARARGS, tr(scribus_savepageeps__doc__)},
-	{const_cast<char*>("scaleGroup"), scribus_scalegroup, METH_VARARGS, tr(scribus_scalegroup__doc__)},
-	{const_cast<char*>("scaleImage"), scribus_scaleimage, METH_VARARGS, tr(scribus_scaleimage__doc__)},
-	{const_cast<char*>("setImageScale"), scribus_setimagescale, METH_VARARGS, tr(scribus_setimagescale__doc__)},
-	{const_cast<char*>("selectionCount"), (PyCFunction)scribus_selcount, METH_NOARGS, tr(scribus_selcount__doc__)},
-	{const_cast<char*>("selectObject"), scribus_selectobj, METH_VARARGS, tr(scribus_selectobj__doc__)},
-	{const_cast<char*>("selectText"), scribus_selecttext, METH_VARARGS, tr(scribus_selecttext__doc__)},
-	{const_cast<char*>("sentToLayer"), scribus_senttolayer, METH_VARARGS, tr(scribus_senttolayer__doc__)},
-	{const_cast<char*>("setActiveLayer"), scribus_setactlayer, METH_VARARGS, tr(scribus_setactlayer__doc__)},
-	{const_cast<char*>("setPDFBookmark"), scribus_setpdfbookmark, METH_VARARGS, tr(scribus_setpdfbookmark__doc__)},
-	{const_cast<char*>("isPDFBookmark"), scribus_ispdfbookmark, METH_VARARGS, tr(scribus_ispdfbookmark__doc__)},
-	{const_cast<char*>("setTextDistances"), scribus_settextdistances, METH_VARARGS, tr(scribus_settextdistances__doc__)},
-	{const_cast<char*>("setColumnGap"), scribus_setcolumngap, METH_VARARGS, tr(scribus_setcolumngap__doc__)},
-	{const_cast<char*>("setColumns"), scribus_setcolumns, METH_VARARGS, tr(scribus_setcolumns__doc__)},
-	{const_cast<char*>("setCornerRadius"), scribus_setcornerrad, METH_VARARGS, tr(scribus_setcornerrad__doc__)},
-	{const_cast<char*>("setCursor"), scribus_setcursor, METH_VARARGS, tr(scribus_setcursor__doc__)},
-	{const_cast<char*>("setDocType"), scribus_setdoctype, METH_VARARGS, tr(scribus_setdoctype__doc__)},
-	{const_cast<char*>("setFillColor"), scribus_setfillcolor, METH_VARARGS, tr(scribus_setfillcolor__doc__)},
-	{const_cast<char*>("setFillTransparency"), scribus_setfilltrans, METH_VARARGS, tr(scribus_setfilltrans__doc__)},
-	{const_cast<char*>("setFillBlendmode"), scribus_setfillblend, METH_VARARGS, tr(scribus_setfillblend__doc__)},
-	{const_cast<char*>("setFillShade"), scribus_setfillshade, METH_VARARGS, tr(scribus_setfillshade__doc__)},
-	{const_cast<char*>("setFont"), scribus_setfont, METH_VARARGS, tr(scribus_setfont__doc__)},
-	{const_cast<char*>("setFontSize"), scribus_setfontsize, METH_VARARGS, tr(scribus_setfontsize__doc__)},
-	{const_cast<char*>("setGradientFill"), scribus_setgradfill, METH_VARARGS, tr(scribus_setgradfill__doc__)},
-	{const_cast<char*>("setGradientStop"), scribus_setgradstop, METH_VARARGS, tr(scribus_setgradstop__doc__)},
-	{const_cast<char*>("setHGuides"), scribus_setHguides, METH_VARARGS, tr(scribus_setHguides__doc__)},
-	{const_cast<char*>("setInfo"), scribus_setinfo, METH_VARARGS, tr(scribus_setinfo__doc__)},
-	{const_cast<char*>("setLayerPrintable"), scribus_layerprint, METH_VARARGS, tr(scribus_layerprint__doc__)},
-	{const_cast<char*>("setLayerVisible"), scribus_layervisible, METH_VARARGS, tr(scribus_layervisible__doc__)},
-	{const_cast<char*>("setLayerLocked"), scribus_layerlock, METH_VARARGS, tr(scribus_layerlock__doc__)},
-	{const_cast<char*>("setLayerOutlined"), scribus_layeroutline, METH_VARARGS, tr(scribus_layeroutline__doc__)},
-	{const_cast<char*>("setLayerFlow"), scribus_layerflow, METH_VARARGS, tr(scribus_layerflow__doc__)},
-	{const_cast<char*>("setLayerBlendmode"), scribus_layerblend, METH_VARARGS, tr(scribus_layerblend__doc__)},
-	{const_cast<char*>("setLayerTransparency"), scribus_layertrans, METH_VARARGS, tr(scribus_layertrans__doc__)},
-	{const_cast<char*>("setLineCap"), scribus_setlineend, METH_VARARGS, tr(scribus_setlineend__doc__)},
-	{const_cast<char*>("setLineColor"), scribus_setlinecolor, METH_VARARGS, tr(scribus_setlinecolor__doc__)},
-	{const_cast<char*>("setLineTransparency"), scribus_setlinetrans, METH_VARARGS, tr(scribus_setlinetrans__doc__)},
-	{const_cast<char*>("setLineBlendmode"), scribus_setlineblend, METH_VARARGS, tr(scribus_setlineblend__doc__)},
-	{const_cast<char*>("setLineJoin"), scribus_setlinejoin, METH_VARARGS, tr(scribus_setlinejoin__doc__)},
-	{const_cast<char*>("setLineShade"), scribus_setlineshade, METH_VARARGS, tr(scribus_setlineshade__doc__)},
-	{const_cast<char*>("setLineSpacing"), scribus_setlinespace, METH_VARARGS, tr(scribus_setlinespace__doc__)},
-	{const_cast<char*>("setLineSpacingMode"), scribus_setlinespacemode, METH_VARARGS, tr(scribus_setlinespacemode__doc__)},
-	{const_cast<char*>("setLineStyle"), scribus_setlinestyle, METH_VARARGS, tr(scribus_setlinestyle__doc__)},
-	{const_cast<char*>("setLineWidth"), scribus_setlinewidth, METH_VARARGS, tr(scribus_setlinewidth__doc__)},
-	{const_cast<char*>("setMargins"), scribus_setmargins, METH_VARARGS, tr(scribus_setmargins__doc__)},
-	{const_cast<char*>("setBaseLine"), scribus_setbaseline, METH_VARARGS, tr(scribus_setbaseline__doc__)},
-	{const_cast<char*>("setMultiLine"), scribus_setmultiline, METH_VARARGS, tr(scribus_setmultiline__doc__)},
+	{const_cast<char*>("progressReset"), (PyCFunction)scribus_progressreset, METH_NOARGS, formatDocstring(scribus_progressreset__doc__)},
+	{const_cast<char*>("progressSet"), scribus_progresssetprogress, METH_VARARGS, formatDocstring(scribus_progresssetprogress__doc__)},
+	{const_cast<char*>("progressTotal"), scribus_progresssettotalsteps, METH_VARARGS, formatDocstring(scribus_progresssettotalsteps__doc__)},
+	{const_cast<char*>("redrawAll"), (PyCFunction)scribus_redraw, METH_NOARGS, formatDocstring(scribus_redraw__doc__)},
+	{const_cast<char*>("renderFont"), (PyCFunction)scribus_renderfont, METH_KEYWORDS, formatDocstring(scribus_renderfont__doc__)},
+	{const_cast<char*>("replaceColor"), scribus_replcolor, METH_VARARGS, formatDocstring(scribus_replcolor__doc__)},
+	{const_cast<char*>("rotateObjectAbs"), scribus_rotobjabs, METH_VARARGS, formatDocstring(scribus_rotobjabs__doc__)},
+	{const_cast<char*>("rotateObject"), scribus_rotobjrel, METH_VARARGS, formatDocstring(scribus_rotobjrel__doc__)},
+	{const_cast<char*>("getDocName"), (PyCFunction)scribus_getdocname, METH_NOARGS, formatDocstring(scribus_getdocname__doc__)},
+	{const_cast<char*>("saveDocAs"), scribus_savedocas, METH_VARARGS, formatDocstring(scribus_savedocas__doc__)},
+	{const_cast<char*>("saveDoc"), (PyCFunction)scribus_savedoc, METH_NOARGS, formatDocstring(scribus_savedoc__doc__)},
+	{const_cast<char*>("savePageAsEPS"), scribus_savepageeps, METH_VARARGS, formatDocstring(scribus_savepageeps__doc__)},
+	{const_cast<char*>("scaleGroup"), scribus_scalegroup, METH_VARARGS, formatDocstring(scribus_scalegroup__doc__)},
+	{const_cast<char*>("scaleImage"), scribus_scaleimage, METH_VARARGS, formatDocstring(scribus_scaleimage__doc__)},
+	{const_cast<char*>("setImageScale"), scribus_setimagescale, METH_VARARGS, formatDocstring(scribus_setimagescale__doc__)},
+	{const_cast<char*>("selectionCount"), (PyCFunction)scribus_selcount, METH_NOARGS, formatDocstring(scribus_selcount__doc__)},
+	{const_cast<char*>("selectObject"), scribus_selectobj, METH_VARARGS, formatDocstring(scribus_selectobj__doc__)},
+	{const_cast<char*>("selectText"), scribus_selecttext, METH_VARARGS, formatDocstring(scribus_selecttext__doc__)},
+	{const_cast<char*>("sentToLayer"), scribus_senttolayer, METH_VARARGS, formatDocstring(scribus_senttolayer__doc__)},
+	{const_cast<char*>("setActiveLayer"), scribus_setactlayer, METH_VARARGS, formatDocstring(scribus_setactlayer__doc__)},
+	{const_cast<char*>("setPDFBookmark"), scribus_setpdfbookmark, METH_VARARGS, formatDocstring(scribus_setpdfbookmark__doc__)},
+	{const_cast<char*>("isPDFBookmark"), scribus_ispdfbookmark, METH_VARARGS, formatDocstring(scribus_ispdfbookmark__doc__)},
+	{const_cast<char*>("setTextDistances"), scribus_settextdistances, METH_VARARGS, formatDocstring(scribus_settextdistances__doc__)},
+	{const_cast<char*>("setColumnGap"), scribus_setcolumngap, METH_VARARGS, formatDocstring(scribus_setcolumngap__doc__)},
+	{const_cast<char*>("setColumns"), scribus_setcolumns, METH_VARARGS, formatDocstring(scribus_setcolumns__doc__)},
+	{const_cast<char*>("setCornerRadius"), scribus_setcornerrad, METH_VARARGS, formatDocstring(scribus_setcornerrad__doc__)},
+	{const_cast<char*>("setCursor"), scribus_setcursor, METH_VARARGS, formatDocstring(scribus_setcursor__doc__)},
+	{const_cast<char*>("setDocType"), scribus_setdoctype, METH_VARARGS, formatDocstring(scribus_setdoctype__doc__)},
+	{const_cast<char*>("setFillColor"), scribus_setfillcolor, METH_VARARGS, formatDocstring(scribus_setfillcolor__doc__)},
+	{const_cast<char*>("setFillTransparency"), scribus_setfilltrans, METH_VARARGS, formatDocstring(scribus_setfilltrans__doc__)},
+	{const_cast<char*>("setFillBlendmode"), scribus_setfillblend, METH_VARARGS, formatDocstring(scribus_setfillblend__doc__)},
+	{const_cast<char*>("setFillShade"), scribus_setfillshade, METH_VARARGS, formatDocstring(scribus_setfillshade__doc__)},
+	{const_cast<char*>("setFont"), scribus_setfont, METH_VARARGS, formatDocstring(scribus_setfont__doc__)},
+	{const_cast<char*>("setFontSize"), scribus_setfontsize, METH_VARARGS, formatDocstring(scribus_setfontsize__doc__)},
+	{const_cast<char*>("setGradientFill"), scribus_setgradfill, METH_VARARGS, formatDocstring(scribus_setgradfill__doc__)},
+	{const_cast<char*>("setGradientStop"), scribus_setgradstop, METH_VARARGS, formatDocstring(scribus_setgradstop__doc__)},
+	{const_cast<char*>("setHGuides"), scribus_setHguides, METH_VARARGS, formatDocstring(scribus_setHguides__doc__)},
+	{const_cast<char*>("setInfo"), scribus_setinfo, METH_VARARGS, formatDocstring(scribus_setinfo__doc__)},
+	{const_cast<char*>("setLayerPrintable"), scribus_layerprint, METH_VARARGS, formatDocstring(scribus_layerprint__doc__)},
+	{const_cast<char*>("setLayerVisible"), scribus_layervisible, METH_VARARGS, formatDocstring(scribus_layervisible__doc__)},
+	{const_cast<char*>("setLayerLocked"), scribus_layerlock, METH_VARARGS, formatDocstring(scribus_layerlock__doc__)},
+	{const_cast<char*>("setLayerOutlined"), scribus_layeroutline, METH_VARARGS, formatDocstring(scribus_layeroutline__doc__)},
+	{const_cast<char*>("setLayerFlow"), scribus_layerflow, METH_VARARGS, formatDocstring(scribus_layerflow__doc__)},
+	{const_cast<char*>("setLayerBlendmode"), scribus_layerblend, METH_VARARGS, formatDocstring(scribus_layerblend__doc__)},
+	{const_cast<char*>("setLayerTransparency"), scribus_layertrans, METH_VARARGS, formatDocstring(scribus_layertrans__doc__)},
+	{const_cast<char*>("setLineCap"), scribus_setlineend, METH_VARARGS, formatDocstring(scribus_setlineend__doc__)},
+	{const_cast<char*>("setLineColor"), scribus_setlinecolor, METH_VARARGS, formatDocstring(scribus_setlinecolor__doc__)},
+	{const_cast<char*>("setLineTransparency"), scribus_setlinetrans, METH_VARARGS, formatDocstring(scribus_setlinetrans__doc__)},
+	{const_cast<char*>("setLineBlendmode"), scribus_setlineblend, METH_VARARGS, formatDocstring(scribus_setlineblend__doc__)},
+	{const_cast<char*>("setLineJoin"), scribus_setlinejoin, METH_VARARGS, formatDocstring(scribus_setlinejoin__doc__)},
+	{const_cast<char*>("setLineShade"), scribus_setlineshade, METH_VARARGS, formatDocstring(scribus_setlineshade__doc__)},
+	{const_cast<char*>("setLineSpacing"), scribus_setlinespace, METH_VARARGS, formatDocstring(scribus_setlinespace__doc__)},
+	{const_cast<char*>("setLineSpacingMode"), scribus_setlinespacemode, METH_VARARGS, formatDocstring(scribus_setlinespacemode__doc__)},
+	{const_cast<char*>("setLineStyle"), scribus_setlinestyle, METH_VARARGS, formatDocstring(scribus_setlinestyle__doc__)},
+	{const_cast<char*>("setLineWidth"), scribus_setlinewidth, METH_VARARGS, formatDocstring(scribus_setlinewidth__doc__)},
+	{const_cast<char*>("setMargins"), scribus_setmargins, METH_VARARGS, formatDocstring(scribus_setmargins__doc__)},
+	{const_cast<char*>("setBaseLine"), scribus_setbaseline, METH_VARARGS, formatDocstring(scribus_setbaseline__doc__)},
+	{const_cast<char*>("setMultiLine"), scribus_setmultiline, METH_VARARGS, formatDocstring(scribus_setmultiline__doc__)},
 	// duplicity? {"setMultiLine", scribus_setmultiline, METH_VARARGS, "TODO: docstring"},
-	{const_cast<char*>("setRedraw"), scribus_setredraw, METH_VARARGS, tr(scribus_setredraw__doc__)},
+	{const_cast<char*>("setRedraw"), scribus_setredraw, METH_VARARGS, formatDocstring(scribus_setredraw__doc__)},
 	// missing? {"setSelectedObject", scribus_setselobjnam, METH_VARARGS, "Returns the Name of the selecteted Object. \"nr\" if given indicates the Number of the selected Object, e.g. 0 means the first selected Object, 1 means the second selected Object and so on."},
-	{const_cast<char*>("hyphenateText"), scribus_hyphenatetext, METH_VARARGS, tr(scribus_hyphenatetext__doc__)},
-	{const_cast<char*>("dehyphenateText"), scribus_dehyphenatetext, METH_VARARGS, tr(scribus_dehyphenatetext__doc__)},
-	{const_cast<char*>("setScaleImageToFrame"), (PyCFunction)scribus_setscaleimagetoframe, METH_KEYWORDS, tr(scribus_setscaleimagetoframe__doc__)},
-	{const_cast<char*>("setStyle"), scribus_setstyle, METH_VARARGS, tr(scribus_setstyle__doc__)},
-	{const_cast<char*>("setTextAlignment"), scribus_setalign, METH_VARARGS, tr(scribus_setalign__doc__)},
-	{const_cast<char*>("setTextColor"), scribus_settextfill, METH_VARARGS, tr(scribus_settextfill__doc__)},
-	{const_cast<char*>("setText"), scribus_setboxtext, METH_VARARGS, tr(scribus_setboxtext__doc__)},
-	{const_cast<char*>("setTextScalingH"), scribus_settextscalingh, METH_VARARGS, tr(scribus_settextscalingh__doc__)},
-	{const_cast<char*>("setTextScalingV"), scribus_settextscalingv, METH_VARARGS, tr(scribus_settextscalingv__doc__)},
-	{const_cast<char*>("setTextShade"), scribus_settextshade, METH_VARARGS, tr(scribus_settextshade__doc__)},
-	{const_cast<char*>("setTextStroke"), scribus_settextstroke, METH_VARARGS, tr(scribus_settextstroke__doc__)},
-	{const_cast<char*>("setUnit"), scribus_setunit, METH_VARARGS, tr(scribus_setunit__doc__)},
-	{const_cast<char*>("setVGuides"), scribus_setVguides, METH_VARARGS, tr(scribus_setVguides__doc__)},
-	{const_cast<char*>("sizeObject"), scribus_sizeobjabs, METH_VARARGS, tr(scribus_sizeobjabs__doc__)},
-	{const_cast<char*>("statusMessage"), scribus_messagebartext, METH_VARARGS, tr(scribus_messagebartext__doc__)},
-	{const_cast<char*>("textFlowMode"), scribus_textflow, METH_VARARGS, tr(scribus_textflow__doc__)},
-	{const_cast<char*>("traceText"), scribus_tracetext, METH_VARARGS, tr(scribus_tracetext__doc__)},
-	{const_cast<char*>("unGroupObject"), scribus_ungroupobj, METH_VARARGS, tr(scribus_ungroupobj__doc__)},
-	{const_cast<char*>("unlinkTextFrames"), scribus_unlinktextframes, METH_VARARGS, tr(scribus_unlinktextframes__doc__)},
-	{const_cast<char*>("valueDialog"), scribus_valdialog, METH_VARARGS, tr(scribus_valdialog__doc__)},
-	{const_cast<char*>("textOverflows"), (PyCFunction)scribus_istextoverflowing, METH_KEYWORDS, tr(scribus_istextoverflowing__doc__)},
-	{const_cast<char*>("zoomDocument"), scribus_zoomdocument, METH_VARARGS, tr(scribus_zoomdocument__doc__)},
-	{const_cast<char*>("scrollDocument"), scribus_scrolldocument, METH_VARARGS, tr(scribus_scrolldocument__doc__)},
-	{const_cast<char*>("moveSelectionToBack"), (PyCFunction)scribus_moveselectiontoback, METH_NOARGS, tr(scribus_moveselectiontoback__doc__)},
-	{const_cast<char*>("moveSelectionToFront"), (PyCFunction)scribus_moveselectiontofront, METH_NOARGS, tr(scribus_moveselectiontofront__doc__)},
+	{const_cast<char*>("hyphenateText"), scribus_hyphenatetext, METH_VARARGS, formatDocstring(scribus_hyphenatetext__doc__)},
+	{const_cast<char*>("dehyphenateText"), scribus_dehyphenatetext, METH_VARARGS, formatDocstring(scribus_dehyphenatetext__doc__)},
+	{const_cast<char*>("setScaleImageToFrame"), (PyCFunction)scribus_setscaleimagetoframe, METH_KEYWORDS, formatDocstring(scribus_setscaleimagetoframe__doc__)},
+	{const_cast<char*>("setStyle"), scribus_setstyle, METH_VARARGS, formatDocstring(scribus_setstyle__doc__)},
+	{const_cast<char*>("setTextAlignment"), scribus_setalign, METH_VARARGS, formatDocstring(scribus_setalign__doc__)},
+	{const_cast<char*>("setTextColor"), scribus_settextfill, METH_VARARGS, formatDocstring(scribus_settextfill__doc__)},
+	{const_cast<char*>("setText"), scribus_setboxtext, METH_VARARGS, formatDocstring(scribus_setboxtext__doc__)},
+	{const_cast<char*>("setTextScalingH"), scribus_settextscalingh, METH_VARARGS, formatDocstring(scribus_settextscalingh__doc__)},
+	{const_cast<char*>("setTextScalingV"), scribus_settextscalingv, METH_VARARGS, formatDocstring(scribus_settextscalingv__doc__)},
+	{const_cast<char*>("setTextShade"), scribus_settextshade, METH_VARARGS, formatDocstring(scribus_settextshade__doc__)},
+	{const_cast<char*>("setTextStroke"), scribus_settextstroke, METH_VARARGS, formatDocstring(scribus_settextstroke__doc__)},
+	{const_cast<char*>("setUnit"), scribus_setunit, METH_VARARGS, formatDocstring(scribus_setunit__doc__)},
+	{const_cast<char*>("setVGuides"), scribus_setVguides, METH_VARARGS, formatDocstring(scribus_setVguides__doc__)},
+	{const_cast<char*>("sizeObject"), scribus_sizeobjabs, METH_VARARGS, formatDocstring(scribus_sizeobjabs__doc__)},
+	{const_cast<char*>("statusMessage"), scribus_messagebartext, METH_VARARGS, formatDocstring(scribus_messagebartext__doc__)},
+	{const_cast<char*>("textFlowMode"), scribus_textflow, METH_VARARGS, formatDocstring(scribus_textflow__doc__)},
+	{const_cast<char*>("traceText"), scribus_tracetext, METH_VARARGS, formatDocstring(scribus_tracetext__doc__)},
+	{const_cast<char*>("unGroupObject"), scribus_ungroupobj, METH_VARARGS, formatDocstring(scribus_ungroupobj__doc__)},
+	{const_cast<char*>("unlinkTextFrames"), scribus_unlinktextframes, METH_VARARGS, formatDocstring(scribus_unlinktextframes__doc__)},
+	{const_cast<char*>("valueDialog"), scribus_valdialog, METH_VARARGS, formatDocstring(scribus_valdialog__doc__)},
+	{const_cast<char*>("textOverflows"), (PyCFunction)scribus_istextoverflowing, METH_KEYWORDS, formatDocstring(scribus_istextoverflowing__doc__)},
+	{const_cast<char*>("zoomDocument"), scribus_zoomdocument, METH_VARARGS, formatDocstring(scribus_zoomdocument__doc__)},
+	{const_cast<char*>("scrollDocument"), scribus_scrolldocument, METH_VARARGS, formatDocstring(scribus_scrolldocument__doc__)},
+	{const_cast<char*>("moveSelectionToBack"), (PyCFunction)scribus_moveselectiontoback, METH_NOARGS, formatDocstring(scribus_moveselectiontoback__doc__)},
+	{const_cast<char*>("moveSelectionToFront"), (PyCFunction)scribus_moveselectiontofront, METH_NOARGS, formatDocstring(scribus_moveselectiontofront__doc__)},
 	// Property magic
-	{const_cast<char*>("getPropertyCType"), (PyCFunction)scribus_propertyctype, METH_KEYWORDS, tr(scribus_propertyctype__doc__)},
-	{const_cast<char*>("getPropertyNames"), (PyCFunction)scribus_getpropertynames, METH_KEYWORDS, tr(scribus_getpropertynames__doc__)},
-	{const_cast<char*>("getProperty"), (PyCFunction)scribus_getproperty, METH_KEYWORDS, tr(scribus_getproperty__doc__)},
-	{const_cast<char*>("setProperty"), (PyCFunction)scribus_setproperty, METH_KEYWORDS, tr(scribus_setproperty__doc__)},
-// 	{const_cast<char*>("getChildren"), (PyCFunction)scribus_getchildren, METH_KEYWORDS, tr(scribus_getchildren__doc__)},
-// 	{const_cast<char*>("getChild"), (PyCFunction)scribus_getchild, METH_KEYWORDS, tr(scribus_getchild__doc__)},
+	{const_cast<char*>("getPropertyCType"), (PyCFunction)scribus_propertyctype, METH_KEYWORDS, formatDocstring(scribus_propertyctype__doc__)},
+	{const_cast<char*>("getPropertyNames"), (PyCFunction)scribus_getpropertynames, METH_KEYWORDS, formatDocstring(scribus_getpropertynames__doc__)},
+	{const_cast<char*>("getProperty"), (PyCFunction)scribus_getproperty, METH_KEYWORDS, formatDocstring(scribus_getproperty__doc__)},
+	{const_cast<char*>("setProperty"), (PyCFunction)scribus_setproperty, METH_KEYWORDS, formatDocstring(scribus_setproperty__doc__)},
+// 	{const_cast<char*>("getChildren"), (PyCFunction)scribus_getchildren, METH_KEYWORDS, formatDocstring(scribus_getchildren__doc__)},
+// 	{const_cast<char*>("getChild"), (PyCFunction)scribus_getchild, METH_KEYWORDS, formatDocstring(scribus_getchild__doc__)},
 	// by Christian Hausknecht
-	{const_cast<char*>("duplicateObject"), scribus_duplicateobject, METH_VARARGS, tr(scribus_duplicateobject__doc__)},
+	{const_cast<char*>("duplicateObject"), scribus_duplicateobject, METH_VARARGS, formatDocstring(scribus_duplicateobject__doc__)},
 	// Internal methods - Not for public use
 	{const_cast<char*>("retval"), (PyCFunction)scribus_retval, METH_VARARGS, const_cast<char*>("Scribus internal.")},
 	{const_cast<char*>("getval"), (PyCFunction)scribus_getval, METH_NOARGS, const_cast<char*>("Scribus internal.")},
-- 
1.6.6

Kunda

2014-08-06 13:33

updater   ~0033187

spencerjackson, doesn't look like the team implemented this. Does your patch still work on the latest 1.5svn version?

Kunda

2014-08-23 12:54

updater   ~0033320

ping

Kunda

2015-01-29 23:24

updater   ~0034396

Spencerjackson, please respond.

Kunda

2016-04-14 11:17

updater   ~0040158

greg, can you weigh in on this?

Kunda

2016-11-21 17:01

updater   ~0042487

@gpittman ping

gpittman

2016-11-21 21:12

developer   ~0042488

I don't think I know enough about this to fully understand what he's doing.

Issue History

Date Modified Username Field Change
2009-12-30 20:30 spencerjackson New Issue
2009-12-30 20:30 spencerjackson File Added: 0001-Fix-Scripter-docstring-translations.patch
2009-12-31 01:26 christoph_s Status new => assigned
2009-12-31 01:26 christoph_s Assigned To => cbradney
2014-08-04 02:51 Kunda Summary Docstrings in Python Scripter plugin are not translated[PATCH] => [PATCH] Docstrings in Python Scripter plugin are not translated
2014-08-06 13:33 Kunda Note Added: 0033187
2014-08-23 12:54 Kunda Note Added: 0033320
2014-10-22 03:51 Kunda Relationship added related to 0002371
2014-10-24 22:57 Kunda Patch => Yes
2015-01-29 23:24 Kunda Note Added: 0034396
2016-04-14 11:17 Kunda Note Added: 0040158
2016-11-21 17:01 Kunda Note Added: 0042487
2016-11-21 21:12 gpittman Note Added: 0042488