Python 2 compatibility for Eric 5.

Sun, 27 Oct 2013 22:43:17 +0100

author
T.Rzepka <Tobias.Rzepka@gmail.com>
date
Sun, 27 Oct 2013 22:43:17 +0100
changeset 56
c7adc68350dd
parent 53
a3ba38d3a25e
child 57
e654970c913e

Python 2 compatibility for Eric 5.

ChangeLog file | annotate | diff | comparison | revisions
PluginProjectPyramid.py file | annotate | diff | comparison | revisions
PluginProjectPyramid.zip file | annotate | diff | comparison | revisions
PluginPyramid.e4p file | annotate | diff | comparison | revisions
ProjectPyramid/ConfigurationPage/PyramidPage.py file | annotate | diff | comparison | revisions
ProjectPyramid/CreateParametersDialog.py file | annotate | diff | comparison | revisions
ProjectPyramid/DistributionTypeSelectionDialog.py file | annotate | diff | comparison | revisions
ProjectPyramid/Documentation/source/Plugin_Project_Pyramid.ProjectPyramid.Project.html file | annotate | diff | comparison | revisions
ProjectPyramid/FormSelectionDialog.py file | annotate | diff | comparison | revisions
ProjectPyramid/Project.py file | annotate | diff | comparison | revisions
ProjectPyramid/PyramidDialog.py file | annotate | diff | comparison | revisions
ProjectPyramid/PyramidRoutesDialog.py file | annotate | diff | comparison | revisions
ProjectPyramid/i18n/pyramid_de.qm file | annotate | diff | comparison | revisions
ProjectPyramid/i18n/pyramid_de.ts file | annotate | diff | comparison | revisions
ProjectPyramid/i18n/pyramid_en.ts file | annotate | diff | comparison | revisions
ProjectPyramid/i18n/pyramid_es.ts file | annotate | diff | comparison | revisions
--- a/ChangeLog	Sat Sep 28 13:34:57 2013 +0200
+++ b/ChangeLog	Sun Oct 27 22:43:17 2013 +0100
@@ -1,5 +1,13 @@
 ChangeLog
 ---------
+Version 1.4.0
+- bug fixes
+- Python 2 compatibility for Eric 5
+- Python executable for Pyramid based on project configuration selected
+  if no virtual environment choosen (read/ write access rights needed)
+- handling of translations in Windows fixed
+- improved error management if setup.cfg isn't completely
+
 Version 1.3.0
 - bug fixes
 - added a menu entry to call a translations editor from the translations viewer
--- a/PluginProjectPyramid.py	Sat Sep 28 13:34:57 2013 +0200
+++ b/PluginProjectPyramid.py	Sun Oct 27 22:43:17 2013 +0100
@@ -7,6 +7,8 @@
 Module implementing the Pyramid project plugin.
 """
 
+from __future__ import unicode_literals    # __IGNORE_WARNING__
+
 import os
 import glob
 import fnmatch
@@ -26,7 +28,7 @@
 author = "Detlev Offenbach <detlev@die-offenbachs.de>"
 autoactivate = True
 deactivateable = True
-version = "1.3.0"
+version = "1.4.0"
 className = "ProjectPyramidPlugin"
 packageName = "ProjectPyramid"
 shortDescription = "Project support for Pyramid projects."
Binary file PluginProjectPyramid.zip has changed
--- a/PluginPyramid.e4p	Sat Sep 28 13:34:57 2013 +0200
+++ b/PluginPyramid.e4p	Sun Oct 27 22:43:17 2013 +0100
@@ -1,13 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE Project SYSTEM "Project-5.1.dtd">
 <!-- eric5 project file for project PluginPyramid -->
+<!-- Saved: 2013-10-04, 22:01:36 -->
+<!-- Copyright (C) 2013 Detlev Offenbach, detlev@die-offenbachs.de -->
 <Project version="5.1">
   <Language>en</Language>
   <Hash>16b809c49f4985b2bd6959b37c5612f6b30e89b4</Hash>
   <ProgLanguage mixed="0">Python3</ProgLanguage>
   <ProjectType>E4Plugin</ProjectType>
   <Description>Plugin implementing support for Pyramid projects.</Description>
-  <Version>1.3.x</Version>
+  <Version>1.4.0</Version>
   <Author>Detlev Offenbach</Author>
   <Email>detlev@die-offenbachs.de</Email>
   <TranslationPattern>ProjectPyramid/i18n/pyramid_%language%.ts</TranslationPattern>
--- a/ProjectPyramid/ConfigurationPage/PyramidPage.py	Sat Sep 28 13:34:57 2013 +0200
+++ b/ProjectPyramid/ConfigurationPage/PyramidPage.py	Sun Oct 27 22:43:17 2013 +0100
@@ -7,6 +7,8 @@
 Module implementing the Pyramid configuration page.
 """
 
+from __future__ import unicode_literals    # __IGNORE_WARNING__
+
 from PyQt4.QtCore import pyqtSlot
 
 from E5Gui.E5Completers import E5DirCompleter
@@ -30,7 +32,7 @@
         
         @param plugin reference to the plugin object
         """
-        super().__init__()
+        super(PyramidPage, self).__init__()
         self.setupUi(self)
         self.setObjectName("PyramidPage")
         
--- a/ProjectPyramid/CreateParametersDialog.py	Sat Sep 28 13:34:57 2013 +0200
+++ b/ProjectPyramid/CreateParametersDialog.py	Sun Oct 27 22:43:17 2013 +0100
@@ -7,6 +7,12 @@
 Module implementing a dialog for entering the create parameters.
 """
 
+from __future__ import unicode_literals    # __IGNORE_WARNING__
+try:
+    str = unicode
+except (NameError):
+    pass
+
 from PyQt4.QtCore import pyqtSlot, QProcess
 from PyQt4.QtGui import QDialog, QDialogButtonBox
 
@@ -28,7 +34,7 @@
         @param project reference to the project object (Project)
         @param parent reference to the parent widget (QWidget)
         """
-        super().__init__(parent)
+        super(CreateParametersDialog, self).__init__(parent)
         self.setupUi(self)
         
         self.__okButton = self.buttonBox.button(QDialogButtonBox.Ok)
--- a/ProjectPyramid/DistributionTypeSelectionDialog.py	Sat Sep 28 13:34:57 2013 +0200
+++ b/ProjectPyramid/DistributionTypeSelectionDialog.py	Sun Oct 27 22:43:17 2013 +0100
@@ -7,6 +7,12 @@
 Module implementing a dialog to select the distribution file formats.
 """
 
+from __future__ import unicode_literals    # __IGNORE_WARNING__
+try:
+    str = unicode
+except (NameError):
+    pass
+
 from PyQt4.QtCore import Qt, QProcess
 from PyQt4.QtGui import QDialog, QListWidgetItem
 
@@ -29,7 +35,7 @@
         @param projectPath path of the Pyramid project (string)
         @param parent reference to the parent widget (QWidget)
         """
-        super().__init__(parent)
+        super(DistributionTypeSelectionDialog, self).__init__(parent)
         self.setupUi(self)
         
         errMsg = ""
--- a/ProjectPyramid/Documentation/source/Plugin_Project_Pyramid.ProjectPyramid.Project.html	Sat Sep 28 13:34:57 2013 +0200
+++ b/ProjectPyramid/Documentation/source/Plugin_Project_Pyramid.ProjectPyramid.Project.html	Sun Oct 27 22:43:17 2013 +0100
@@ -35,6 +35,9 @@
 </tr><tr>
 <td><a href="#PyramidNoProjectSelectedException">PyramidNoProjectSelectedException</a></td>
 <td>Exception thrown to signal, that there is no current Pyramid project.</td>
+</tr><tr>
+<td><a href="#QProcess">QProcess</a></td>
+<td>Class transforming the call arguments in case of gnome-terminal.</td>
 </tr>
 </table>
 <h3>Functions</h3>
@@ -72,6 +75,9 @@
 <td><a href="#Project.__findProjects">__findProjects</a></td>
 <td>Private method to determine the relative path of all Pyramid projects (= top level dirs).</td>
 </tr><tr>
+<td><a href="#Project.__getDebugEnvironment">__getDebugEnvironment</a></td>
+<td>Private method to get the path of the debugger environment.</td>
+</tr><tr>
 <td><a href="#Project.__getExecutablePaths">__getExecutablePaths</a></td>
 <td>Private method to build all full path of an executable file from the environment.</td>
 </tr><tr>
@@ -234,6 +240,22 @@
 <dd>
 list of projects (list of string)
 </dd>
+</dl><a NAME="Project.__getDebugEnvironment" ID="Project.__getDebugEnvironment"></a>
+<h4>Project.__getDebugEnvironment</h4>
+<b>__getDebugEnvironment</b>(<i>language=""</i>)
+<p>
+        Private method to get the path of the debugger environment.
+</p><dl>
+<dt><i>language</i></dt>
+<dd>
+Python variant to get the debugger environment
+            for (string, one of '', 'Python2' or 'Python3')
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+path of the debugger environment (string)
+</dd>
 </dl><a NAME="Project.__getExecutablePaths" ID="Project.__getExecutablePaths"></a>
 <h4>Project.__getExecutablePaths</h4>
 <b>__getExecutablePaths</b>(<i>file</i>)
@@ -643,5 +665,76 @@
 </table>
 
 <div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="QProcess" ID="QProcess"></a>
+<h2>QProcess</h2>
+<p>
+    Class transforming the call arguments in case of gnome-terminal.
+</p>
+<h3>Derived from</h3>
+QProcessPyQt
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#QProcess.start">start</a></td>
+<td>Starts the given program (cmd) in a new process, if none is already running, passing the command line arguments in argss.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr>
+<td><a href="#QProcess.startDetached">startDetached</a></td>
+<td>Starts the given program (cmd) in a new process, if none is already running, passing the command line arguments in argss.</td>
+</tr>
+</table>
+<a NAME="QProcess.start" ID="QProcess.start"></a>
+<h4>QProcess.start</h4>
+<b>start</b>(<i>cmd, args=[], mode=QProcessPyQt.ReadWrite</i>)
+<p>
+        Starts the given program (cmd) in a new process, if none is already
+        running, passing the command line arguments in argss.
+</p><dl>
+<dt><i>cmd</i></dt>
+<dd>
+start the given program cmd (string)
+</dd><dt><i>args=</i></dt>
+<dd>
+list of parameters (list of strings)
+</dd><dt><i>mode=</i></dt>
+<dd>
+access mode (QIODevice.OpenMode)
+</dd>
+</dl><a NAME="QProcess.startDetached" ID="QProcess.startDetached"></a>
+<h4>QProcess.startDetached (static)</h4>
+<b>startDetached</b>(<i>args=[], path=''</i>)
+<p>
+        Starts the given program (cmd) in a new process, if none is already
+        running, passing the command line arguments in argss.
+</p><dl>
+<dt><i>cmd</i></dt>
+<dd>
+start the given program cmd (string)
+</dd><dt><i>args=</i></dt>
+<dd>
+list of parameters (list of strings)
+</dd><dt><i>path=</i></dt>
+<dd>
+new working directory (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple of successful start and process id (boolean, integer)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
\ No newline at end of file
--- a/ProjectPyramid/FormSelectionDialog.py	Sat Sep 28 13:34:57 2013 +0200
+++ b/ProjectPyramid/FormSelectionDialog.py	Sun Oct 27 22:43:17 2013 +0100
@@ -7,6 +7,8 @@
 Module implementing a dialog to select the template type.
 """
 
+from __future__ import unicode_literals    # __IGNORE_WARNING__
+
 from PyQt4.QtCore import pyqtSlot
 from PyQt4.QtGui import QDialog, QDialogButtonBox
 
@@ -23,7 +25,7 @@
         
         @param parent reference to the parent widget (QWidget)
         """
-        super().__init__(parent)
+        super(FormSelectionDialog, self).__init__(parent)
         self.setupUi(self)
         
         self.__templates = {
--- a/ProjectPyramid/Project.py	Sat Sep 28 13:34:57 2013 +0200
+++ b/ProjectPyramid/Project.py	Sun Oct 27 22:43:17 2013 +0100
@@ -7,12 +7,21 @@
 Module implementing the Pyramid project support.
 """
 
+from __future__ import unicode_literals    # __IGNORE_WARNING__
+
+try:
+    import configparser
+except ImportError:
+    str = unicode    # __IGNORE_WARNING__
+    import ConfigParser as configparser    # __IGNORE_WARNING__
+
 import os
-import configparser
 import re
+import sys
 
-from PyQt4.QtCore import QObject, QFileInfo, QProcess, QTimer, QUrl
+from PyQt4.QtCore import QObject, QFileInfo, QTimer, QUrl
 from PyQt4.QtGui import QMenu, QDialog, QInputDialog, QDesktopServices, QLineEdit
+from PyQt4.QtCore import QProcess as QProcessPyQt
 
 from E5Gui.E5Application import e5App
 from E5Gui import E5MessageBox, E5FileDialog
@@ -20,6 +29,7 @@
 
 from .PyramidDialog import PyramidDialog
 
+import Preferences
 import Utilities
 from Globals import isWindowsPlatform
 import UI.PixmapCache
@@ -32,6 +42,41 @@
     pass
 
 
+class QProcess(QProcessPyQt):
+    """
+    Class transforming the call arguments in case of gnome-terminal.
+    """
+    def start(self, cmd, args=[], mode=QProcessPyQt.ReadWrite):
+        """
+        Starts the given program (cmd) in a new process, if none is already
+        running, passing the command line arguments in argss.
+        
+        @param cmd start the given program cmd (string)
+        @keyparam args list of parameters (list of strings)
+        @keyparam mode access mode (QIODevice.OpenMode)
+        """
+        if cmd.endswith('gnome-terminal') and args[0] == '-e':
+            args = ['-e', ' '.join(args[1:])]
+        
+        super(QProcess, self).start(cmd, args, mode)
+    
+    @staticmethod
+    def startDetached(cmd, args=[], path=''):
+        """
+        Starts the given program (cmd) in a new process, if none is already
+        running, passing the command line arguments in argss.
+        
+        @param cmd start the given program cmd (string)
+        @keyparam args list of parameters (list of strings)
+        @keyparam path new working directory (string)
+        @return tuple of successful start and process id (boolean, integer)
+        """
+        if cmd.endswith('gnome-terminal') and args[0] == '-e':
+            args = ['-e', ' '.join(args[1:])]
+        
+        return QProcessPyQt.startDetached(cmd, args, path)
+
+
 class Project(QObject):
     """
     Class implementing the Pyramid project support.
@@ -43,7 +88,7 @@
         @param plugin reference to the plugin object
         @param parent parent (QObject)
         """
-        super().__init__(parent)
+        super(Project, self).__init__(parent)
         
         self.__plugin = plugin
         self.__ui = parent
@@ -519,24 +564,30 @@
                 if fullCmd != cmd:
                     variants.append(variant)
             else:
-                try:
-                    fullCmds = Utilities.getExecutablePaths(cmd)
-                except AttributeError:
-                    fullCmds = self.__getExecutablePaths(cmd)
-                for fullCmd in fullCmds:
+                if isWindowsPlatform():
+                    debugEnv = self.__getDebugEnvironment(variant)
+                    fullCmd = os.path.join(debugEnv, "Scripts", cmd)
+                    if variant.lower() in fullCmd.lower():
+                        variants.append(variant)
+                else:
                     try:
-                        f = open(fullCmd, 'r', encoding='utf-8')
-                        l0 = f.readline()
-                        f.close()
-                    except (IOError, OSError):
-                        l0 = ""
-                    if variant.lower() in l0.lower() or \
-                       "{0}.".format(variant[-1]) in l0 or \
-                       (variant == "Python2" and \
-                        "python3" not in l0.lower() and \
-                        "python" in l0.lower()):
-                        variants.append(variant)
-                        break
+                        fullCmds = Utilities.getExecutablePaths(cmd)
+                    except AttributeError:
+                        fullCmds = self.__getExecutablePaths(cmd)
+                    for fullCmd in fullCmds:
+                        try:
+                            f = open(fullCmd, 'r', encoding='utf-8')
+                            l0 = f.readline()
+                            f.close()
+                        except (IOError, OSError):
+                            l0 = ""
+                        if variant.lower() in l0.lower() or \
+                            "{0}.".format(variant[-1]) in l0 or \
+                            (variant == "Python2" and \
+                            "python3" not in l0.lower() and \
+                            "python" in l0.lower()):
+                                variants.append(variant)
+                                break
         
         return variants
     
@@ -559,7 +610,28 @@
         if virtEnv and not os.path.exists(virtEnv):
             virtEnv = ""
         return virtEnv
-    
+
+    def __getDebugEnvironment(self, language=""):
+        """
+        Private method to get the path of the debugger environment.
+        
+        @param language Python variant to get the debugger environment
+            for (string, one of '', 'Python2' or 'Python3')
+        @return path of the debugger environment (string)
+        """
+        if not language:
+            language = self.__e5project.getProjectLanguage()
+        if language == "Python3":
+            debugEnv = Preferences.getDebugger("Python3Interpreter")
+        elif language == "Python2":
+            debugEnv = Preferences.getDebugger("PythonInterpreter")
+        else:
+            debugEnv = sys.executable
+        debugEnv = os.path.dirname(debugEnv)
+        if debugEnv and not os.path.exists(debugEnv):
+            debugEnv = sys.exec_prefix
+        return debugEnv
+
     def getPyramidCommand(self, cmd, language=""):
         """
         Public method to build a Pyramid command.
@@ -570,17 +642,20 @@
         @return full pyramid command (string)
         """
         virtualEnv = self.__getVirtualEnvironment(language)
-        if virtualEnv:
-            if isWindowsPlatform():
-                cmd = os.path.join(virtualEnv, "Scripts", cmd)
-            else:
-                fullCmd = os.path.join(virtualEnv, "bin", cmd)
-                if not os.path.exists(fullCmd):
-                    fullCmd = os.path.join(virtualEnv, "local", "bin", cmd)
-                    if not os.path.exists(fullCmd):
-                        # fall back to just cmd
-                        fullCmd = cmd
-                cmd = fullCmd
+        if isWindowsPlatform() and not virtualEnv:
+            virtualEnv = self.__getDebugEnvironment(language)
+        if isWindowsPlatform():
+            cmd = os.path.join(virtualEnv, "Scripts", cmd + '.exe')
+        else:
+            fullCmds = [
+                os.path.join(virtualEnv, "bin", cmd),
+                os.path.join(virtualEnv, "local", "bin", cmd),
+                Utilities.getExecutablePath(cmd),
+                cmd     # fall back to just cmd
+            ]
+            for cmd in fullCmds:
+                if os.path.exists(cmd):
+                    break
         return cmd
     
     def getPythonCommand(self):
@@ -589,25 +664,29 @@
         
         @return python command (string)
         """
-        python = "python"
+        language = self.__e5project.getProjectLanguage()
+        pythonExe = "python"
         if isWindowsPlatform():
-            python += ".exe"
+            pythonExe += ".exe"
         else:
-            language = self.__e5project.getProjectLanguage()
             if language == "Python3":
-                python = "python3"
+                pythonExe = "python3"
             elif language == "Python2":
-                python = "python2"
+                pythonExe = "python2"
         virtualEnv = self.__getVirtualEnvironment()
+        if isWindowsPlatform() and not virtualEnv:
+            virtualEnv = self.__getDebugEnvironment(language)
         if virtualEnv:
             if isWindowsPlatform():
-                python = os.path.join(virtualEnv, "Scripts", python)
+                python = os.path.join(virtualEnv, "Scripts", pythonExe)
                 if not os.path.exists(python):
-                    python = os.path.join(virtualEnv, python)
+                    python = os.path.join(virtualEnv, pythonExe)
             else:
-                python = os.path.join(virtualEnv, "bin", python)
+                python = os.path.join(virtualEnv, "bin", pythonExe)
                 if not os.path.exists(python):
                     python = python[:-1]    # omit the version character
+        else:
+            python = pythonExe
         
         return python
     
@@ -643,6 +722,8 @@
         """
         if not self.__pyramidVersion:
             cmd = self.getPyramidCommand("pcreate")
+            if isWindowsPlatform():
+                cmd = os.path.join(os.path.dirname(cmd), "pcreate-script.py")
             try:
                 f = open(cmd, 'r', encoding="utf-8")
                 lines = f.read().splitlines()
@@ -800,10 +881,17 @@
         if self.__currentProject is None:
             self.__e5project.pdata["TRANSLATIONPATTERN"] = []
         else:
+            lowerProject = self.__project().lower()
             config = configparser.ConfigParser()
             config.read(os.path.join(self.__projectPath(), "setup.cfg"))
-            outputDir = config.get("init_catalog", "output_dir")
-            domain = config.get("init_catalog", "domain")
+            try:
+                outputDir = config.get("init_catalog", "output_dir")
+            except (configparser.NoOptionError, configparser.NoSectionError):
+                outputDir = '{0}/locale'.format(lowerProject)
+            try:
+                domain = config.get("init_catalog", "domain")
+            except (configparser.NoOptionError, configparser.NoSectionError):
+                domain = lowerProject
             self.__e5project.pdata["TRANSLATIONPATTERN"] = [
                 os.path.join(project, outputDir, "%language%",
                     "LC_MESSAGES", "{0}.po".format(domain))
@@ -909,7 +997,10 @@
         
         config = configparser.ConfigParser()
         config.read(os.path.join(projectPath, "development.ini"))
-        port = config.get("server:main", "port", fallback="6543")
+        try:
+            port = config.get("server:main", "port")
+        except (configparser.NoOptionError, configparser.NoSectionError):
+            port = "8080"
         url = QUrl("http://localhost:{0}".format(port))
         res = QDesktopServices.openUrl(url)
         if not res:
@@ -979,6 +1070,8 @@
         res = dia.startProcess(cmd, args, wd)
         if res:
             dia.exec_()
+            initCmd = self.__getInitDbCommand()
+            self.initializeDbAct.setEnabled(os.path.exists(initCmd))
     
     ##################################################################
     ## slots below implement distribution functions
@@ -1164,8 +1257,13 @@
         @return extracted locale (string) or None
         """
         if self.__e5project.pdata["TRANSLATIONPATTERN"]:
-            pattern = self.__e5project.pdata["TRANSLATIONPATTERN"][0]\
-                .replace("%language%", "(.*?)")
+            # On Windows, path typically contains backslashes. This leads
+            # to an invalid seach pattern '...\(' because the opening bracked
+            # will be escaped.
+            pattern = self.__e5project.pdata["TRANSLATIONPATTERN"][0]
+            pattern = os.path.normpath(pattern)
+            pattern = pattern.replace("%language%", "(.*?)")
+            pattern = pattern.replace('\\', '\\\\')
             match = re.search(pattern, filename)
             if match is not None:
                 loc = match.group(1)
@@ -1221,6 +1319,28 @@
                 self.trUtf8('No current Pyramid project selected or no Pyramid project'
                             ' created yet. Aborting...'))
             return
+
+        config = configparser.ConfigParser()
+        config.read(os.path.join(projectPath, "setup.cfg"))
+        try:
+            potFile = config.get("extract_messages", "output_file")
+        except configparser.NoSectionError:
+            E5MessageBox.warning(self.__ui,
+                title,
+                self.trUtf8('No setup.cfg found or no "extract_messages"'
+                            ' section found in setup.cfg.'))
+            return
+        except configparser.NoOptionError:
+            E5MessageBox.warning(self.__ui,
+                title,
+                self.trUtf8('No "output_file" option found in setup.cfg.'))
+            return
+        
+        try:
+            path = os.path.join(projectPath, os.path.dirname(potFile))
+            os.makedirs(path)
+        except OSError:
+            pass
         
         cmd = self.getPythonCommand()
         args = []
@@ -1232,25 +1352,8 @@
         res = dia.startProcess(cmd, args, projectPath)
         if res:
             dia.exec_()
+            self.__e5project.appendFile(os.path.join(projectPath, potFile))
             
-            config = configparser.ConfigParser()
-            config.read(os.path.join(projectPath, "setup.cfg"))
-            potFile = config.get("extract_messages", "output_file")
-            if potFile:
-                self.__e5project.appendFile(os.path.join(projectPath, potFile))
-            else:
-                try:
-                    lowerProject = self.__project().lower()
-                except PyramidNoProjectSelectedException:
-                    E5MessageBox.warning(self.__ui,
-                        title,
-                        self.trUtf8('No current Pyramid project selected or no Pyramid'
-                                    ' project created yet. Aborting...'))
-                    return
-                
-                self.__e5project.appendFile(os.path.join(
-                    projectPath, lowerProject, "locale", "%s.pot" % lowerProject))
-    
     def __projectLanguageAdded(self, code):
         """
         Private slot handling the addition of a new language.
@@ -1280,7 +1383,7 @@
         if res:
             dia.exec_()
             
-            langFile = self.__e4project.pdata["TRANSLATIONPATTERN"][0]\
+            langFile = self.__e5project.pdata["TRANSLATIONPATTERN"][0]\
                 .replace("%language%", code)
             self.__e5project.appendFile(langFile)
     
--- a/ProjectPyramid/PyramidDialog.py	Sat Sep 28 13:34:57 2013 +0200
+++ b/ProjectPyramid/PyramidDialog.py	Sun Oct 27 22:43:17 2013 +0100
@@ -7,6 +7,12 @@
 Module implementing a dialog starting a process and showing its output.
 """
 
+from __future__ import unicode_literals    # __IGNORE_WARNING__
+try:
+    str = unicode
+except (NameError):
+    pass
+
 import os
 
 from PyQt4.QtCore import QProcess, QTimer, pyqtSlot, Qt, QCoreApplication
@@ -43,7 +49,7 @@
             (string)
         @keyparam parent parent widget (QWidget)
         """
-        super().__init__(parent)
+        super(PyramidDialog, self).__init__(parent)
         self.setupUi(self)
         
         self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False)
@@ -289,4 +295,4 @@
             self.intercept = False
             evt.accept()
             return
-        super().keyPressEvent(evt)
+        super(PyramidDialog, self).keyPressEvent(evt)
--- a/ProjectPyramid/PyramidRoutesDialog.py	Sat Sep 28 13:34:57 2013 +0200
+++ b/ProjectPyramid/PyramidRoutesDialog.py	Sun Oct 27 22:43:17 2013 +0100
@@ -7,6 +7,12 @@
 Module implementing a dialog showing the available routes.
 """
 
+from __future__ import unicode_literals    # __IGNORE_WARNING__
+try:
+    str = unicode
+except (NameError):
+    pass
+
 import os
 
 from PyQt4.QtCore import QProcess, QTimer, pyqtSlot, Qt, QCoreApplication
@@ -30,7 +36,7 @@
         @param project reference to the project object (ProjectPyramid.Project.Project)
         @param parent reference to the parent widget (QWidget)
         """
-        super().__init__(parent)
+        super(PyramidRoutesDialog, self).__init__(parent)
         self.setupUi(self)
         
         self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False)
@@ -241,4 +247,4 @@
             self.intercept = False
             evt.accept()
             return
-        super().keyPressEvent(evt)
+        super(PyramidRoutesDialog, self).keyPressEvent(evt)
Binary file ProjectPyramid/i18n/pyramid_de.qm has changed
--- a/ProjectPyramid/i18n/pyramid_de.ts	Sat Sep 28 13:34:57 2013 +0200
+++ b/ProjectPyramid/i18n/pyramid_de.ts	Sun Oct 27 22:43:17 2013 +0100
@@ -48,17 +48,17 @@
         <translation>Pyramid Projekterstellung simulieren</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="53"/>
+        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="59"/>
         <source>The pcreate command did not finish within 30s.</source>
         <translation>Das pcreate Kommando endete nicht innerhalb von 30s.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="56"/>
+        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="62"/>
         <source>Could not start the pcreate executable.</source>
         <translation>Der pcreate Prozess konnte nicht gestartet werden.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="64"/>
+        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="70"/>
         <source>Process Generation Error</source>
         <translation>Fehler bei der Prozessgenerierung</translation>
     </message>
@@ -81,17 +81,17 @@
         <translation>Wähle die zu erzeugenden Dateiformate für die Distribution an</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="54"/>
+        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="60"/>
         <source>The python setup.py command did not finish within 30s.</source>
         <translation>Das python setup.py Kommando endete nicht innerhalb von 30s.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="57"/>
+        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="63"/>
         <source>Could not start the pcreate executable.</source>
         <translation>Der pcreate Prozess konnte nicht gestartet werden.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="68"/>
+        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="74"/>
         <source>Process Generation Error</source>
         <translation>Fehler bei der Prozessgenerierung</translation>
     </message>
@@ -124,22 +124,22 @@
         <translation>Zeigt den Text des ausgewählten Templates</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="30"/>
+        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="32"/>
         <source>Standard HTML 5 template</source>
         <translation>Standard HTML 5 Template</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="99"/>
+        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="101"/>
         <source>Mako template with sections</source>
         <translation>Mako Template mit Abschnitten</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="42"/>
+        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="44"/>
         <source>Standard HTML template</source>
         <translation>Standard HTML Template</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="55"/>
+        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="57"/>
         <source>Chameleon template</source>
         <translation>Chameleon Template</translation>
     </message>
@@ -147,482 +147,492 @@
 <context>
     <name>Project</name>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="65"/>
+        <location filename="../../ProjectPyramid/Project.py" line="110"/>
         <source>Current Pyramid Project</source>
         <translation>Aktuelles Pyramid Projekt</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="69"/>
+        <location filename="../../ProjectPyramid/Project.py" line="114"/>
         <source>Selects the current Pyramid project</source>
         <translation>Wählt das aktuelle Pyramid Projekt aus</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="71"/>
+        <location filename="../../ProjectPyramid/Project.py" line="116"/>
         <source>&lt;b&gt;Current Pyramid Project&lt;/b&gt;&lt;p&gt;Selects the Pyramid project. Used for multi-project Pyramid projects to switch between the projects.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Aktuelles Pyramid Projekt&lt;/b&gt;&lt;p&gt;Wählt das Pyramid Projekt aus. Wird bei Multiprojekt Pyramid Projekten eingesetzt, um zwischen den Projekten umzuschalten.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="698"/>
+        <location filename="../../ProjectPyramid/Project.py" line="779"/>
         <source>Create Pyramid Project</source>
         <translation>Pyramid Projekt erstellen</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="83"/>
+        <location filename="../../ProjectPyramid/Project.py" line="128"/>
         <source>Create Pyramid &amp;Project</source>
         <translation>Pyramid &amp;Projekt erstellen</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="87"/>
+        <location filename="../../ProjectPyramid/Project.py" line="132"/>
         <source>Creates a new Pyramid project</source>
         <translation>Erstellt ein neues Pyramid Projekt</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="89"/>
+        <location filename="../../ProjectPyramid/Project.py" line="134"/>
         <source>&lt;b&gt;Create Pyramid Project&lt;/b&gt;&lt;p&gt;Creates a new Pyramid project using &quot;pcreate&quot;.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Pyramid Projekt erstellen&lt;/b&gt;&lt;p&gt;Erstellt ein neues Pyramid Projekt mittels &quot;pcreate&quot;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="849"/>
+        <location filename="../../ProjectPyramid/Project.py" line="937"/>
         <source>Run Server</source>
         <translation>Server starten</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="100"/>
+        <location filename="../../ProjectPyramid/Project.py" line="145"/>
         <source>Run &amp;Server</source>
         <translation>&amp;Server starten</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="104"/>
+        <location filename="../../ProjectPyramid/Project.py" line="149"/>
         <source>Starts the Pyramid Web server</source>
         <translation>Startet den Pyramid Web Server</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="106"/>
+        <location filename="../../ProjectPyramid/Project.py" line="151"/>
         <source>&lt;b&gt;Run Server&lt;/b&gt;&lt;p&gt;Starts the Pyramid Web server using &quot;pserve --reload development.ini&quot;.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Server starten&lt;/b&gt;&lt;p&gt;Startet den Pyramid Web Server mittels &quot;pserve --reload development.ini&quot;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="114"/>
+        <location filename="../../ProjectPyramid/Project.py" line="159"/>
         <source>Run Server with Logging</source>
         <translation>Server mit Logging starten</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="114"/>
+        <location filename="../../ProjectPyramid/Project.py" line="159"/>
         <source>Run Server with &amp;Logging</source>
         <translation>Server mit &amp;Logging starten</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="118"/>
+        <location filename="../../ProjectPyramid/Project.py" line="163"/>
         <source>Starts the Pyramid Web server with logging</source>
         <translation>Startet den Pyramid Web Server mit Logging</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="120"/>
+        <location filename="../../ProjectPyramid/Project.py" line="165"/>
         <source>&lt;b&gt;Run Server with Logging&lt;/b&gt;&lt;p&gt;Starts the Pyramid Web server with logging using &quot;pserve --log-file=server.log --reload development.ini&quot;.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Server mit Logging starten&lt;/b&gt;&lt;p&gt;Startet den Pyramid Web Server mit Logging mittels &quot;pserve --log-file=server.log --reload development.ini&quot;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="916"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1007"/>
         <source>Run Web-Browser</source>
         <translation>Web-Browser starten</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="128"/>
+        <location filename="../../ProjectPyramid/Project.py" line="173"/>
         <source>Run &amp;Web-Browser</source>
         <translation>Web-&amp;Browser starten</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="132"/>
+        <location filename="../../ProjectPyramid/Project.py" line="177"/>
         <source>Starts the default Web-Browser with the URL of the Pyramid Web server</source>
         <translation>Startet den Standard Web-Browser mit der URL des Pyramid Web-Servers</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="134"/>
+        <location filename="../../ProjectPyramid/Project.py" line="179"/>
         <source>&lt;b&gt;Run Web-Browser&lt;/b&gt;&lt;p&gt;Starts the default Web-Browser with the URL of the Pyramid Web server.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Web-Browser starten&lt;/b&gt;&lt;p&gt;Startet den Standard Web-Browser mit der URL des Pyramid Web-Servers.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="931"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1022"/>
         <source>Start Pyramid Python Console</source>
         <translation>Starte Pyramid Python Konsole</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="142"/>
+        <location filename="../../ProjectPyramid/Project.py" line="187"/>
         <source>Start Pyramid &amp;Python Console</source>
         <translation>Starte Pyramid &amp;Python Konsole</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="146"/>
+        <location filename="../../ProjectPyramid/Project.py" line="191"/>
         <source>Starts an interactive Python interpreter</source>
         <translation>Startet einen interaktiven Python Interpreter</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="148"/>
+        <location filename="../../ProjectPyramid/Project.py" line="193"/>
         <source>&lt;b&gt;Start Pyramid Python Console&lt;/b&gt;&lt;p&gt;Starts an interactive Python interpreter.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Starte Pyramid Python Konsole&lt;/b&gt;&lt;p&gt;Startet einen interaktiven Python Interpreter&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="962"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1053"/>
         <source>Setup Development Environment</source>
         <translation>Entwicklungsumgebung einrichten</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="159"/>
+        <location filename="../../ProjectPyramid/Project.py" line="204"/>
         <source>Setup &amp;Development Environment</source>
         <translation>Entwicklungs&amp;umgebung einrichten</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="163"/>
+        <location filename="../../ProjectPyramid/Project.py" line="208"/>
         <source>Setup the Pyramid project in development mode</source>
         <translation>Richtet das Pyramid Projekt im Entwicklungsmodus ein</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="165"/>
+        <location filename="../../ProjectPyramid/Project.py" line="210"/>
         <source>&lt;b&gt;Setup Development Environment&lt;/b&gt;&lt;p&gt;Setup the Pyramid project in development mode using &quot;python setup.py develop&quot;.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Entwicklungsumgebung einrichten&lt;/b&gt;&lt;p&gt;Richtet das Pyramid Projekt im Entwicklungsmodus mittels &quot;python setup.py develop&quot; ein.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1043"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1136"/>
         <source>Initialize Database</source>
         <translation>Datenbank initialisieren</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="177"/>
+        <location filename="../../ProjectPyramid/Project.py" line="222"/>
         <source>Initialize &amp;Database</source>
         <translation>&amp;Datenbank initialisieren</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="181"/>
+        <location filename="../../ProjectPyramid/Project.py" line="226"/>
         <source>Initializes (or re-initializes) the database of the current Pyramid project</source>
         <translation>Initialisiert (oder reinitialisiert) die Datenbank des aktuellen Pyramid Projektes</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="184"/>
+        <location filename="../../ProjectPyramid/Project.py" line="229"/>
         <source>&lt;b&gt;Initialize Database&lt;/b&gt;&lt;p&gt;Initializes (or re-initializes) the database of the current Pyramid project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Datenbank initialisieren&lt;/b&gt;&lt;p&gt;Initialisiert (oder reinitialisiert) die Datenbank des aktuellen Pyramid Projektes.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1081"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1174"/>
         <source>Show Matching Views</source>
         <translation>Passende Ansichten anzeigen</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="196"/>
+        <location filename="../../ProjectPyramid/Project.py" line="241"/>
         <source>Show Matching &amp;Views</source>
         <translation>Passende &amp;Ansichten anzeigen</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="200"/>
+        <location filename="../../ProjectPyramid/Project.py" line="245"/>
         <source>Show views matching a given URL</source>
         <translation>Zeigt Ansichten zu einer gegebenen URL an</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="202"/>
+        <location filename="../../ProjectPyramid/Project.py" line="247"/>
         <source>&lt;b&gt;Show Matching Views&lt;/b&gt;&lt;p&gt;Show views matching a given URL.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Passende Ansichten anzeigen&lt;/b&gt;&lt;p&gt;Zeigt Ansichten zu einer gegebenen URL an.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1104"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1197"/>
         <source>Show Routes</source>
         <translation>Routen anzeigen</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="209"/>
+        <location filename="../../ProjectPyramid/Project.py" line="254"/>
         <source>Show &amp;Routes</source>
         <translation>&amp;Routen anzeigen</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="213"/>
+        <location filename="../../ProjectPyramid/Project.py" line="258"/>
         <source>Show all URL dispatch routes used by a Pyramid application</source>
         <translation>Zeigt alle durch eine Pyramid Anwendung verwendete URL Routen an</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="215"/>
+        <location filename="../../ProjectPyramid/Project.py" line="260"/>
         <source>&lt;b&gt;Show Routes&lt;/b&gt;&lt;p&gt;Show all URL dispatch routes used by a Pyramid application in the order in which they are evaluated.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Routen anzeigen&lt;/b&gt;&lt;p&gt;Zeigt alle durch eine Pyramid Anwendung verwendete URL Routen in der Reihenfolge ihrer Auswertung an.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1125"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1218"/>
         <source>Show Tween Objects</source>
         <translation>Tween Objekte anzeigen</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="223"/>
+        <location filename="../../ProjectPyramid/Project.py" line="268"/>
         <source>Show &amp;Tween Objects</source>
         <translation>&amp;Tween Objekte anzeigen</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="227"/>
+        <location filename="../../ProjectPyramid/Project.py" line="272"/>
         <source>Show all implicit and explicit tween objects used by a Pyramid application</source>
         <translation>Zeigt alle von einer Pyramid Anwendung verwendeten impliziten und expliziten Tween Objekte an</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="229"/>
+        <location filename="../../ProjectPyramid/Project.py" line="274"/>
         <source>&lt;b&gt;Show Tween Objects&lt;/b&gt;&lt;p&gt;Show all implicit and explicit tween objects used by a Pyramid application.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Tween Objekte anzeigen&lt;/b&gt;&lt;p&gt;Zeigt alle von einer Pyramid Anwendung verwendeten impliziten und expliziten Tween Objekte an.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="241"/>
+        <location filename="../../ProjectPyramid/Project.py" line="286"/>
         <source>Build Distribution</source>
         <translation>Distribution erzeugen</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="241"/>
+        <location filename="../../ProjectPyramid/Project.py" line="286"/>
         <source>Build &amp;Distribution</source>
         <translation>&amp;Distribution erzeugen</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="245"/>
+        <location filename="../../ProjectPyramid/Project.py" line="290"/>
         <source>Builds a distribution file for the Pyramid project</source>
         <translation>Erzeugt Dateien zur Distribution eines Pyramid Projektes</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="247"/>
+        <location filename="../../ProjectPyramid/Project.py" line="292"/>
         <source>&lt;b&gt;Build Distribution&lt;/b&gt;&lt;p&gt;Builds a distribution file for the Pyramid project using &quot;python setup.py sdist&quot;.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Distribution erzeugen&lt;/b&gt;&lt;p&gt;Erzeugt Dateien zur Distribution eines Pyramid Projektes mittels &quot;python setup.py sdist&quot;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="259"/>
+        <location filename="../../ProjectPyramid/Project.py" line="304"/>
         <source>Documentation</source>
         <translation>Dokumentation</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="259"/>
+        <location filename="../../ProjectPyramid/Project.py" line="304"/>
         <source>D&amp;ocumentation</source>
         <translation>D&amp;okumentation</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="263"/>
+        <location filename="../../ProjectPyramid/Project.py" line="308"/>
         <source>Shows the help viewer with the Pyramid documentation</source>
         <translation>Zeigt die Hilfeanzeige mit der Pyramid Dokumentation</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="265"/>
+        <location filename="../../ProjectPyramid/Project.py" line="310"/>
         <source>&lt;b&gt;Documentation&lt;/b&gt;&lt;p&gt;Shows the help viewer with the Pyramid documentation.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Dokumentation&lt;/b&gt;&lt;p&gt;Zeigt die Hilfeanzeige mit der Pyramid Dokumentation.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="621"/>
+        <location filename="../../ProjectPyramid/Project.py" line="700"/>
         <source>About Pyramid</source>
         <translation>Über Pyramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="276"/>
+        <location filename="../../ProjectPyramid/Project.py" line="321"/>
         <source>About P&amp;yramid</source>
         <translation>Über P&amp;yramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="280"/>
+        <location filename="../../ProjectPyramid/Project.py" line="325"/>
         <source>Shows some information about Pyramid</source>
         <translation>Zeigt einige Informationen über Pyramid an</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="282"/>
+        <location filename="../../ProjectPyramid/Project.py" line="327"/>
         <source>&lt;b&gt;About Pyramid&lt;/b&gt;&lt;p&gt;Shows some information about Pyramid.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Über Pyramid&lt;/b&gt;&lt;p&gt;Zeigt einige Informationen über Pyramid an.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="297"/>
+        <location filename="../../ProjectPyramid/Project.py" line="342"/>
         <source>P&amp;yramid</source>
         <translation>P&amp;yramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="352"/>
+        <location filename="../../ProjectPyramid/Project.py" line="397"/>
         <source>New template...</source>
         <translation>Neues Template...</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="361"/>
+        <location filename="../../ProjectPyramid/Project.py" line="406"/>
         <source>Extract Messages</source>
         <translation>Texte extrahieren</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="363"/>
+        <location filename="../../ProjectPyramid/Project.py" line="408"/>
         <source>Compile All Catalogs</source>
         <translation>Alle Kataloge übersetzen</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="365"/>
+        <location filename="../../ProjectPyramid/Project.py" line="410"/>
         <source>Compile Selected Catalogs</source>
         <translation>Ausgewählte Kataloge übersetzen</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="368"/>
+        <location filename="../../ProjectPyramid/Project.py" line="413"/>
         <source>Update All Catalogs</source>
         <translation>Alle Kataloge aktualisieren</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="370"/>
+        <location filename="../../ProjectPyramid/Project.py" line="415"/>
         <source>Update Selected Catalogs</source>
         <translation>Ausgewählte Kataloge aktualisieren</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="413"/>
+        <location filename="../../ProjectPyramid/Project.py" line="458"/>
         <source>Chameleon Templates (*.pt);;Chameleon Text Templates (*.txt);;Mako Templates (*.mako);;Mako Templates (*.mak);;HTML Files (*.html);;HTML Files (*.htm);;All Files (*)</source>
         <translation>Chameleon Templates (*.pt);;Chameleon Text Templates (*.txt);;Mako Templates (*.mako);;Mako Templates (*.mak);;HTML Dateien (*.html);;HTML Dateien (*.htm);;Alle Dateien (*)</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="449"/>
+        <location filename="../../ProjectPyramid/Project.py" line="494"/>
         <source>New Form</source>
         <translation>Neues Formular</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="436"/>
+        <location filename="../../ProjectPyramid/Project.py" line="481"/>
         <source>The file already exists! Overwrite it?</source>
         <translation>Die Datei existiert bereits. Überschreiben?</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="449"/>
+        <location filename="../../ProjectPyramid/Project.py" line="494"/>
         <source>&lt;p&gt;The new form file &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;br/&gt;Problem: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die neue Formulardatei &lt;b&gt;{0}&lt;/b&gt; konnte nicht erstellt werden.&lt;br/&gt;Problem: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="756"/>
+        <location filename="../../ProjectPyramid/Project.py" line="837"/>
         <source>Select Pyramid Project</source>
         <translation>Pyramid Projekt auswählen</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="756"/>
+        <location filename="../../ProjectPyramid/Project.py" line="837"/>
         <source>Select the Pyramid project to work with.</source>
         <translation>Wähle das Pyramid Projekt aus, mit dem gearbeitet werden soll.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="794"/>
+        <location filename="../../ProjectPyramid/Project.py" line="875"/>
         <source>None</source>
         <translation>keines</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="797"/>
+        <location filename="../../ProjectPyramid/Project.py" line="878"/>
         <source>&amp;Current Pyramid Project ({0})</source>
         <translation>&amp;Aktuelles Pyramid Projekt ({0})</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1404"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1507"/>
         <source>No current Pyramid project selected or no Pyramid project created yet. Aborting...</source>
         <translation>Kein aktuelles Pyramid Projekt ausgewählt oder noch keines erstellt. Abbruch...</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1449"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1552"/>
         <source>Process Generation Error</source>
         <translation>Fehler bei der Prozessgenerierung</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="876"/>
+        <location filename="../../ProjectPyramid/Project.py" line="964"/>
         <source>The Pyramid server could not be started.</source>
         <translation>Der Pyramid Server konnte nicht gestartet werden.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="916"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1007"/>
         <source>Could not start the web-browser for the URL &quot;{0}&quot;.</source>
         <translation>Der Web-Browser konnte nicht für die URL &quot;{0}&quot; gestartet werden.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="950"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1041"/>
         <source>The Pyramid Shell process could not be started.</source>
         <translation>Der Pyramid Konsolenprozess konnte nicht gestartet werden.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="977"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1068"/>
         <source>Pyramid development environment setup successfully.</source>
         <translation>Die Pyramid Entwicklungsumgebung wurde erfolgreich eingerichtet.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="991"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1084"/>
         <source>Build Distribution File</source>
         <translation>Distributionsdateien erzeugen</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1013"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1106"/>
         <source>Python distribution file built successfully.</source>
         <translation>Python Distributionsdateien erfolgreich erzeugt.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1057"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1150"/>
         <source>Database initialized successfully.</source>
         <translation>Datenbank erfolgreich initialisiert.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1081"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1174"/>
         <source>Enter the URL to be matched:</source>
         <translation>Gib die zu überprüfende URL ein:</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1215"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1313"/>
         <source>Extract messages</source>
         <translation>Texte extrahieren</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1230"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1350"/>
         <source>
 Messages extracted successfully.</source>
         <translation>Texte erfolgreich extrahiert.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1277"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1380"/>
         <source>
 Message catalog initialized successfully.</source>
         <translation>
 Textkatalog erfolgreich initialisiert.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1326"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1429"/>
         <source>Compiling message catalogs</source>
         <translation>Übersetze Textkataloge</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1355"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1458"/>
         <source>
 Message catalogs compiled successfully.</source>
         <translation>
 Textkataloge erfolgreich übersetzt.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1424"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1527"/>
         <source>No locales detected. Aborting...</source>
         <translation>Keine Sprachen erkannt. Abbruch...</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1400"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1503"/>
         <source>Updating message catalogs</source>
         <translation>Aktualisiere Textkataloge</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1429"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1532"/>
         <source>
 Message catalogs updated successfully.</source>
         <translation>
 Textkataloge erfolgreich aktualisiert.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1260"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1363"/>
         <source>Initializing message catalog for &apos;{0}&apos;</source>
         <translation>Initialisiere Textkatalog für &apos;{0}&apos;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="621"/>
+        <location filename="../../ProjectPyramid/Project.py" line="700"/>
         <source>&lt;p&gt;Pyramid is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.&lt;/p&gt;&lt;p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;Version:&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;URL:&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;{1}&quot;&gt;{1}&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Pyramid ist ein Python Web-Framework, das eine schnelle Entwicklung und ein klares, pragmatisches Design fördert.&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;Version:&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;URL:&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;{1}&quot;&gt;{1}&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="336"/>
+        <location filename="../../ProjectPyramid/Project.py" line="381"/>
         <source>Open with {0}</source>
         <translation>Mit [0} öffnen</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1449"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1552"/>
         <source>The translations editor process ({0}) could not be started.</source>
         <translation>Der Prozess für den Übersetzungseditor ({0}) konnte nicht gestartet werden.</translation>
     </message>
+    <message>
+        <location filename="../../ProjectPyramid/Project.py" line="1328"/>
+        <source>No setup.cfg found or no &quot;extract_messages&quot; section found in setup.cfg.</source>
+        <translation>Keine setup.cfg gefunden bzw. keine Sektion &quot;extract_messages&quot; in setup.cfg vorhanden.</translation>
+    </message>
+    <message>
+        <location filename="../../ProjectPyramid/Project.py" line="1334"/>
+        <source>No &quot;output_file&quot; option found in setup.cfg.</source>
+        <translation>Keine Option &quot;output_file&quot; in setup.cfg vorhanden.</translation>
+    </message>
 </context>
 <context>
     <name>ProjectPyramidPlugin</name>
     <message>
-        <location filename="../../PluginProjectPyramid.py" line="386"/>
+        <location filename="../../PluginProjectPyramid.py" line="388"/>
         <source>Pyramid</source>
         <translation>Pyramid</translation>
     </message>
     <message>
-        <location filename="../../PluginProjectPyramid.py" line="162"/>
+        <location filename="../../PluginProjectPyramid.py" line="164"/>
         <source>eric5 version is too old, {0}, {1} or newer needed.</source>
         <translation>Die eric5 Version ist zu alt; {0}, {1} oder neuer wird benötigt.</translation>
     </message>
@@ -685,12 +695,12 @@
         <translation>Alt+K</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidDialog.py" line="162"/>
+        <location filename="../../ProjectPyramid/PyramidDialog.py" line="168"/>
         <source>Process Generation Error</source>
         <translation>Fehler bei der Prozessgenerierung</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidDialog.py" line="162"/>
+        <location filename="../../ProjectPyramid/PyramidDialog.py" line="168"/>
         <source>The process {0} could not be started. Ensure, that it is in the search path.</source>
         <translation>Der Prozess {0} konnte nicht gestartet werden. Bitte stellen sie sicher, dass er sich im Suchpfad befindet.</translation>
     </message>
@@ -773,27 +783,27 @@
         <translation>Gib die URL für die Pyramid Dokumentation ein</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="61"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="63"/>
         <source>Plain Python</source>
         <translation>Normales Python</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="62"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="64"/>
         <source>IPython</source>
         <translation>IPython</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="63"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="65"/>
         <source>bpython</source>
         <translation>bpython</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="117"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="119"/>
         <source>Select Virtual Environment for Python 3</source>
         <translation>Wähle die virtuelle Umgebung für Python 3</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="135"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="137"/>
         <source>Select Virtual Environment for Python 2</source>
         <translation>Wähle die virtuelle Umgebung für Python 2</translation>
     </message>
@@ -803,7 +813,7 @@
         <translation>Konsole</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="149"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="151"/>
         <source>Translations Editor</source>
         <translation>Übersetzungseditor</translation>
     </message>
@@ -818,7 +828,7 @@
         <translation>Wähle den Übersetzungseditor über einen Auswahldialog aus</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="149"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="151"/>
         <source>All Files (*)</source>
         <translation>Alle Dateien (*)</translation>
     </message>
@@ -876,22 +886,22 @@
         <translation>Alt+K</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="96"/>
+        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="102"/>
         <source>No routes found.</source>
         <translation>Keine Routen gefunden.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="129"/>
+        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="135"/>
         <source>Getting routes...</source>
         <translation>Ermittle Routen...</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="158"/>
+        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="164"/>
         <source>Process Generation Error</source>
         <translation>Fehler bei der Prozessgenerierung</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="158"/>
+        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="164"/>
         <source>The process {0} could not be started. Ensure, that it is in the search path.</source>
         <translation>Der Prozess {0} konnte nicht gestartet werden. Bitte stellen sie sicher, dass er sich im Suchpfad befindet.</translation>
     </message>
--- a/ProjectPyramid/i18n/pyramid_en.ts	Sat Sep 28 13:34:57 2013 +0200
+++ b/ProjectPyramid/i18n/pyramid_en.ts	Sun Oct 27 22:43:17 2013 +0100
@@ -48,17 +48,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="53"/>
+        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="59"/>
         <source>The pcreate command did not finish within 30s.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="56"/>
+        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="62"/>
         <source>Could not start the pcreate executable.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="64"/>
+        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="70"/>
         <source>Process Generation Error</source>
         <translation type="unfinished"></translation>
     </message>
@@ -81,17 +81,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="54"/>
+        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="60"/>
         <source>The python setup.py command did not finish within 30s.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="57"/>
+        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="63"/>
         <source>Could not start the pcreate executable.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="68"/>
+        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="74"/>
         <source>Process Generation Error</source>
         <translation type="unfinished"></translation>
     </message>
@@ -124,22 +124,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="30"/>
+        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="32"/>
         <source>Standard HTML 5 template</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="99"/>
+        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="101"/>
         <source>Mako template with sections</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="42"/>
+        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="44"/>
         <source>Standard HTML template</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="55"/>
+        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="57"/>
         <source>Chameleon template</source>
         <translation type="unfinished"></translation>
     </message>
@@ -147,479 +147,489 @@
 <context>
     <name>Project</name>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="65"/>
+        <location filename="../../ProjectPyramid/Project.py" line="110"/>
         <source>Current Pyramid Project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="69"/>
+        <location filename="../../ProjectPyramid/Project.py" line="114"/>
         <source>Selects the current Pyramid project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="71"/>
+        <location filename="../../ProjectPyramid/Project.py" line="116"/>
         <source>&lt;b&gt;Current Pyramid Project&lt;/b&gt;&lt;p&gt;Selects the Pyramid project. Used for multi-project Pyramid projects to switch between the projects.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="698"/>
+        <location filename="../../ProjectPyramid/Project.py" line="779"/>
         <source>Create Pyramid Project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="83"/>
+        <location filename="../../ProjectPyramid/Project.py" line="128"/>
         <source>Create Pyramid &amp;Project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="87"/>
+        <location filename="../../ProjectPyramid/Project.py" line="132"/>
         <source>Creates a new Pyramid project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="89"/>
+        <location filename="../../ProjectPyramid/Project.py" line="134"/>
         <source>&lt;b&gt;Create Pyramid Project&lt;/b&gt;&lt;p&gt;Creates a new Pyramid project using &quot;pcreate&quot;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="849"/>
+        <location filename="../../ProjectPyramid/Project.py" line="937"/>
         <source>Run Server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="100"/>
+        <location filename="../../ProjectPyramid/Project.py" line="145"/>
         <source>Run &amp;Server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="104"/>
+        <location filename="../../ProjectPyramid/Project.py" line="149"/>
         <source>Starts the Pyramid Web server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="106"/>
+        <location filename="../../ProjectPyramid/Project.py" line="151"/>
         <source>&lt;b&gt;Run Server&lt;/b&gt;&lt;p&gt;Starts the Pyramid Web server using &quot;pserve --reload development.ini&quot;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="114"/>
+        <location filename="../../ProjectPyramid/Project.py" line="159"/>
         <source>Run Server with Logging</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="114"/>
+        <location filename="../../ProjectPyramid/Project.py" line="159"/>
         <source>Run Server with &amp;Logging</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="118"/>
+        <location filename="../../ProjectPyramid/Project.py" line="163"/>
         <source>Starts the Pyramid Web server with logging</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="120"/>
+        <location filename="../../ProjectPyramid/Project.py" line="165"/>
         <source>&lt;b&gt;Run Server with Logging&lt;/b&gt;&lt;p&gt;Starts the Pyramid Web server with logging using &quot;pserve --log-file=server.log --reload development.ini&quot;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="916"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1007"/>
         <source>Run Web-Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="128"/>
+        <location filename="../../ProjectPyramid/Project.py" line="173"/>
         <source>Run &amp;Web-Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="132"/>
+        <location filename="../../ProjectPyramid/Project.py" line="177"/>
         <source>Starts the default Web-Browser with the URL of the Pyramid Web server</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="134"/>
+        <location filename="../../ProjectPyramid/Project.py" line="179"/>
         <source>&lt;b&gt;Run Web-Browser&lt;/b&gt;&lt;p&gt;Starts the default Web-Browser with the URL of the Pyramid Web server.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="931"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1022"/>
         <source>Start Pyramid Python Console</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="142"/>
+        <location filename="../../ProjectPyramid/Project.py" line="187"/>
         <source>Start Pyramid &amp;Python Console</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="146"/>
+        <location filename="../../ProjectPyramid/Project.py" line="191"/>
         <source>Starts an interactive Python interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="148"/>
+        <location filename="../../ProjectPyramid/Project.py" line="193"/>
         <source>&lt;b&gt;Start Pyramid Python Console&lt;/b&gt;&lt;p&gt;Starts an interactive Python interpreter.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="962"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1053"/>
         <source>Setup Development Environment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="159"/>
+        <location filename="../../ProjectPyramid/Project.py" line="204"/>
         <source>Setup &amp;Development Environment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="163"/>
+        <location filename="../../ProjectPyramid/Project.py" line="208"/>
         <source>Setup the Pyramid project in development mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="165"/>
+        <location filename="../../ProjectPyramid/Project.py" line="210"/>
         <source>&lt;b&gt;Setup Development Environment&lt;/b&gt;&lt;p&gt;Setup the Pyramid project in development mode using &quot;python setup.py develop&quot;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1043"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1136"/>
         <source>Initialize Database</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="177"/>
+        <location filename="../../ProjectPyramid/Project.py" line="222"/>
         <source>Initialize &amp;Database</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="181"/>
+        <location filename="../../ProjectPyramid/Project.py" line="226"/>
         <source>Initializes (or re-initializes) the database of the current Pyramid project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="184"/>
+        <location filename="../../ProjectPyramid/Project.py" line="229"/>
         <source>&lt;b&gt;Initialize Database&lt;/b&gt;&lt;p&gt;Initializes (or re-initializes) the database of the current Pyramid project.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1081"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1174"/>
         <source>Show Matching Views</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="196"/>
+        <location filename="../../ProjectPyramid/Project.py" line="241"/>
         <source>Show Matching &amp;Views</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="200"/>
+        <location filename="../../ProjectPyramid/Project.py" line="245"/>
         <source>Show views matching a given URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="202"/>
+        <location filename="../../ProjectPyramid/Project.py" line="247"/>
         <source>&lt;b&gt;Show Matching Views&lt;/b&gt;&lt;p&gt;Show views matching a given URL.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1104"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1197"/>
         <source>Show Routes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="209"/>
+        <location filename="../../ProjectPyramid/Project.py" line="254"/>
         <source>Show &amp;Routes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="213"/>
+        <location filename="../../ProjectPyramid/Project.py" line="258"/>
         <source>Show all URL dispatch routes used by a Pyramid application</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="215"/>
+        <location filename="../../ProjectPyramid/Project.py" line="260"/>
         <source>&lt;b&gt;Show Routes&lt;/b&gt;&lt;p&gt;Show all URL dispatch routes used by a Pyramid application in the order in which they are evaluated.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1125"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1218"/>
         <source>Show Tween Objects</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="223"/>
+        <location filename="../../ProjectPyramid/Project.py" line="268"/>
         <source>Show &amp;Tween Objects</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="227"/>
+        <location filename="../../ProjectPyramid/Project.py" line="272"/>
         <source>Show all implicit and explicit tween objects used by a Pyramid application</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="229"/>
+        <location filename="../../ProjectPyramid/Project.py" line="274"/>
         <source>&lt;b&gt;Show Tween Objects&lt;/b&gt;&lt;p&gt;Show all implicit and explicit tween objects used by a Pyramid application.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="241"/>
+        <location filename="../../ProjectPyramid/Project.py" line="286"/>
         <source>Build Distribution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="241"/>
+        <location filename="../../ProjectPyramid/Project.py" line="286"/>
         <source>Build &amp;Distribution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="245"/>
+        <location filename="../../ProjectPyramid/Project.py" line="290"/>
         <source>Builds a distribution file for the Pyramid project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="247"/>
+        <location filename="../../ProjectPyramid/Project.py" line="292"/>
         <source>&lt;b&gt;Build Distribution&lt;/b&gt;&lt;p&gt;Builds a distribution file for the Pyramid project using &quot;python setup.py sdist&quot;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="259"/>
+        <location filename="../../ProjectPyramid/Project.py" line="304"/>
         <source>Documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="259"/>
+        <location filename="../../ProjectPyramid/Project.py" line="304"/>
         <source>D&amp;ocumentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="263"/>
+        <location filename="../../ProjectPyramid/Project.py" line="308"/>
         <source>Shows the help viewer with the Pyramid documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="265"/>
+        <location filename="../../ProjectPyramid/Project.py" line="310"/>
         <source>&lt;b&gt;Documentation&lt;/b&gt;&lt;p&gt;Shows the help viewer with the Pyramid documentation.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="621"/>
+        <location filename="../../ProjectPyramid/Project.py" line="700"/>
         <source>About Pyramid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="276"/>
+        <location filename="../../ProjectPyramid/Project.py" line="321"/>
         <source>About P&amp;yramid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="280"/>
+        <location filename="../../ProjectPyramid/Project.py" line="325"/>
         <source>Shows some information about Pyramid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="282"/>
+        <location filename="../../ProjectPyramid/Project.py" line="327"/>
         <source>&lt;b&gt;About Pyramid&lt;/b&gt;&lt;p&gt;Shows some information about Pyramid.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="297"/>
+        <location filename="../../ProjectPyramid/Project.py" line="342"/>
         <source>P&amp;yramid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="352"/>
+        <location filename="../../ProjectPyramid/Project.py" line="397"/>
         <source>New template...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="361"/>
+        <location filename="../../ProjectPyramid/Project.py" line="406"/>
         <source>Extract Messages</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="363"/>
+        <location filename="../../ProjectPyramid/Project.py" line="408"/>
         <source>Compile All Catalogs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="365"/>
+        <location filename="../../ProjectPyramid/Project.py" line="410"/>
         <source>Compile Selected Catalogs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="368"/>
+        <location filename="../../ProjectPyramid/Project.py" line="413"/>
         <source>Update All Catalogs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="370"/>
+        <location filename="../../ProjectPyramid/Project.py" line="415"/>
         <source>Update Selected Catalogs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="413"/>
+        <location filename="../../ProjectPyramid/Project.py" line="458"/>
         <source>Chameleon Templates (*.pt);;Chameleon Text Templates (*.txt);;Mako Templates (*.mako);;Mako Templates (*.mak);;HTML Files (*.html);;HTML Files (*.htm);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="449"/>
+        <location filename="../../ProjectPyramid/Project.py" line="494"/>
         <source>New Form</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="436"/>
+        <location filename="../../ProjectPyramid/Project.py" line="481"/>
         <source>The file already exists! Overwrite it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="449"/>
+        <location filename="../../ProjectPyramid/Project.py" line="494"/>
         <source>&lt;p&gt;The new form file &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;br/&gt;Problem: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="756"/>
+        <location filename="../../ProjectPyramid/Project.py" line="837"/>
         <source>Select Pyramid Project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="756"/>
+        <location filename="../../ProjectPyramid/Project.py" line="837"/>
         <source>Select the Pyramid project to work with.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="794"/>
+        <location filename="../../ProjectPyramid/Project.py" line="875"/>
         <source>None</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="797"/>
+        <location filename="../../ProjectPyramid/Project.py" line="878"/>
         <source>&amp;Current Pyramid Project ({0})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1404"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1507"/>
         <source>No current Pyramid project selected or no Pyramid project created yet. Aborting...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1449"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1552"/>
         <source>Process Generation Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="876"/>
+        <location filename="../../ProjectPyramid/Project.py" line="964"/>
         <source>The Pyramid server could not be started.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="916"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1007"/>
         <source>Could not start the web-browser for the URL &quot;{0}&quot;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="950"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1041"/>
         <source>The Pyramid Shell process could not be started.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="977"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1068"/>
         <source>Pyramid development environment setup successfully.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="991"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1084"/>
         <source>Build Distribution File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1013"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1106"/>
         <source>Python distribution file built successfully.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1057"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1150"/>
         <source>Database initialized successfully.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1081"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1174"/>
         <source>Enter the URL to be matched:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1215"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1313"/>
         <source>Extract messages</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1230"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1350"/>
         <source>
 Messages extracted successfully.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1277"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1380"/>
         <source>
 Message catalog initialized successfully.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1326"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1429"/>
         <source>Compiling message catalogs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1355"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1458"/>
         <source>
 Message catalogs compiled successfully.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1424"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1527"/>
         <source>No locales detected. Aborting...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1400"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1503"/>
         <source>Updating message catalogs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1429"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1532"/>
         <source>
 Message catalogs updated successfully.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1260"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1363"/>
         <source>Initializing message catalog for &apos;{0}&apos;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="621"/>
+        <location filename="../../ProjectPyramid/Project.py" line="700"/>
         <source>&lt;p&gt;Pyramid is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.&lt;/p&gt;&lt;p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;Version:&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;URL:&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;{1}&quot;&gt;{1}&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="336"/>
+        <location filename="../../ProjectPyramid/Project.py" line="381"/>
         <source>Open with {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1449"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1552"/>
         <source>The translations editor process ({0}) could not be started.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../ProjectPyramid/Project.py" line="1328"/>
+        <source>No setup.cfg found or no &quot;extract_messages&quot; section found in setup.cfg.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../ProjectPyramid/Project.py" line="1334"/>
+        <source>No &quot;output_file&quot; option found in setup.cfg.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ProjectPyramidPlugin</name>
     <message>
-        <location filename="../../PluginProjectPyramid.py" line="386"/>
+        <location filename="../../PluginProjectPyramid.py" line="388"/>
         <source>Pyramid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../PluginProjectPyramid.py" line="162"/>
+        <location filename="../../PluginProjectPyramid.py" line="164"/>
         <source>eric5 version is too old, {0}, {1} or newer needed.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -682,12 +692,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidDialog.py" line="162"/>
+        <location filename="../../ProjectPyramid/PyramidDialog.py" line="168"/>
         <source>Process Generation Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidDialog.py" line="162"/>
+        <location filename="../../ProjectPyramid/PyramidDialog.py" line="168"/>
         <source>The process {0} could not be started. Ensure, that it is in the search path.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -770,27 +780,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="61"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="63"/>
         <source>Plain Python</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="62"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="64"/>
         <source>IPython</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="63"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="65"/>
         <source>bpython</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="117"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="119"/>
         <source>Select Virtual Environment for Python 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="135"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="137"/>
         <source>Select Virtual Environment for Python 2</source>
         <translation type="unfinished"></translation>
     </message>
@@ -800,7 +810,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="149"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="151"/>
         <source>Translations Editor</source>
         <translation type="unfinished"></translation>
     </message>
@@ -815,7 +825,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="149"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="151"/>
         <source>All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -873,22 +883,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="96"/>
+        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="102"/>
         <source>No routes found.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="129"/>
+        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="135"/>
         <source>Getting routes...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="158"/>
+        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="164"/>
         <source>Process Generation Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="158"/>
+        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="164"/>
         <source>The process {0} could not be started. Ensure, that it is in the search path.</source>
         <translation type="unfinished"></translation>
     </message>
--- a/ProjectPyramid/i18n/pyramid_es.ts	Sat Sep 28 13:34:57 2013 +0200
+++ b/ProjectPyramid/i18n/pyramid_es.ts	Sun Oct 27 22:43:17 2013 +0100
@@ -48,17 +48,17 @@
         <translation>Simular creación de proyecto Piramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="53"/>
+        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="59"/>
         <source>The pcreate command did not finish within 30s.</source>
         <translation>El comando pcreate no ha terminado en 30s o menos.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="56"/>
+        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="62"/>
         <source>Could not start the pcreate executable.</source>
         <translation>No se ha podido iniciar el ejecutable de pcreate.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="64"/>
+        <location filename="../../ProjectPyramid/CreateParametersDialog.py" line="70"/>
         <source>Process Generation Error</source>
         <translation>Error de Generación de Proceso</translation>
     </message>
@@ -81,17 +81,17 @@
         <translation>Comprobar los formatos de archivo de distribución que deberían ser generados</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="54"/>
+        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="60"/>
         <source>The python setup.py command did not finish within 30s.</source>
         <translation>El comando python setup.py no ha terminado en 30s o menos.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="57"/>
+        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="63"/>
         <source>Could not start the pcreate executable.</source>
         <translation>No se ha podido iniciar el ejecutable de pcreate.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="68"/>
+        <location filename="../../ProjectPyramid/DistributionTypeSelectionDialog.py" line="74"/>
         <source>Process Generation Error</source>
         <translation>Error de Generación de Proceso</translation>
     </message>
@@ -124,22 +124,22 @@
         <translation>Muestra el texto de la plantilla seleccionada</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="30"/>
+        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="32"/>
         <source>Standard HTML 5 template</source>
         <translation>Plantilla Estándar HTML 5</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="99"/>
+        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="101"/>
         <source>Mako template with sections</source>
         <translation>Plantilla Mako con secciones</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="42"/>
+        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="44"/>
         <source>Standard HTML template</source>
         <translation>Plantilla Estándar HTML</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="55"/>
+        <location filename="../../ProjectPyramid/FormSelectionDialog.py" line="57"/>
         <source>Chameleon template</source>
         <translation>Plantilla Chameleon</translation>
     </message>
@@ -147,332 +147,332 @@
 <context>
     <name>Project</name>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="65"/>
+        <location filename="../../ProjectPyramid/Project.py" line="110"/>
         <source>Current Pyramid Project</source>
         <translation>Proyecto Pyramid Actual</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="69"/>
+        <location filename="../../ProjectPyramid/Project.py" line="114"/>
         <source>Selects the current Pyramid project</source>
         <translation>Selecciona el proyecto Piramid actual</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="71"/>
+        <location filename="../../ProjectPyramid/Project.py" line="116"/>
         <source>&lt;b&gt;Current Pyramid Project&lt;/b&gt;&lt;p&gt;Selects the Pyramid project. Used for multi-project Pyramid projects to switch between the projects.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Proyecto Pyramid Actual&lt;/b&gt;&lt;p&gt;Seleciona el proyecto Pyramid. Se utiliza en proyectos Pyramid multi-proyecto Pyramid projects para cambiar entre proyectos.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="698"/>
+        <location filename="../../ProjectPyramid/Project.py" line="779"/>
         <source>Create Pyramid Project</source>
         <translation>Crear Proyecto Pyramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="83"/>
+        <location filename="../../ProjectPyramid/Project.py" line="128"/>
         <source>Create Pyramid &amp;Project</source>
         <translation>Crear &amp;Proyecto Pyramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="87"/>
+        <location filename="../../ProjectPyramid/Project.py" line="132"/>
         <source>Creates a new Pyramid project</source>
         <translation>Crea un nuevo proyecto Pyramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="89"/>
+        <location filename="../../ProjectPyramid/Project.py" line="134"/>
         <source>&lt;b&gt;Create Pyramid Project&lt;/b&gt;&lt;p&gt;Creates a new Pyramid project using &quot;pcreate&quot;.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Crear Proyecto Pyramid &lt;/b&gt;&lt;p&gt;Crea un nuevo proyecto Pyramid usando &quot;pcreate&quot;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="849"/>
+        <location filename="../../ProjectPyramid/Project.py" line="937"/>
         <source>Run Server</source>
         <translation>Lanzar Servidor</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="100"/>
+        <location filename="../../ProjectPyramid/Project.py" line="145"/>
         <source>Run &amp;Server</source>
         <translation>Lanzar &amp;Servidor</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="104"/>
+        <location filename="../../ProjectPyramid/Project.py" line="149"/>
         <source>Starts the Pyramid Web server</source>
         <translation>Inicia el servidor Web de Pyramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="106"/>
+        <location filename="../../ProjectPyramid/Project.py" line="151"/>
         <source>&lt;b&gt;Run Server&lt;/b&gt;&lt;p&gt;Starts the Pyramid Web server using &quot;pserve --reload development.ini&quot;.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Lanzar Servidor&lt;/b&gt;&lt;p&gt;Inicia el servidor Web de Pyramid usando &quot;pserve --reload development.ini&quot;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="114"/>
+        <location filename="../../ProjectPyramid/Project.py" line="159"/>
         <source>Run Server with Logging</source>
         <translation>Lanzar Servidor con Log</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="114"/>
+        <location filename="../../ProjectPyramid/Project.py" line="159"/>
         <source>Run Server with &amp;Logging</source>
         <translation>Lanzar Servidor con &amp;Log</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="118"/>
+        <location filename="../../ProjectPyramid/Project.py" line="163"/>
         <source>Starts the Pyramid Web server with logging</source>
         <translation>Inicia el servidor Web de Pyramid con log</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="120"/>
+        <location filename="../../ProjectPyramid/Project.py" line="165"/>
         <source>&lt;b&gt;Run Server with Logging&lt;/b&gt;&lt;p&gt;Starts the Pyramid Web server with logging using &quot;pserve --log-file=server.log --reload development.ini&quot;.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Lanzar Servidor con Log&lt;/b&gt;&lt;p&gt;Inicia el servidor Web de Pyramid con log usando &quot;pserve --log-file=server.log --reload development.ini&quot;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="916"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1007"/>
         <source>Run Web-Browser</source>
         <translation>Lanzar Navegador Web</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="128"/>
+        <location filename="../../ProjectPyramid/Project.py" line="173"/>
         <source>Run &amp;Web-Browser</source>
         <translation>Lanzar Navegador &amp;Web</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="132"/>
+        <location filename="../../ProjectPyramid/Project.py" line="177"/>
         <source>Starts the default Web-Browser with the URL of the Pyramid Web server</source>
         <translation>Inicia el Navegador Web por defecto con la URL del servidor Web de Pyramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="134"/>
+        <location filename="../../ProjectPyramid/Project.py" line="179"/>
         <source>&lt;b&gt;Run Web-Browser&lt;/b&gt;&lt;p&gt;Starts the default Web-Browser with the URL of the Pyramid Web server.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Lanzar Navegador Web&lt;/b&gt;&lt;p&gt;Inicia el Navegador Web por defecto con la URL del servidor Web de Pyramid.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="931"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1022"/>
         <source>Start Pyramid Python Console</source>
         <translation>Iniciar Consola Python de Pyramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="142"/>
+        <location filename="../../ProjectPyramid/Project.py" line="187"/>
         <source>Start Pyramid &amp;Python Console</source>
         <translation>Iniciar Consola &amp;Python de Pyramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="146"/>
+        <location filename="../../ProjectPyramid/Project.py" line="191"/>
         <source>Starts an interactive Python interpreter</source>
         <translation>Inicia un intérprete interactivo de Python</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="148"/>
+        <location filename="../../ProjectPyramid/Project.py" line="193"/>
         <source>&lt;b&gt;Start Pyramid Python Console&lt;/b&gt;&lt;p&gt;Starts an interactive Python interpreter.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Iniciar Consola Python de Pyramid&lt;/b&gt;&lt;p&gt;Inicia un intérprete interactivo de Python.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="962"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1053"/>
         <source>Setup Development Environment</source>
         <translation>Configurar Entorno de Desarrollo</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="159"/>
+        <location filename="../../ProjectPyramid/Project.py" line="204"/>
         <source>Setup &amp;Development Environment</source>
         <translation>Configurar Entorno de &amp;Desarrollo</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="163"/>
+        <location filename="../../ProjectPyramid/Project.py" line="208"/>
         <source>Setup the Pyramid project in development mode</source>
         <translation>Configurar el proyecto Pyramid en modo de desarrollo</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="165"/>
+        <location filename="../../ProjectPyramid/Project.py" line="210"/>
         <source>&lt;b&gt;Setup Development Environment&lt;/b&gt;&lt;p&gt;Setup the Pyramid project in development mode using &quot;python setup.py develop&quot;.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Configurar Entorno de Desarrollo&lt;/b&gt;&lt;p&gt;Configurar el proyecto Pyramid en modo de desarrollo usando &quot;python setup.py develop&quot;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1043"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1136"/>
         <source>Initialize Database</source>
         <translation>Inicializar Base de Datos</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="177"/>
+        <location filename="../../ProjectPyramid/Project.py" line="222"/>
         <source>Initialize &amp;Database</source>
         <translation>Inicializar Base de &amp;Datos</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="181"/>
+        <location filename="../../ProjectPyramid/Project.py" line="226"/>
         <source>Initializes (or re-initializes) the database of the current Pyramid project</source>
         <translation>Inicializa (o reinicializa) la base de datos del proyecto Pyramid actual</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="184"/>
+        <location filename="../../ProjectPyramid/Project.py" line="229"/>
         <source>&lt;b&gt;Initialize Database&lt;/b&gt;&lt;p&gt;Initializes (or re-initializes) the database of the current Pyramid project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Inicializar Base de Datos&lt;/b&gt;&lt;p&gt;Inicializa (o reinicializa) la base de datos del proyecto Pyramid actual.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1081"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1174"/>
         <source>Show Matching Views</source>
         <translation>Mostrar Vistas Concordantes</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="196"/>
+        <location filename="../../ProjectPyramid/Project.py" line="241"/>
         <source>Show Matching &amp;Views</source>
         <translation>Mostrar &amp;Vistas Concordantes</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="200"/>
+        <location filename="../../ProjectPyramid/Project.py" line="245"/>
         <source>Show views matching a given URL</source>
         <translation>Mostrar vistas que concuerdan con una URL dada</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="202"/>
+        <location filename="../../ProjectPyramid/Project.py" line="247"/>
         <source>&lt;b&gt;Show Matching Views&lt;/b&gt;&lt;p&gt;Show views matching a given URL.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Mostrar Vistas Concordantes&lt;/b&gt;&lt;p&gt;Mostrar vistas que concuerdan con una URL dada.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1104"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1197"/>
         <source>Show Routes</source>
         <translation>Mostrar Rutas</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="209"/>
+        <location filename="../../ProjectPyramid/Project.py" line="254"/>
         <source>Show &amp;Routes</source>
         <translation>Mostrar &amp;Rutas</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="213"/>
+        <location filename="../../ProjectPyramid/Project.py" line="258"/>
         <source>Show all URL dispatch routes used by a Pyramid application</source>
         <translation>Mostrar todas las rutas URL de despacho usadas por una aplicación Pyramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="215"/>
+        <location filename="../../ProjectPyramid/Project.py" line="260"/>
         <source>&lt;b&gt;Show Routes&lt;/b&gt;&lt;p&gt;Show all URL dispatch routes used by a Pyramid application in the order in which they are evaluated.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Mostrar Rutas&lt;/b&gt;&lt;p&gt;Mostrar todas las rutas URL de despacho usadas por una aplicación Pyramid en el orden en que son evaluadas.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1125"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1218"/>
         <source>Show Tween Objects</source>
         <translation>Mostrar Objetos Gemelos</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="223"/>
+        <location filename="../../ProjectPyramid/Project.py" line="268"/>
         <source>Show &amp;Tween Objects</source>
         <translation>Mos&amp;trar Objetos Gemelos</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="227"/>
+        <location filename="../../ProjectPyramid/Project.py" line="272"/>
         <source>Show all implicit and explicit tween objects used by a Pyramid application</source>
         <translation>Mostrar todos los objetos gemelos implícitos y explícitos usados por una aplicación Pyramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="229"/>
+        <location filename="../../ProjectPyramid/Project.py" line="274"/>
         <source>&lt;b&gt;Show Tween Objects&lt;/b&gt;&lt;p&gt;Show all implicit and explicit tween objects used by a Pyramid application.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Mostrar Objetos Gemelos&lt;/b&gt;&lt;p&gt;Mostrar todos los objetos gemelos implícitos y explícitos usados por una aplicación Pyramid.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="241"/>
+        <location filename="../../ProjectPyramid/Project.py" line="286"/>
         <source>Build Distribution</source>
         <translation>Construir Distribución</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="241"/>
+        <location filename="../../ProjectPyramid/Project.py" line="286"/>
         <source>Build &amp;Distribution</source>
         <translation>Construir &amp;Distribución</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="245"/>
+        <location filename="../../ProjectPyramid/Project.py" line="290"/>
         <source>Builds a distribution file for the Pyramid project</source>
         <translation>Construye un archivo de distribución para el proyecto Pyramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="247"/>
+        <location filename="../../ProjectPyramid/Project.py" line="292"/>
         <source>&lt;b&gt;Build Distribution&lt;/b&gt;&lt;p&gt;Builds a distribution file for the Pyramid project using &quot;python setup.py sdist&quot;.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Construir Distribución&lt;/b&gt;&lt;p&gt;Construye un archivo de distribución para el proyecto Pyramid usando &quot;python setup.py sdist&quot;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="259"/>
+        <location filename="../../ProjectPyramid/Project.py" line="304"/>
         <source>Documentation</source>
         <translation>Documentación</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="259"/>
+        <location filename="../../ProjectPyramid/Project.py" line="304"/>
         <source>D&amp;ocumentation</source>
         <translation>D&amp;ocumentación</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="263"/>
+        <location filename="../../ProjectPyramid/Project.py" line="308"/>
         <source>Shows the help viewer with the Pyramid documentation</source>
         <translation>Muestra el visor de ayuda con la documentación de Pyramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="265"/>
+        <location filename="../../ProjectPyramid/Project.py" line="310"/>
         <source>&lt;b&gt;Documentation&lt;/b&gt;&lt;p&gt;Shows the help viewer with the Pyramid documentation.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Documentación&lt;/b&gt;&lt;p&gt;Muestra el visor de ayuda con la documentación de Pyramid.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="621"/>
+        <location filename="../../ProjectPyramid/Project.py" line="700"/>
         <source>About Pyramid</source>
         <translation>Acerca de Pyramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="276"/>
+        <location filename="../../ProjectPyramid/Project.py" line="321"/>
         <source>About P&amp;yramid</source>
         <translation>Acerca de P&amp;yramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="280"/>
+        <location filename="../../ProjectPyramid/Project.py" line="325"/>
         <source>Shows some information about Pyramid</source>
         <translation>Muestra información sobre Pyramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="282"/>
+        <location filename="../../ProjectPyramid/Project.py" line="327"/>
         <source>&lt;b&gt;About Pyramid&lt;/b&gt;&lt;p&gt;Shows some information about Pyramid.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Acerca de Pyramid&lt;/b&gt;&lt;p&gt;Muestra información acerca de Pyramid.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="297"/>
+        <location filename="../../ProjectPyramid/Project.py" line="342"/>
         <source>P&amp;yramid</source>
         <translation>P&amp;yramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="352"/>
+        <location filename="../../ProjectPyramid/Project.py" line="397"/>
         <source>New template...</source>
         <translation>Nueva Plantilla...</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="361"/>
+        <location filename="../../ProjectPyramid/Project.py" line="406"/>
         <source>Extract Messages</source>
         <translation>Extraer Mensajes</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="363"/>
+        <location filename="../../ProjectPyramid/Project.py" line="408"/>
         <source>Compile All Catalogs</source>
         <translation>Compilar Todos los Catálogos</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="365"/>
+        <location filename="../../ProjectPyramid/Project.py" line="410"/>
         <source>Compile Selected Catalogs</source>
         <translation>Compilar Catálogos Seleccionados</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="368"/>
+        <location filename="../../ProjectPyramid/Project.py" line="413"/>
         <source>Update All Catalogs</source>
         <translation>Actualizar Todos los Catálogos</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="370"/>
+        <location filename="../../ProjectPyramid/Project.py" line="415"/>
         <source>Update Selected Catalogs</source>
         <translation>Actualizar Catálogos Seleccionados</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="413"/>
+        <location filename="../../ProjectPyramid/Project.py" line="458"/>
         <source>Chameleon Templates (*.pt);;Chameleon Text Templates (*.txt);;Mako Templates (*.mako);;Mako Templates (*.mak);;HTML Files (*.html);;HTML Files (*.htm);;All Files (*)</source>
         <translation>Plantillas Chameleon (*.pt);;Plantillas de Texto Chameleon (*.txt);;Plantillas Mako (*.mako);;Plantillas Mako (*.mak);;Archivos HTML (*.html);;Archivos HTML (*.htm);;Todos los Archivos (*)</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="449"/>
+        <location filename="../../ProjectPyramid/Project.py" line="494"/>
         <source>New Form</source>
         <translation>Nuevo Formulario</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="436"/>
+        <location filename="../../ProjectPyramid/Project.py" line="481"/>
         <source>The file already exists! Overwrite it?</source>
         <translation>¡El archivo ya existe!¿Sobreescribirlo?</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="449"/>
+        <location filename="../../ProjectPyramid/Project.py" line="494"/>
         <source>&lt;p&gt;The new form file &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;br/&gt;Problem: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;No ha podido crearse el nuevo archivo de formulario &lt;b&gt;{0}&lt;/b&gt;.&lt;br/&gt;Problema: {1}&lt;/p&gt;</translation>
     </message>
@@ -482,150 +482,160 @@
         <translation type="obsolete">&lt;p&gt;Pyramid es un framework Web de alto nivel para Python que promueve desarrollo rápido, y diseño pragmático y limpio.&lt;/p&gt;&lt;p&gt;URL: &lt;a href=&quot;{0}&quot;&gt;{0}&lt;/a&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="756"/>
+        <location filename="../../ProjectPyramid/Project.py" line="837"/>
         <source>Select Pyramid Project</source>
         <translation>Seleccionar Proyecto Pyramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="756"/>
+        <location filename="../../ProjectPyramid/Project.py" line="837"/>
         <source>Select the Pyramid project to work with.</source>
         <translation>Seleccionar el proyecto Pyramid con el que trabajar.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="794"/>
+        <location filename="../../ProjectPyramid/Project.py" line="875"/>
         <source>None</source>
         <translation>Ninguno</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="797"/>
+        <location filename="../../ProjectPyramid/Project.py" line="878"/>
         <source>&amp;Current Pyramid Project ({0})</source>
         <translation>Proyecto Pyramid A&amp;ctual ({0})</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1404"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1507"/>
         <source>No current Pyramid project selected or no Pyramid project created yet. Aborting...</source>
         <translation>No se ha seleccionado proyecto Pyramid actual o no hay creado todavía ningún proyecto Pyramid. Abortando...</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1449"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1552"/>
         <source>Process Generation Error</source>
         <translation>Error de Generación de Proceso</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="876"/>
+        <location filename="../../ProjectPyramid/Project.py" line="964"/>
         <source>The Pyramid server could not be started.</source>
         <translation>No se ha podido iniciar el servidor de Pyramid.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="916"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1007"/>
         <source>Could not start the web-browser for the URL &quot;{0}&quot;.</source>
         <translation>No se ha podido inicialr el navegador web para la URL &quot;{0}&quot;.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="950"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1041"/>
         <source>The Pyramid Shell process could not be started.</source>
         <translation>No se ha podido iniciar el proceso Shell de Pyramid.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="977"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1068"/>
         <source>Pyramid development environment setup successfully.</source>
         <translation>Entorno de desarrollo de Pyramid configurado con éxito.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="991"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1084"/>
         <source>Build Distribution File</source>
         <translation>Construir Archivo de Distribución</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1013"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1106"/>
         <source>Python distribution file built successfully.</source>
         <translation>Archivo de distribución Python construido con éxito.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1057"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1150"/>
         <source>Database initialized successfully.</source>
         <translation>Base de Datos inicializada con éxito.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1081"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1174"/>
         <source>Enter the URL to be matched:</source>
         <translation>Introducir la URL a ser concordada:</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1215"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1313"/>
         <source>Extract messages</source>
         <translation>Extraer mensajes</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1230"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1350"/>
         <source>
 Messages extracted successfully.</source>
         <translation>Mensajes extraídos con éxito.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1277"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1380"/>
         <source>
 Message catalog initialized successfully.</source>
         <translation>Catálogo de Mensajes inicializado con éxito.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1326"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1429"/>
         <source>Compiling message catalogs</source>
         <translation>Compilando catálogos de mensajes</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1355"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1458"/>
         <source>
 Message catalogs compiled successfully.</source>
         <translation>Catálogo de Mensajes compilado con éxito.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1424"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1527"/>
         <source>No locales detected. Aborting...</source>
         <translation>No se han detectado traducciones. Abortando...</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1400"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1503"/>
         <source>Updating message catalogs</source>
         <translation>Actualizando catálogos de mensajes</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1429"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1532"/>
         <source>
 Message catalogs updated successfully.</source>
         <translation>Catálogo de Mensajes actualizado con éxito.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1260"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1363"/>
         <source>Initializing message catalog for &apos;{0}&apos;</source>
         <translation>Inicializando catálogo de mensajes para &apos;{0}&apos;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="621"/>
+        <location filename="../../ProjectPyramid/Project.py" line="700"/>
         <source>&lt;p&gt;Pyramid is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.&lt;/p&gt;&lt;p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;Version:&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;URL:&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;{1}&quot;&gt;{1}&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Pyramid es un framework Web de alto nivel para Python que promueve desarrollo rápido, y diseño pragmático
  y limpio.&lt;/p&gt;&lt;p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;Versión:&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;URL:&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;{1}&quot;&gt;{1}&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="336"/>
+        <location filename="../../ProjectPyramid/Project.py" line="381"/>
         <source>Open with {0}</source>
         <translation>Abrir con {0}</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/Project.py" line="1449"/>
+        <location filename="../../ProjectPyramid/Project.py" line="1552"/>
         <source>The translations editor process ({0}) could not be started.</source>
         <translation>El proceso de edición de traducciones ({0}) no ha podido ser iniciado.</translation>
     </message>
+    <message>
+        <location filename="../../ProjectPyramid/Project.py" line="1328"/>
+        <source>No setup.cfg found or no &quot;extract_messages&quot; section found in setup.cfg.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../ProjectPyramid/Project.py" line="1334"/>
+        <source>No &quot;output_file&quot; option found in setup.cfg.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ProjectPyramidPlugin</name>
     <message>
-        <location filename="../../PluginProjectPyramid.py" line="386"/>
+        <location filename="../../PluginProjectPyramid.py" line="388"/>
         <source>Pyramid</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../PluginProjectPyramid.py" line="162"/>
+        <location filename="../../PluginProjectPyramid.py" line="164"/>
         <source>eric5 version is too old, {0}, {1} or newer needed.</source>
         <translation>La versión de eric5 es demasiado antigua, {0}, es necesaria {1} o más reciente .</translation>
     </message>
@@ -688,12 +698,12 @@
         <translation>Alt+P</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidDialog.py" line="162"/>
+        <location filename="../../ProjectPyramid/PyramidDialog.py" line="168"/>
         <source>Process Generation Error</source>
         <translation>Error de Generación de Proceso</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidDialog.py" line="162"/>
+        <location filename="../../ProjectPyramid/PyramidDialog.py" line="168"/>
         <source>The process {0} could not be started. Ensure, that it is in the search path.</source>
         <translation>No se ha podido iniciar el proceso {0}. Asegúrese de que está en la ruta de búsqueda.</translation>
     </message>
@@ -776,27 +786,27 @@
         <translation>Introducir la URL de la documentación de Pyramid</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="61"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="63"/>
         <source>Plain Python</source>
         <translation>Python normal</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="62"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="64"/>
         <source>IPython</source>
         <translation>IPython</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="63"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="65"/>
         <source>bpython</source>
         <translation>bpython</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="117"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="119"/>
         <source>Select Virtual Environment for Python 3</source>
         <translation>Seleccionar Entorno Virtual para Python 3</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="135"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="137"/>
         <source>Select Virtual Environment for Python 2</source>
         <translation>Seleccionar Entorno Virtual para Python 2</translation>
     </message>
@@ -806,7 +816,7 @@
         <translation>Comando de Consola</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="149"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="151"/>
         <source>Translations Editor</source>
         <translation>Editor de Traducciones</translation>
     </message>
@@ -821,7 +831,7 @@
         <translation>Seleccionar el editor de traducciones vía un diálogo de selección de archivo</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="149"/>
+        <location filename="../../ProjectPyramid/ConfigurationPage/PyramidPage.py" line="151"/>
         <source>All Files (*)</source>
         <translation>Todos los Archivos (*)</translation>
     </message>
@@ -879,22 +889,22 @@
         <translation>Alt+P</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="96"/>
+        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="102"/>
         <source>No routes found.</source>
         <translation>No se han hallado rutas.</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="129"/>
+        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="135"/>
         <source>Getting routes...</source>
         <translation>Obteniendo rutas...</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="158"/>
+        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="164"/>
         <source>Process Generation Error</source>
         <translation>Error de Generación de Proceso</translation>
     </message>
     <message>
-        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="158"/>
+        <location filename="../../ProjectPyramid/PyramidRoutesDialog.py" line="164"/>
         <source>The process {0} could not be started. Ensure, that it is in the search path.</source>
         <translation>No se ha podido iniciar el proceso {0}. Asegúrese de que está en la ruta de búsqueda.</translation>
     </message>

eric ide

mercurial