Merged with default branch to prepare a new release. maintenance release-17.10

Tue, 03 Oct 2017 15:33:11 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 03 Oct 2017 15:33:11 +0200
branch
maintenance
changeset 5885
5228afbb870f
parent 5864
86ccabe751ac (current diff)
parent 5884
7a6f30e7f79c (diff)
child 5896
1f085cf49850

Merged with default branch to prepare a new release.

APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Preferences/__init__.py file | annotate | diff | comparison | revisions
QScintilla/Editor.py file | annotate | diff | comparison | revisions
WebBrowser/WebBrowserView.py file | annotate | diff | comparison | revisions
changelog file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric6.api	Fri Sep 01 12:08:49 2017 +0200
+++ b/APIs/Python3/eric6.api	Tue Oct 03 15:33:11 2017 +0200
@@ -1538,6 +1538,7 @@
 eric6.E5Network.isValidIPv4Address?4(address)
 eric6.E5Network.isValidIPv6Address?4(address)
 eric6.E5XML.Config.debuggerPropertiesFileFormatVersion?7
+eric6.E5XML.Config.dictionariesListFileFormatVersion?7
 eric6.E5XML.Config.highlightingStylesFileFormatVersion?7
 eric6.E5XML.Config.multiProjectFileFormatVersion?7
 eric6.E5XML.Config.pluginRepositoryFileFormatVersion?7
@@ -1581,6 +1582,9 @@
 eric6.E5XML.ShortcutsReader.ShortcutsReader?1(device)
 eric6.E5XML.ShortcutsWriter.ShortcutsWriter.writeXML?4()
 eric6.E5XML.ShortcutsWriter.ShortcutsWriter?1(device)
+eric6.E5XML.SpellCheckDictionariesReader.SpellCheckDictionariesReader.readXML?4()
+eric6.E5XML.SpellCheckDictionariesReader.SpellCheckDictionariesReader.supportedVersions?7
+eric6.E5XML.SpellCheckDictionariesReader.SpellCheckDictionariesReader?1(data, entryCallback)
 eric6.E5XML.TasksReader.TasksReader.readXML?4()
 eric6.E5XML.TasksReader.TasksReader.supportedVersions?7
 eric6.E5XML.TasksReader.TasksReader?1(device, forProject=False, viewer=None)
@@ -6542,6 +6546,7 @@
 eric6.Preferences.ConfigurationPages.WebBrowserPage.WebBrowserPage.save?4()
 eric6.Preferences.ConfigurationPages.WebBrowserPage.WebBrowserPage?1(configDialog)
 eric6.Preferences.ConfigurationPages.WebBrowserPage.create?4(dlg)
+eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.WebBrowserSpellCheckingPage.on_manageDictionariesButton_clicked?4()
 eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked?4()
 eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.WebBrowserSpellCheckingPage.save?4()
 eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.WebBrowserSpellCheckingPage?1()
@@ -7248,14 +7253,12 @@
 eric6.QScintilla.Editor.Editor.autoComplete?4(auto=False, context=True)
 eric6.QScintilla.Editor.Editor.autoCompleteQScintilla?4()
 eric6.QScintilla.Editor.Editor.autoCompletionAPIsAvailable?7
-eric6.QScintilla.Editor.Editor.autoCompletionHook?4()
 eric6.QScintilla.Editor.Editor.bookmarkToggled?7
 eric6.QScintilla.Editor.Editor.boxCommentLine?4()
 eric6.QScintilla.Editor.Editor.boxCommentLineOrSelection?4()
 eric6.QScintilla.Editor.Editor.boxCommentSelection?4()
 eric6.QScintilla.Editor.Editor.breakpointToggled?7
 eric6.QScintilla.Editor.Editor.callTip?4()
-eric6.QScintilla.Editor.Editor.callTipHook?4()
 eric6.QScintilla.Editor.Editor.canAutoCompleteFromAPIs?4()
 eric6.QScintilla.Editor.Editor.canProvideCallTipps?4()
 eric6.QScintilla.Editor.Editor.canProvideDynamicAutoCompletion?4()
@@ -7421,9 +7424,7 @@
 eric6.QScintilla.Editor.Editor.selectWord?4(line, index)
 eric6.QScintilla.Editor.Editor.sendSharedEdit?4()
 eric6.QScintilla.Editor.Editor.setAutoCompletionEnabled?4(enable)
-eric6.QScintilla.Editor.Editor.setAutoCompletionHook?4(func)
 eric6.QScintilla.Editor.Editor.setAutoSpellChecking?4()
-eric6.QScintilla.Editor.Editor.setCallTipHook?4(func)
 eric6.QScintilla.Editor.Editor.setLanguage?4(filename, initTextDisplay=True, propagate=True, pyname="")
 eric6.QScintilla.Editor.Editor.setMonospaced?4(on)
 eric6.QScintilla.Editor.Editor.setMouseClickHandler?4(name, modifiers, button, function)
@@ -7454,8 +7455,6 @@
 eric6.QScintilla.Editor.Editor.undo?4()
 eric6.QScintilla.Editor.Editor.undoAvailable?7
 eric6.QScintilla.Editor.Editor.unindentLineOrSelection?4()
-eric6.QScintilla.Editor.Editor.unsetAutoCompletionHook?4()
-eric6.QScintilla.Editor.Editor.unsetCallTipHook?4()
 eric6.QScintilla.Editor.Editor.updateMarkerMap?4()
 eric6.QScintilla.Editor.Editor.viewportEvent?4(evt)
 eric6.QScintilla.Editor.Editor.wheelEvent?4(evt)
@@ -9212,7 +9211,7 @@
 eric6.Utilities.fromNativeSeparators?4(path)
 eric6.Utilities.generateDistroInfo?4(linesep='\n')
 eric6.Utilities.generatePluginsVersionInfo?4(linesep='\n')
-eric6.Utilities.generatePyQtToolPath?4(toolname)
+eric6.Utilities.generatePyQtToolPath?4(toolname, alternatives=None)
 eric6.Utilities.generatePySideToolPath?4(toolname)
 eric6.Utilities.generateQtToolName?4(toolname)
 eric6.Utilities.generateVersionInfo?4(linesep='\n')
@@ -10740,6 +10739,16 @@
 eric6.WebBrowser.SpeedDial.SpeedDialReader.SpeedDialReader?1()
 eric6.WebBrowser.SpeedDial.SpeedDialWriter.SpeedDialWriter.write?4(fileNameOrDevice, pages, pagesPerRow, speedDialSize)
 eric6.WebBrowser.SpeedDial.SpeedDialWriter.SpeedDialWriter?1()
+eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.ManageDictionariesDialog.DocumentationDirRole?7
+eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.ManageDictionariesDialog.FilenameRole?7
+eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.ManageDictionariesDialog.LocalesRole?7
+eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.ManageDictionariesDialog.UrlRole?7
+eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.ManageDictionariesDialog.addEntry?4(short, filename, url, documentationDir, locales)
+eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.ManageDictionariesDialog.on_buttonBox_clicked?4(button)
+eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.ManageDictionariesDialog.on_dictionariesList_itemSelectionChanged?4()
+eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.ManageDictionariesDialog.on_dictionariesUrlEditButton_toggled?4(checked)
+eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.ManageDictionariesDialog.on_locationComboBox_currentTextChanged?4(txt)
+eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.ManageDictionariesDialog?1(writeableDirectories, parent=None)
 eric6.WebBrowser.StatusBar.ImagesIcon.ImagesIcon.preferencesChanged?4()
 eric6.WebBrowser.StatusBar.ImagesIcon.ImagesIcon?1(window)
 eric6.WebBrowser.StatusBar.JavaScriptIcon.JavaScriptIcon.preferencesChanged?4()
--- a/APIs/Python3/eric6.bas	Fri Sep 01 12:08:49 2017 +0200
+++ b/APIs/Python3/eric6.bas	Tue Oct 03 15:33:11 2017 +0200
@@ -513,6 +513,7 @@
 LogViewer QWidget
 LogViewerEdit QTextEdit
 LogViewerPage ConfigurationPageBase Ui_LogViewerPage
+ManageDictionariesDialog QDialog Ui_ManageDictionariesDialog
 MarkdownProvider MarkupBase
 MasterPasswordEntryDialog QDialog Ui_MasterPasswordEntryDialog
 MercurialPage ConfigurationPageBase Ui_MercurialPage
@@ -725,6 +726,7 @@
 SpeedDial QObject
 SpeedDialReader QXmlStreamReader
 SpeedDialWriter QXmlStreamWriter
+SpellCheckDictionariesReader XMLStreamReaderBase
 SpellChecker QObject
 SpellCheckingDialog QDialog Ui_SpellCheckingDialog
 SpellingDictionaryEditDialog QDialog Ui_SpellingDictionaryEditDialog
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Fri Sep 01 12:08:49 2017 +0200
+++ b/Documentation/Help/source.qhp	Tue Oct 03 15:33:11 2017 +0200
@@ -159,6 +159,7 @@
             <section title="eric6.E5XML.SessionWriter" ref="eric6.E5XML.SessionWriter.html" />
             <section title="eric6.E5XML.ShortcutsReader" ref="eric6.E5XML.ShortcutsReader.html" />
             <section title="eric6.E5XML.ShortcutsWriter" ref="eric6.E5XML.ShortcutsWriter.html" />
+            <section title="eric6.E5XML.SpellCheckDictionariesReader" ref="eric6.E5XML.SpellCheckDictionariesReader.html" />
             <section title="eric6.E5XML.TasksReader" ref="eric6.E5XML.TasksReader.html" />
             <section title="eric6.E5XML.TasksWriter" ref="eric6.E5XML.TasksWriter.html" />
             <section title="eric6.E5XML.TemplatesReader" ref="eric6.E5XML.TemplatesReader.html" />
@@ -1248,6 +1249,9 @@
               <section title="eric6.WebBrowser.SpeedDial.SpeedDialReader" ref="eric6.WebBrowser.SpeedDial.SpeedDialReader.html" />
               <section title="eric6.WebBrowser.SpeedDial.SpeedDialWriter" ref="eric6.WebBrowser.SpeedDial.SpeedDialWriter.html" />
             </section>
+            <section title="eric6.WebBrowser.SpellCheck" ref="index-eric6.WebBrowser.SpellCheck.html">
+              <section title="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html" />
+            </section>
             <section title="eric6.WebBrowser.StatusBar" ref="index-eric6.WebBrowser.StatusBar.html">
               <section title="eric6.WebBrowser.StatusBar.ImagesIcon" ref="eric6.WebBrowser.StatusBar.ImagesIcon.html" />
               <section title="eric6.WebBrowser.StatusBar.JavaScriptIcon" ref="eric6.WebBrowser.StatusBar.JavaScriptIcon.html" />
@@ -5026,12 +5030,10 @@
       <keyword name="Editor.addedToProject" id="Editor.addedToProject" ref="eric6.QScintilla.Editor.html#Editor.addedToProject" />
       <keyword name="Editor.autoComplete" id="Editor.autoComplete" ref="eric6.QScintilla.Editor.html#Editor.autoComplete" />
       <keyword name="Editor.autoCompleteQScintilla" id="Editor.autoCompleteQScintilla" ref="eric6.QScintilla.Editor.html#Editor.autoCompleteQScintilla" />
-      <keyword name="Editor.autoCompletionHook" id="Editor.autoCompletionHook" ref="eric6.QScintilla.Editor.html#Editor.autoCompletionHook" />
       <keyword name="Editor.boxCommentLine" id="Editor.boxCommentLine" ref="eric6.QScintilla.Editor.html#Editor.boxCommentLine" />
       <keyword name="Editor.boxCommentLineOrSelection" id="Editor.boxCommentLineOrSelection" ref="eric6.QScintilla.Editor.html#Editor.boxCommentLineOrSelection" />
       <keyword name="Editor.boxCommentSelection" id="Editor.boxCommentSelection" ref="eric6.QScintilla.Editor.html#Editor.boxCommentSelection" />
       <keyword name="Editor.callTip" id="Editor.callTip" ref="eric6.QScintilla.Editor.html#Editor.callTip" />
-      <keyword name="Editor.callTipHook" id="Editor.callTipHook" ref="eric6.QScintilla.Editor.html#Editor.callTipHook" />
       <keyword name="Editor.canAutoCompleteFromAPIs" id="Editor.canAutoCompleteFromAPIs" ref="eric6.QScintilla.Editor.html#Editor.canAutoCompleteFromAPIs" />
       <keyword name="Editor.canProvideCallTipps" id="Editor.canProvideCallTipps" ref="eric6.QScintilla.Editor.html#Editor.canProvideCallTipps" />
       <keyword name="Editor.canProvideDynamicAutoCompletion" id="Editor.canProvideDynamicAutoCompletion" ref="eric6.QScintilla.Editor.html#Editor.canProvideDynamicAutoCompletion" />
@@ -5182,9 +5184,7 @@
       <keyword name="Editor.selectWord" id="Editor.selectWord" ref="eric6.QScintilla.Editor.html#Editor.selectWord" />
       <keyword name="Editor.sendSharedEdit" id="Editor.sendSharedEdit" ref="eric6.QScintilla.Editor.html#Editor.sendSharedEdit" />
       <keyword name="Editor.setAutoCompletionEnabled" id="Editor.setAutoCompletionEnabled" ref="eric6.QScintilla.Editor.html#Editor.setAutoCompletionEnabled" />
-      <keyword name="Editor.setAutoCompletionHook" id="Editor.setAutoCompletionHook" ref="eric6.QScintilla.Editor.html#Editor.setAutoCompletionHook" />
       <keyword name="Editor.setAutoSpellChecking" id="Editor.setAutoSpellChecking" ref="eric6.QScintilla.Editor.html#Editor.setAutoSpellChecking" />
-      <keyword name="Editor.setCallTipHook" id="Editor.setCallTipHook" ref="eric6.QScintilla.Editor.html#Editor.setCallTipHook" />
       <keyword name="Editor.setLanguage" id="Editor.setLanguage" ref="eric6.QScintilla.Editor.html#Editor.setLanguage" />
       <keyword name="Editor.setMonospaced" id="Editor.setMonospaced" ref="eric6.QScintilla.Editor.html#Editor.setMonospaced" />
       <keyword name="Editor.setMouseClickHandler" id="Editor.setMouseClickHandler" ref="eric6.QScintilla.Editor.html#Editor.setMouseClickHandler" />
@@ -5210,8 +5210,6 @@
       <keyword name="Editor.uncommentSelection" id="Editor.uncommentSelection" ref="eric6.QScintilla.Editor.html#Editor.uncommentSelection" />
       <keyword name="Editor.undo" id="Editor.undo" ref="eric6.QScintilla.Editor.html#Editor.undo" />
       <keyword name="Editor.unindentLineOrSelection" id="Editor.unindentLineOrSelection" ref="eric6.QScintilla.Editor.html#Editor.unindentLineOrSelection" />
-      <keyword name="Editor.unsetAutoCompletionHook" id="Editor.unsetAutoCompletionHook" ref="eric6.QScintilla.Editor.html#Editor.unsetAutoCompletionHook" />
-      <keyword name="Editor.unsetCallTipHook" id="Editor.unsetCallTipHook" ref="eric6.QScintilla.Editor.html#Editor.unsetCallTipHook" />
       <keyword name="Editor.updateMarkerMap" id="Editor.updateMarkerMap" ref="eric6.QScintilla.Editor.html#Editor.updateMarkerMap" />
       <keyword name="Editor.viewportEvent" id="Editor.viewportEvent" ref="eric6.QScintilla.Editor.html#Editor.viewportEvent" />
       <keyword name="Editor.wheelEvent" id="Editor.wheelEvent" ref="eric6.QScintilla.Editor.html#Editor.wheelEvent" />
@@ -9614,6 +9612,26 @@
       <keyword name="LoginForm (Module)" id="LoginForm (Module)" ref="eric6.WebBrowser.Passwords.LoginForm.html" />
       <keyword name="LoginForm.isValid" id="LoginForm.isValid" ref="eric6.Helpviewer.Passwords.LoginForm.html#LoginForm.isValid" />
       <keyword name="LoginForm.isValid" id="LoginForm.isValid" ref="eric6.WebBrowser.Passwords.LoginForm.html#LoginForm.isValid" />
+      <keyword name="ManageDictionariesDialog" id="ManageDictionariesDialog" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog" />
+      <keyword name="ManageDictionariesDialog (Constructor)" id="ManageDictionariesDialog (Constructor)" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.__init__" />
+      <keyword name="ManageDictionariesDialog (Module)" id="ManageDictionariesDialog (Module)" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html" />
+      <keyword name="ManageDictionariesDialog.__checkInstalledDictionaries" id="ManageDictionariesDialog.__checkInstalledDictionaries" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.__checkInstalledDictionaries" />
+      <keyword name="ManageDictionariesDialog.__downloadCancel" id="ManageDictionariesDialog.__downloadCancel" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.__downloadCancel" />
+      <keyword name="ManageDictionariesDialog.__downloadDictionary" id="ManageDictionariesDialog.__downloadDictionary" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.__downloadDictionary" />
+      <keyword name="ManageDictionariesDialog.__downloadProgress" id="ManageDictionariesDialog.__downloadProgress" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.__downloadProgress" />
+      <keyword name="ManageDictionariesDialog.__installDictionary" id="ManageDictionariesDialog.__installDictionary" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.__installDictionary" />
+      <keyword name="ManageDictionariesDialog.__installSelected" id="ManageDictionariesDialog.__installSelected" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.__installSelected" />
+      <keyword name="ManageDictionariesDialog.__installationFinished" id="ManageDictionariesDialog.__installationFinished" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.__installationFinished" />
+      <keyword name="ManageDictionariesDialog.__isOnline" id="ManageDictionariesDialog.__isOnline" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.__isOnline" />
+      <keyword name="ManageDictionariesDialog.__listFileDownloaded" id="ManageDictionariesDialog.__listFileDownloaded" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.__listFileDownloaded" />
+      <keyword name="ManageDictionariesDialog.__onlineStateChanged" id="ManageDictionariesDialog.__onlineStateChanged" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.__onlineStateChanged" />
+      <keyword name="ManageDictionariesDialog.__populateList" id="ManageDictionariesDialog.__populateList" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.__populateList" />
+      <keyword name="ManageDictionariesDialog.__uninstallSelected" id="ManageDictionariesDialog.__uninstallSelected" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.__uninstallSelected" />
+      <keyword name="ManageDictionariesDialog.addEntry" id="ManageDictionariesDialog.addEntry" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.addEntry" />
+      <keyword name="ManageDictionariesDialog.on_buttonBox_clicked" id="ManageDictionariesDialog.on_buttonBox_clicked" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.on_buttonBox_clicked" />
+      <keyword name="ManageDictionariesDialog.on_dictionariesList_itemSelectionChanged" id="ManageDictionariesDialog.on_dictionariesList_itemSelectionChanged" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.on_dictionariesList_itemSelectionChanged" />
+      <keyword name="ManageDictionariesDialog.on_dictionariesUrlEditButton_toggled" id="ManageDictionariesDialog.on_dictionariesUrlEditButton_toggled" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.on_dictionariesUrlEditButton_toggled" />
+      <keyword name="ManageDictionariesDialog.on_locationComboBox_currentTextChanged" id="ManageDictionariesDialog.on_locationComboBox_currentTextChanged" ref="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html#ManageDictionariesDialog.on_locationComboBox_currentTextChanged" />
       <keyword name="MarkdownProvider" id="MarkdownProvider" ref="eric6.QScintilla.MarkupProviders.MarkdownProvider.html#MarkdownProvider" />
       <keyword name="MarkdownProvider (Constructor)" id="MarkdownProvider (Constructor)" ref="eric6.QScintilla.MarkupProviders.MarkdownProvider.html#MarkdownProvider.__init__" />
       <keyword name="MarkdownProvider (Module)" id="MarkdownProvider (Module)" ref="eric6.QScintilla.MarkupProviders.MarkdownProvider.html" />
@@ -13009,6 +13027,12 @@
       <keyword name="SpeedDialWriter.__write" id="SpeedDialWriter.__write" ref="eric6.WebBrowser.SpeedDial.SpeedDialWriter.html#SpeedDialWriter.__write" />
       <keyword name="SpeedDialWriter.write" id="SpeedDialWriter.write" ref="eric6.Helpviewer.SpeedDial.SpeedDialWriter.html#SpeedDialWriter.write" />
       <keyword name="SpeedDialWriter.write" id="SpeedDialWriter.write" ref="eric6.WebBrowser.SpeedDial.SpeedDialWriter.html#SpeedDialWriter.write" />
+      <keyword name="SpellCheck (Package)" id="SpellCheck (Package)" ref="index-eric6.WebBrowser.SpellCheck.html" />
+      <keyword name="SpellCheckDictionariesReader" id="SpellCheckDictionariesReader" ref="eric6.E5XML.SpellCheckDictionariesReader.html#SpellCheckDictionariesReader" />
+      <keyword name="SpellCheckDictionariesReader (Constructor)" id="SpellCheckDictionariesReader (Constructor)" ref="eric6.E5XML.SpellCheckDictionariesReader.html#SpellCheckDictionariesReader.__init__" />
+      <keyword name="SpellCheckDictionariesReader (Module)" id="SpellCheckDictionariesReader (Module)" ref="eric6.E5XML.SpellCheckDictionariesReader.html" />
+      <keyword name="SpellCheckDictionariesReader.__readDictionary" id="SpellCheckDictionariesReader.__readDictionary" ref="eric6.E5XML.SpellCheckDictionariesReader.html#SpellCheckDictionariesReader.__readDictionary" />
+      <keyword name="SpellCheckDictionariesReader.readXML" id="SpellCheckDictionariesReader.readXML" ref="eric6.E5XML.SpellCheckDictionariesReader.html#SpellCheckDictionariesReader.readXML" />
       <keyword name="SpellChecker" id="SpellChecker" ref="eric6.QScintilla.SpellChecker.html#SpellChecker" />
       <keyword name="SpellChecker (Constructor)" id="SpellChecker (Constructor)" ref="eric6.QScintilla.SpellChecker.html#SpellChecker.__init__" />
       <keyword name="SpellChecker (Module)" id="SpellChecker (Module)" ref="eric6.QScintilla.SpellChecker.html" />
@@ -15960,6 +15984,8 @@
       <keyword name="WebBrowserSpellCheckingPage (Constructor)" id="WebBrowserSpellCheckingPage (Constructor)" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#WebBrowserSpellCheckingPage.__init__" />
       <keyword name="WebBrowserSpellCheckingPage (Module)" id="WebBrowserSpellCheckingPage (Module)" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html" />
       <keyword name="WebBrowserSpellCheckingPage.__createLanguageString" id="WebBrowserSpellCheckingPage.__createLanguageString" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#WebBrowserSpellCheckingPage.__createLanguageString" />
+      <keyword name="WebBrowserSpellCheckingPage.__populateDictionariesList" id="WebBrowserSpellCheckingPage.__populateDictionariesList" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#WebBrowserSpellCheckingPage.__populateDictionariesList" />
+      <keyword name="WebBrowserSpellCheckingPage.on_manageDictionariesButton_clicked" id="WebBrowserSpellCheckingPage.on_manageDictionariesButton_clicked" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#WebBrowserSpellCheckingPage.on_manageDictionariesButton_clicked" />
       <keyword name="WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked" id="WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked" />
       <keyword name="WebBrowserSpellCheckingPage.save" id="WebBrowserSpellCheckingPage.save" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#WebBrowserSpellCheckingPage.save" />
       <keyword name="WebBrowserTabBar" id="WebBrowserTabBar" ref="eric6.WebBrowser.WebBrowserTabBar.html#WebBrowserTabBar" />
@@ -17556,6 +17582,7 @@
       <file>eric6.E5XML.SessionWriter.html</file>
       <file>eric6.E5XML.ShortcutsReader.html</file>
       <file>eric6.E5XML.ShortcutsWriter.html</file>
+      <file>eric6.E5XML.SpellCheckDictionariesReader.html</file>
       <file>eric6.E5XML.TasksReader.html</file>
       <file>eric6.E5XML.TasksWriter.html</file>
       <file>eric6.E5XML.TemplatesReader.html</file>
@@ -18402,6 +18429,7 @@
       <file>eric6.WebBrowser.SpeedDial.SpeedDial.html</file>
       <file>eric6.WebBrowser.SpeedDial.SpeedDialReader.html</file>
       <file>eric6.WebBrowser.SpeedDial.SpeedDialWriter.html</file>
+      <file>eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html</file>
       <file>eric6.WebBrowser.StatusBar.ImagesIcon.html</file>
       <file>eric6.WebBrowser.StatusBar.JavaScriptIcon.html</file>
       <file>eric6.WebBrowser.StatusBar.JavaScriptSettingsDialog.html</file>
@@ -18623,6 +18651,7 @@
       <file>index-eric6.WebBrowser.Session.html</file>
       <file>index-eric6.WebBrowser.SiteInfo.html</file>
       <file>index-eric6.WebBrowser.SpeedDial.html</file>
+      <file>index-eric6.WebBrowser.SpellCheck.html</file>
       <file>index-eric6.WebBrowser.StatusBar.html</file>
       <file>index-eric6.WebBrowser.Sync.html</file>
       <file>index-eric6.WebBrowser.TabManager.html</file>
--- a/Documentation/Source/eric6.E5XML.Config.html	Fri Sep 01 12:08:49 2017 +0200
+++ b/Documentation/Source/eric6.E5XML.Config.html	Tue Oct 03 15:33:11 2017 +0200
@@ -25,7 +25,7 @@
 </p>
 <h3>Global Attributes</h3>
 <table>
-<tr><td>debuggerPropertiesFileFormatVersion</td></tr><tr><td>highlightingStylesFileFormatVersion</td></tr><tr><td>multiProjectFileFormatVersion</td></tr><tr><td>pluginRepositoryFileFormatVersion</td></tr><tr><td>projectFileFormatVersion</td></tr><tr><td>sessionFileFormatVersion</td></tr><tr><td>shortcutsFileFormatVersion</td></tr><tr><td>tasksFileFormatVersion</td></tr><tr><td>templatesFileFormatVersion</td></tr><tr><td>userProjectFileFormatVersion</td></tr>
+<tr><td>debuggerPropertiesFileFormatVersion</td></tr><tr><td>dictionariesListFileFormatVersion</td></tr><tr><td>highlightingStylesFileFormatVersion</td></tr><tr><td>multiProjectFileFormatVersion</td></tr><tr><td>pluginRepositoryFileFormatVersion</td></tr><tr><td>projectFileFormatVersion</td></tr><tr><td>sessionFileFormatVersion</td></tr><tr><td>shortcutsFileFormatVersion</td></tr><tr><td>tasksFileFormatVersion</td></tr><tr><td>templatesFileFormatVersion</td></tr><tr><td>userProjectFileFormatVersion</td></tr>
 </table>
 <h3>Classes</h3>
 <table>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.E5XML.SpellCheckDictionariesReader.html	Tue Oct 03 15:33:11 2017 +0200
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.E5XML.SpellCheckDictionariesReader</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.E5XML.SpellCheckDictionariesReader</h1>
+<p>
+Module to read the web browser spell check dictionaries list file.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#SpellCheckDictionariesReader">SpellCheckDictionariesReader</a></td>
+<td>Class to read the web browser spell check dictionaries list file.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="SpellCheckDictionariesReader" ID="SpellCheckDictionariesReader"></a>
+<h2>SpellCheckDictionariesReader</h2>
+<p>
+    Class to read the web browser spell check dictionaries list file.
+</p>
+<h3>Derived from</h3>
+XMLStreamReaderBase
+<h3>Class Attributes</h3>
+<table>
+<tr><td>supportedVersions</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#SpellCheckDictionariesReader.__init__">SpellCheckDictionariesReader</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#SpellCheckDictionariesReader.__readDictionary">__readDictionary</a></td>
+<td>Private method to read the plug-in info.</td>
+</tr><tr>
+<td><a href="#SpellCheckDictionariesReader.readXML">readXML</a></td>
+<td>Public method to read and parse the XML document.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="SpellCheckDictionariesReader.__init__" ID="SpellCheckDictionariesReader.__init__"></a>
+<h4>SpellCheckDictionariesReader (Constructor)</h4>
+<b>SpellCheckDictionariesReader</b>(<i>data, entryCallback</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>data</i></dt>
+<dd>
+reference to the data array to read XML from (QByteArray)
+</dd><dt><i>entryCallback</i></dt>
+<dd>
+reference to a function to be called once the
+            data for a dictionary has been read (function)
+</dd>
+</dl><a NAME="SpellCheckDictionariesReader.__readDictionary" ID="SpellCheckDictionariesReader.__readDictionary"></a>
+<h4>SpellCheckDictionariesReader.__readDictionary</h4>
+<b>__readDictionary</b>(<i></i>)
+<p>
+        Private method to read the plug-in info.
+</p><a NAME="SpellCheckDictionariesReader.readXML" ID="SpellCheckDictionariesReader.readXML"></a>
+<h4>SpellCheckDictionariesReader.readXML</h4>
+<b>readXML</b>(<i></i>)
+<p>
+        Public method to read and parse the XML document.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/eric6.PluginManager.PluginRepositoryDialog.html	Fri Sep 01 12:08:49 2017 +0200
+++ b/Documentation/Source/eric6.PluginManager.PluginRepositoryDialog.html	Tue Oct 03 15:33:11 2017 +0200
@@ -149,7 +149,7 @@
 <td>Private slot to download the given file.</td>
 </tr><tr>
 <td><a href="#PluginRepositoryWidget.__downloadFileDone">__downloadFileDone</a></td>
-<td>Private method called, after the file has been downloaded from the internet.</td>
+<td>Private method called, after the file has been downloaded from the Internet.</td>
 </tr><tr>
 <td><a href="#PluginRepositoryWidget.__downloadPlugin">__downloadPlugin</a></td>
 <td>Private method to download the next plugin.</td>
@@ -209,7 +209,7 @@
 <td>Private slot to download a new list and display the contents.</td>
 </tr><tr>
 <td><a href="#PluginRepositoryWidget.__updateStatus">__updateStatus</a></td>
-<td>Private method to check, if the given archive update status.</td>
+<td>Private method to check the given archive update status.</td>
 </tr><tr>
 <td><a href="#PluginRepositoryWidget.addEntry">addEntry</a></td>
 <td>Public method to add an entry to the list.</td>
@@ -287,7 +287,7 @@
 <b>__downloadFileDone</b>(<i></i>)
 <p>
         Private method called, after the file has been downloaded
-        from the internet.
+        from the Internet.
 </p><a NAME="PluginRepositoryWidget.__downloadPlugin" ID="PluginRepositoryWidget.__downloadPlugin"></a>
 <h4>PluginRepositoryWidget.__downloadPlugin</h4>
 <b>__downloadPlugin</b>(<i></i>)
@@ -460,7 +460,7 @@
 <h4>PluginRepositoryWidget.__updateStatus</h4>
 <b>__updateStatus</b>(<i>filename, version</i>)
 <p>
-        Private method to check, if the given archive update status.
+        Private method to check the given archive update status.
 </p><dl>
 <dt><i>filename</i></dt>
 <dd>
--- a/Documentation/Source/eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html	Fri Sep 01 12:08:49 2017 +0200
+++ b/Documentation/Source/eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html	Tue Oct 03 15:33:11 2017 +0200
@@ -66,6 +66,12 @@
 <td><a href="#WebBrowserSpellCheckingPage.__createLanguageString">__createLanguageString</a></td>
 <td>Private method to create a language string given a language identifier.</td>
 </tr><tr>
+<td><a href="#WebBrowserSpellCheckingPage.__populateDictionariesList">__populateDictionariesList</a></td>
+<td>Private method to populate the spell checking dictionaries list.</td>
+</tr><tr>
+<td><a href="#WebBrowserSpellCheckingPage.on_manageDictionariesButton_clicked">on_manageDictionariesButton_clicked</a></td>
+<td>Private slot to manage spell checking dictionaries.</td>
+</tr><tr>
 <td><a href="#WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked">on_spellCheckEnabledCheckBox_clicked</a></td>
 <td>Private slot handling a change of the spell checking enabled state.</td>
 </tr><tr>
@@ -102,7 +108,17 @@
 <dd>
 str
 </dd>
-</dl><a NAME="WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked" ID="WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked"></a>
+</dl><a NAME="WebBrowserSpellCheckingPage.__populateDictionariesList" ID="WebBrowserSpellCheckingPage.__populateDictionariesList"></a>
+<h4>WebBrowserSpellCheckingPage.__populateDictionariesList</h4>
+<b>__populateDictionariesList</b>(<i></i>)
+<p>
+        Private method to populate the spell checking dictionaries list.
+</p><a NAME="WebBrowserSpellCheckingPage.on_manageDictionariesButton_clicked" ID="WebBrowserSpellCheckingPage.on_manageDictionariesButton_clicked"></a>
+<h4>WebBrowserSpellCheckingPage.on_manageDictionariesButton_clicked</h4>
+<b>on_manageDictionariesButton_clicked</b>(<i></i>)
+<p>
+        Private slot to manage spell checking dictionaries.
+</p><a NAME="WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked" ID="WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked"></a>
 <h4>WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked</h4>
 <b>on_spellCheckEnabledCheckBox_clicked</b>(<i></i>)
 <p>
--- a/Documentation/Source/eric6.QScintilla.Editor.html	Fri Sep 01 12:08:49 2017 +0200
+++ b/Documentation/Source/eric6.QScintilla.Editor.html	Tue Oct 03 15:33:11 2017 +0200
@@ -633,9 +633,6 @@
 <td><a href="#Editor.autoCompleteQScintilla">autoCompleteQScintilla</a></td>
 <td>Public method to perform an autocompletion using QScintilla methods.</td>
 </tr><tr>
-<td><a href="#Editor.autoCompletionHook">autoCompletionHook</a></td>
-<td>Public method to get the autocompletion hook function.</td>
-</tr><tr>
 <td><a href="#Editor.boxCommentLine">boxCommentLine</a></td>
 <td>Public slot to box comment the current line.</td>
 </tr><tr>
@@ -648,9 +645,6 @@
 <td><a href="#Editor.callTip">callTip</a></td>
 <td>Public method to show calltips.</td>
 </tr><tr>
-<td><a href="#Editor.callTipHook">callTipHook</a></td>
-<td>Public method to get the calltip hook function.</td>
-</tr><tr>
 <td><a href="#Editor.canAutoCompleteFromAPIs">canAutoCompleteFromAPIs</a></td>
 <td>Public method to check for API availablity.</td>
 </tr><tr>
@@ -1101,15 +1095,9 @@
 <td><a href="#Editor.setAutoCompletionEnabled">setAutoCompletionEnabled</a></td>
 <td>Public method to enable/disable autocompletion.</td>
 </tr><tr>
-<td><a href="#Editor.setAutoCompletionHook">setAutoCompletionHook</a></td>
-<td>Public method to set an autocompletion hook.</td>
-</tr><tr>
 <td><a href="#Editor.setAutoSpellChecking">setAutoSpellChecking</a></td>
 <td>Public method to set the automatic spell checking.</td>
 </tr><tr>
-<td><a href="#Editor.setCallTipHook">setCallTipHook</a></td>
-<td>Public method to set a calltip hook.</td>
-</tr><tr>
 <td><a href="#Editor.setLanguage">setLanguage</a></td>
 <td>Public method to set a lexer language.</td>
 </tr><tr>
@@ -1185,12 +1173,6 @@
 <td><a href="#Editor.unindentLineOrSelection">unindentLineOrSelection</a></td>
 <td>Public slot to unindent the current line or current selection.</td>
 </tr><tr>
-<td><a href="#Editor.unsetAutoCompletionHook">unsetAutoCompletionHook</a></td>
-<td>Public method to unset a previously installed autocompletion hook.</td>
-</tr><tr>
-<td><a href="#Editor.unsetCallTipHook">unsetCallTipHook</a></td>
-<td>Public method to unset a calltip hook.</td>
-</tr><tr>
 <td><a href="#Editor.updateMarkerMap">updateMarkerMap</a></td>
 <td>Public method to initiate an update of the marker map.</td>
 </tr><tr>
@@ -2657,17 +2639,7 @@
 <b>autoCompleteQScintilla</b>(<i></i>)
 <p>
         Public method to perform an autocompletion using QScintilla methods.
-</p><a NAME="Editor.autoCompletionHook" ID="Editor.autoCompletionHook"></a>
-<h4>Editor.autoCompletionHook</h4>
-<b>autoCompletionHook</b>(<i></i>)
-<p>
-        Public method to get the autocompletion hook function.
-</p><dl>
-<dt>Returns:</dt>
-<dd>
-function set by setAutoCompletionHook()
-</dd>
-</dl><a NAME="Editor.boxCommentLine" ID="Editor.boxCommentLine"></a>
+</p><a NAME="Editor.boxCommentLine" ID="Editor.boxCommentLine"></a>
 <h4>Editor.boxCommentLine</h4>
 <b>boxCommentLine</b>(<i></i>)
 <p>
@@ -2687,17 +2659,7 @@
 <b>callTip</b>(<i></i>)
 <p>
         Public method to show calltips.
-</p><a NAME="Editor.callTipHook" ID="Editor.callTipHook"></a>
-<h4>Editor.callTipHook</h4>
-<b>callTipHook</b>(<i></i>)
-<p>
-        Public method to get the calltip hook function.
-</p><dl>
-<dt>Returns:</dt>
-<dd>
-function set by setCallTipHook()
-</dd>
-</dl><a NAME="Editor.canAutoCompleteFromAPIs" ID="Editor.canAutoCompleteFromAPIs"></a>
+</p><a NAME="Editor.canAutoCompleteFromAPIs" ID="Editor.canAutoCompleteFromAPIs"></a>
 <h4>Editor.canAutoCompleteFromAPIs</h4>
 <b>canAutoCompleteFromAPIs</b>(<i></i>)
 <p>
@@ -4151,38 +4113,12 @@
 flag indicating the desired autocompletion status
             (boolean)
 </dd>
-</dl><a NAME="Editor.setAutoCompletionHook" ID="Editor.setAutoCompletionHook"></a>
-<h4>Editor.setAutoCompletionHook</h4>
-<b>setAutoCompletionHook</b>(<i>func</i>)
-<p>
-        Public method to set an autocompletion hook.
-</p><dl>
-<dt><i>func</i></dt>
-<dd>
-Function to be set to handle autocompletion. func
-            should be a function taking a reference to the editor and
-            a boolean indicating to complete a context.
-</dd>
 </dl><a NAME="Editor.setAutoSpellChecking" ID="Editor.setAutoSpellChecking"></a>
 <h4>Editor.setAutoSpellChecking</h4>
 <b>setAutoSpellChecking</b>(<i></i>)
 <p>
         Public method to set the automatic spell checking.
-</p><a NAME="Editor.setCallTipHook" ID="Editor.setCallTipHook"></a>
-<h4>Editor.setCallTipHook</h4>
-<b>setCallTipHook</b>(<i>func</i>)
-<p>
-        Public method to set a calltip hook.
-</p><dl>
-<dt><i>func</i></dt>
-<dd>
-Function to be set to determine calltips. func
-            should be a function taking a reference to the editor,
-            a position into the text and the amount of commas to the
-            left of the cursor. It should return the possible
-            calltips as a list of strings.
-</dd>
-</dl><a NAME="Editor.setLanguage" ID="Editor.setLanguage"></a>
+</p><a NAME="Editor.setLanguage" ID="Editor.setLanguage"></a>
 <h4>Editor.setLanguage</h4>
 <b>setLanguage</b>(<i>filename, initTextDisplay=True, propagate=True, pyname=""</i>)
 <p>
@@ -4430,16 +4366,6 @@
 <b>unindentLineOrSelection</b>(<i></i>)
 <p>
         Public slot to unindent the current line or current selection.
-</p><a NAME="Editor.unsetAutoCompletionHook" ID="Editor.unsetAutoCompletionHook"></a>
-<h4>Editor.unsetAutoCompletionHook</h4>
-<b>unsetAutoCompletionHook</b>(<i></i>)
-<p>
-        Public method to unset a previously installed autocompletion hook.
-</p><a NAME="Editor.unsetCallTipHook" ID="Editor.unsetCallTipHook"></a>
-<h4>Editor.unsetCallTipHook</h4>
-<b>unsetCallTipHook</b>(<i></i>)
-<p>
-        Public method to unset a calltip hook.
 </p><a NAME="Editor.updateMarkerMap" ID="Editor.updateMarkerMap"></a>
 <h4>Editor.updateMarkerMap</h4>
 <b>updateMarkerMap</b>(<i></i>)
--- a/Documentation/Source/eric6.Utilities.__init__.html	Fri Sep 01 12:08:49 2017 +0200
+++ b/Documentation/Source/eric6.Utilities.__init__.html	Tue Oct 03 15:33:11 2017 +0200
@@ -824,13 +824,16 @@
 <hr /><hr />
 <a NAME="generatePyQtToolPath" ID="generatePyQtToolPath"></a>
 <h2>generatePyQtToolPath</h2>
-<b>generatePyQtToolPath</b>(<i>toolname</i>)
+<b>generatePyQtToolPath</b>(<i>toolname, alternatives=None</i>)
 <p>
     Module function to generate the executable path for a PyQt tool.
 </p><dl>
 <dt><i>toolname</i> (str)</dt>
 <dd>
 base name of the tool
+</dd><dt><i>alternatives</i> (list of str)</dt>
+<dd>
+list of alternative tool names to try
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html	Tue Oct 03 15:33:11 2017 +0200
@@ -0,0 +1,283 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.WebBrowser.SpellCheck.ManageDictionariesDialog</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.WebBrowser.SpellCheck.ManageDictionariesDialog</h1>
+<p>
+Module implementing a dialog to install spell checking dictionaries.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#ManageDictionariesDialog">ManageDictionariesDialog</a></td>
+<td>Class implementing a dialog to install spell checking dictionaries.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="ManageDictionariesDialog" ID="ManageDictionariesDialog"></a>
+<h2>ManageDictionariesDialog</h2>
+<p>
+    Class implementing a dialog to install spell checking dictionaries.
+</p>
+<h3>Derived from</h3>
+QDialog, Ui_ManageDictionariesDialog
+<h3>Class Attributes</h3>
+<table>
+<tr><td>DocumentationDirRole</td></tr><tr><td>FilenameRole</td></tr><tr><td>LocalesRole</td></tr><tr><td>UrlRole</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#ManageDictionariesDialog.__init__">ManageDictionariesDialog</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.__checkInstalledDictionaries">__checkInstalledDictionaries</a></td>
+<td>Private method to check all installed dictionaries.</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.__downloadCancel">__downloadCancel</a></td>
+<td>Private slot to cancel the current download.</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.__downloadDictionary">__downloadDictionary</a></td>
+<td>Private slot to download a dictionary.</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.__downloadProgress">__downloadProgress</a></td>
+<td>Private slot to show the download progress.</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.__installDictionary">__installDictionary</a></td>
+<td>Private slot to install the downloaded dictionary.</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.__installSelected">__installSelected</a></td>
+<td>Private method to install the selected dictionaries.</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.__installationFinished">__installationFinished</a></td>
+<td>Private method called after all selected dictionaries have been installed.</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.__isOnline">__isOnline</a></td>
+<td>Private method to check the online status.</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.__listFileDownloaded">__listFileDownloaded</a></td>
+<td>Private method called, after the dictionaries list file has been downloaded from the Internet.</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.__onlineStateChanged">__onlineStateChanged</a></td>
+<td>Private slot handling online state changes.</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.__populateList">__populateList</a></td>
+<td>Private method to populate the list of available plugins.</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.__uninstallSelected">__uninstallSelected</a></td>
+<td>Private method to uninstall the selected dictionaries.</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.addEntry">addEntry</a></td>
+<td>Public method to add an entry to the list.</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.on_buttonBox_clicked">on_buttonBox_clicked</a></td>
+<td>Private slot to handle the click of a button of the button box.</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.on_dictionariesList_itemSelectionChanged">on_dictionariesList_itemSelectionChanged</a></td>
+<td>Private slot to handle a change of the selection.</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.on_dictionariesUrlEditButton_toggled">on_dictionariesUrlEditButton_toggled</a></td>
+<td>Private slot to set the read only status of the dictionaries URL line edit.</td>
+</tr><tr>
+<td><a href="#ManageDictionariesDialog.on_locationComboBox_currentTextChanged">on_locationComboBox_currentTextChanged</a></td>
+<td>Private slot to handle a change of the installation location.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="ManageDictionariesDialog.__init__" ID="ManageDictionariesDialog.__init__"></a>
+<h4>ManageDictionariesDialog (Constructor)</h4>
+<b>ManageDictionariesDialog</b>(<i>writeableDirectories, parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>writeableDirectories</i> (list of str)</dt>
+<dd>
+list of writable directories
+</dd><dt><i>parent</i> (QWidget)</dt>
+<dd>
+reference to the parent widget
+</dd>
+</dl><a NAME="ManageDictionariesDialog.__checkInstalledDictionaries" ID="ManageDictionariesDialog.__checkInstalledDictionaries"></a>
+<h4>ManageDictionariesDialog.__checkInstalledDictionaries</h4>
+<b>__checkInstalledDictionaries</b>(<i></i>)
+<p>
+        Private method to check all installed dictionaries.
+</p><p>
+        Note: A dictionary is assumed to be installed, if at least one of its
+        binary dictionaries (*.bdic) is found in the selected dictionaries
+        location.
+</p><a NAME="ManageDictionariesDialog.__downloadCancel" ID="ManageDictionariesDialog.__downloadCancel"></a>
+<h4>ManageDictionariesDialog.__downloadCancel</h4>
+<b>__downloadCancel</b>(<i></i>)
+<p>
+        Private slot to cancel the current download.
+</p><a NAME="ManageDictionariesDialog.__downloadDictionary" ID="ManageDictionariesDialog.__downloadDictionary"></a>
+<h4>ManageDictionariesDialog.__downloadDictionary</h4>
+<b>__downloadDictionary</b>(<i></i>)
+<p>
+        Private slot to download a dictionary.
+</p><a NAME="ManageDictionariesDialog.__downloadProgress" ID="ManageDictionariesDialog.__downloadProgress"></a>
+<h4>ManageDictionariesDialog.__downloadProgress</h4>
+<b>__downloadProgress</b>(<i>done, total</i>)
+<p>
+        Private slot to show the download progress.
+</p><dl>
+<dt><i>done</i> (int)</dt>
+<dd>
+number of bytes downloaded so far
+</dd><dt><i>total</i> (int)</dt>
+<dd>
+total bytes to be downloaded
+</dd>
+</dl><a NAME="ManageDictionariesDialog.__installDictionary" ID="ManageDictionariesDialog.__installDictionary"></a>
+<h4>ManageDictionariesDialog.__installDictionary</h4>
+<b>__installDictionary</b>(<i></i>)
+<p>
+        Private slot to install the downloaded dictionary.
+</p><a NAME="ManageDictionariesDialog.__installSelected" ID="ManageDictionariesDialog.__installSelected"></a>
+<h4>ManageDictionariesDialog.__installSelected</h4>
+<b>__installSelected</b>(<i></i>)
+<p>
+        Private method to install the selected dictionaries.
+</p><a NAME="ManageDictionariesDialog.__installationFinished" ID="ManageDictionariesDialog.__installationFinished"></a>
+<h4>ManageDictionariesDialog.__installationFinished</h4>
+<b>__installationFinished</b>(<i></i>)
+<p>
+        Private method called after all selected dictionaries have been
+        installed.
+</p><a NAME="ManageDictionariesDialog.__isOnline" ID="ManageDictionariesDialog.__isOnline"></a>
+<h4>ManageDictionariesDialog.__isOnline</h4>
+<b>__isOnline</b>(<i></i>)
+<p>
+        Private method to check the online status.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating the online status
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl><a NAME="ManageDictionariesDialog.__listFileDownloaded" ID="ManageDictionariesDialog.__listFileDownloaded"></a>
+<h4>ManageDictionariesDialog.__listFileDownloaded</h4>
+<b>__listFileDownloaded</b>(<i></i>)
+<p>
+        Private method called, after the dictionaries list file has been
+        downloaded from the Internet.
+</p><a NAME="ManageDictionariesDialog.__onlineStateChanged" ID="ManageDictionariesDialog.__onlineStateChanged"></a>
+<h4>ManageDictionariesDialog.__onlineStateChanged</h4>
+<b>__onlineStateChanged</b>(<i>online</i>)
+<p>
+        Private slot handling online state changes.
+</p><dl>
+<dt><i>online</i> (bool)</dt>
+<dd>
+flag indicating the online status
+</dd>
+</dl><a NAME="ManageDictionariesDialog.__populateList" ID="ManageDictionariesDialog.__populateList"></a>
+<h4>ManageDictionariesDialog.__populateList</h4>
+<b>__populateList</b>(<i></i>)
+<p>
+        Private method to populate the list of available plugins.
+</p><a NAME="ManageDictionariesDialog.__uninstallSelected" ID="ManageDictionariesDialog.__uninstallSelected"></a>
+<h4>ManageDictionariesDialog.__uninstallSelected</h4>
+<b>__uninstallSelected</b>(<i></i>)
+<p>
+        Private method to uninstall the selected dictionaries.
+</p><a NAME="ManageDictionariesDialog.addEntry" ID="ManageDictionariesDialog.addEntry"></a>
+<h4>ManageDictionariesDialog.addEntry</h4>
+<b>addEntry</b>(<i>short, filename, url, documentationDir, locales</i>)
+<p>
+        Public method to add an entry to the list.
+</p><dl>
+<dt><i>short</i> (str)</dt>
+<dd>
+data for the description field
+</dd><dt><i>filename</i> (str)</dt>
+<dd>
+data for the filename field
+</dd><dt><i>url</i> (str)</dt>
+<dd>
+download URL for the dictionary entry
+</dd><dt><i>documentationDir</i> (str)</dt>
+<dd>
+name of the directory containing the
+            dictionary documentation
+</dd><dt><i>locales</i> (list of str)</dt>
+<dd>
+list of locales
+</dd>
+</dl><a NAME="ManageDictionariesDialog.on_buttonBox_clicked" ID="ManageDictionariesDialog.on_buttonBox_clicked"></a>
+<h4>ManageDictionariesDialog.on_buttonBox_clicked</h4>
+<b>on_buttonBox_clicked</b>(<i>button</i>)
+<p>
+        Private slot to handle the click of a button of the button box.
+</p><dl>
+<dt><i>button</i> (QAbstractButton)</dt>
+<dd>
+reference to the button pressed
+</dd>
+</dl><a NAME="ManageDictionariesDialog.on_dictionariesList_itemSelectionChanged" ID="ManageDictionariesDialog.on_dictionariesList_itemSelectionChanged"></a>
+<h4>ManageDictionariesDialog.on_dictionariesList_itemSelectionChanged</h4>
+<b>on_dictionariesList_itemSelectionChanged</b>(<i></i>)
+<p>
+        Private slot to handle a change of the selection.
+</p><a NAME="ManageDictionariesDialog.on_dictionariesUrlEditButton_toggled" ID="ManageDictionariesDialog.on_dictionariesUrlEditButton_toggled"></a>
+<h4>ManageDictionariesDialog.on_dictionariesUrlEditButton_toggled</h4>
+<b>on_dictionariesUrlEditButton_toggled</b>(<i>checked</i>)
+<p>
+        Private slot to set the read only status of the dictionaries URL line
+        edit.
+</p><dl>
+<dt><i>checked</i></dt>
+<dd>
+state of the push button (boolean)
+</dd>
+</dl><a NAME="ManageDictionariesDialog.on_locationComboBox_currentTextChanged" ID="ManageDictionariesDialog.on_locationComboBox_currentTextChanged"></a>
+<h4>ManageDictionariesDialog.on_locationComboBox_currentTextChanged</h4>
+<b>on_locationComboBox_currentTextChanged</b>(<i>txt</i>)
+<p>
+        Private slot to handle a change of the installation location.
+</p><dl>
+<dt><i>txt</i> (str)</dt>
+<dd>
+installation location
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/index-eric6.E5XML.html	Fri Sep 01 12:08:49 2017 +0200
+++ b/Documentation/Source/index-eric6.E5XML.html	Tue Oct 03 15:33:11 2017 +0200
@@ -84,6 +84,9 @@
 <td><a href="eric6.E5XML.ShortcutsWriter.html">ShortcutsWriter</a></td>
 <td>Module implementing the writer class for writing an XML shortcuts file.</td>
 </tr><tr>
+<td><a href="eric6.E5XML.SpellCheckDictionariesReader.html">SpellCheckDictionariesReader</a></td>
+<td>Module to read the web browser spell check dictionaries list file.</td>
+</tr><tr>
 <td><a href="eric6.E5XML.TasksReader.html">TasksReader</a></td>
 <td>Module implementing a class for reading an XML tasks file.</td>
 </tr><tr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/index-eric6.WebBrowser.SpellCheck.html	Tue Oct 03 15:33:11 2017 +0200
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.WebBrowser.SpellCheck</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body>
+<h1>eric6.WebBrowser.SpellCheck</h1>
+<p>
+Package implementing Spell Checking related modules.
+</p>
+
+
+<h3>Modules</h3>
+<table>
+<tr>
+<td><a href="eric6.WebBrowser.SpellCheck.ManageDictionariesDialog.html">ManageDictionariesDialog</a></td>
+<td>Module implementing a dialog to install spell checking dictionaries.</td>
+</tr>
+</table>
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/index-eric6.WebBrowser.html	Fri Sep 01 12:08:49 2017 +0200
+++ b/Documentation/Source/index-eric6.WebBrowser.html	Tue Oct 03 15:33:11 2017 +0200
@@ -100,6 +100,9 @@
 <td><a href="index-eric6.WebBrowser.SpeedDial.html">SpeedDial</a></td>
 <td>Package implementing the speed dial functionality.</td>
 </tr><tr>
+<td><a href="index-eric6.WebBrowser.SpellCheck.html">SpellCheck</a></td>
+<td>Package implementing Spell Checking related modules.</td>
+</tr><tr>
 <td><a href="index-eric6.WebBrowser.StatusBar.html">StatusBar</a></td>
 <td>Package implementing some status bar icons.</td>
 </tr><tr>
--- a/E5Gui/E5Application.py	Fri Sep 01 12:08:49 2017 +0200
+++ b/E5Gui/E5Application.py	Tue Oct 03 15:33:11 2017 +0200
@@ -23,6 +23,12 @@
         
         @param argv command line arguments
         """
+        try:
+            QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
+            # __IGNORE_EXCEPTION__
+        except AttributeError:
+            pass
+        
         super(E5Application, self).__init__(argv)
         
         QCoreApplication.setAttribute(Qt.AA_DontCreateNativeWidgetSiblings)
--- a/E5XML/Config.py	Fri Sep 01 12:08:49 2017 +0200
+++ b/E5XML/Config.py	Tue Oct 03 15:33:11 2017 +0200
@@ -37,5 +37,8 @@
 # version number of the highlighting styles file
 highlightingStylesFileFormatVersion = "4.3"
 
+# version number of the web browser spell check dictionaries list file
+dictionariesListFileFormatVersion = "1.0"
+
 #
 # eflag: noqa = M702
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/E5XML/SpellCheckDictionariesReader.py	Tue Oct 03 15:33:11 2017 +0200
@@ -0,0 +1,92 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module to read the web browser spell check dictionaries list file.
+"""
+
+from __future__ import unicode_literals
+
+from .Config import dictionariesListFileFormatVersion
+from .XMLStreamReaderBase import XMLStreamReaderBase
+
+import Preferences
+
+
+class SpellCheckDictionariesReader(XMLStreamReaderBase):
+    """
+    Class to read the web browser spell check dictionaries list file.
+    """
+    supportedVersions = ["1.0", ]
+    
+    def __init__(self, data, entryCallback):
+        """
+        Constructor
+        
+        @param data reference to the data array to read XML from (QByteArray)
+        @param entryCallback reference to a function to be called once the
+            data for a dictionary has been read (function)
+        """
+        XMLStreamReaderBase.__init__(self, data)
+        
+        self.__entryCallback = entryCallback
+        
+        self.version = ""
+        self.baseUrl = ""
+    
+    def readXML(self):
+        """
+        Public method to read and parse the XML document.
+        """
+        while not self.atEnd():
+            self.readNext()
+            if self.isStartElement():
+                if self.name() == "Dictionaries":
+                    self.version = self.attribute(
+                        "version",
+                        dictionariesListFileFormatVersion)
+                    self.baseUrl = self.attribute("baseurl", "")
+                    if self.version not in self.supportedVersions:
+                        self.raiseUnsupportedFormatVersion(self.version)
+                elif self.name() == "DictionariesUrl":
+                    url = self.readElementText()
+                    Preferences.setWebBrowser("SpellCheckDictionariesUrl", url)
+                elif self.name() == "Dictionary":
+                    self.__readDictionary()
+                else:
+                    self._skipUnknownElement()
+        
+        self.showErrorMessage()
+    
+    def __readDictionary(self):
+        """
+        Private method to read the plug-in info.
+        """
+        dictionaryInfo = {"short": "",
+                          "filename": "",
+                          "documentation": "",
+                          "locales": [],
+                          }
+        
+        while not self.atEnd():
+            self.readNext()
+            if self.isEndElement() and self.name() == "Dictionary":
+                self.__entryCallback(
+                    dictionaryInfo["short"], dictionaryInfo["filename"],
+                    self.baseUrl + dictionaryInfo["filename"],
+                    dictionaryInfo["documentation"], dictionaryInfo["locales"])
+                break
+            
+            if self.isStartElement():
+                if self.name() == "Short":
+                    dictionaryInfo["short"] = self.readElementText()
+                elif self.name() == "Filename":
+                    dictionaryInfo["filename"] = self.readElementText()
+                elif self.name() == "Documentation":
+                    dictionaryInfo["documentation"] = self.readElementText()
+                elif self.name() == "Locales":
+                    dictionaryInfo["locales"] = self.readElementText().split()
+                else:
+                    self.raiseUnexpectedStartTag(self.name())
--- a/E5XML/XMLStreamReaderBase.py	Fri Sep 01 12:08:49 2017 +0200
+++ b/E5XML/XMLStreamReaderBase.py	Tue Oct 03 15:33:11 2017 +0200
@@ -50,13 +50,21 @@
         Public method to show an error message.
         """
         if self.hasError():
-            msg = QCoreApplication.translate(
-                "XMLStreamReaderBase",
-                "<p>XML parse error in file <b>{0}</b>, line {1},"
-                " column {2}</p><p>Error: {3}</p>").format(
-                self.device().fileName(),
-                self.lineNumber(), self.columnNumber(),
-                self.errorString())
+            if self.device() is not None:
+                msg = QCoreApplication.translate(
+                    "XMLStreamReaderBase",
+                    "<p>XML parse error in file <b>{0}</b>, line {1},"
+                    " column {2}</p><p>Error: {3}</p>").format(
+                    self.device().fileName(),
+                    self.lineNumber(), self.columnNumber(),
+                    self.errorString())
+            else:
+                msg = QCoreApplication.translate(
+                    "XMLStreamReaderBase",
+                    "<p>XML parse error (line {0},"
+                    " column {1})</p><p>Error: {2}</p>").format(
+                    self.lineNumber(), self.columnNumber(),
+                    self.errorString())
             E5MessageBox.warning(
                 None,
                 QCoreApplication.translate(
--- a/PluginManager/PluginRepositoryDialog.py	Fri Sep 01 12:08:49 2017 +0200
+++ b/PluginManager/PluginRepositoryDialog.py	Tue Oct 03 15:33:11 2017 +0200
@@ -482,12 +482,11 @@
     def __downloadFileDone(self):
         """
         Private method called, after the file has been downloaded
-        from the internet.
+        from the Internet.
         """
         self.__updateButton.setEnabled(True)
         self.__downloadCancelButton.setEnabled(False)
-        self.__onlineStateChanged(
-            self.__isOnline())
+        self.__onlineStateChanged(self.__isOnline())
         
         ok = True
         reply = self.sender()
@@ -625,7 +624,7 @@
     
     def __updateStatus(self, filename, version):
         """
-        Private method to check, if the given archive update status.
+        Private method to check the given archive update status.
         
         @param filename data for the filename field (string)
         @param version data for the version field (string)
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Fri Sep 01 12:08:49 2017 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Tue Oct 03 15:33:11 2017 +0200
@@ -1679,7 +1679,8 @@
                 childrenStr = ""
             
             messageStr = "<br />\n".join([
-                line.strip() for line in itm.data(0, self.__messageRole)
+                Utilities.html_encode(line.strip())
+                for line in itm.data(0, self.__messageRole)
             ])
             
             html = self.__detailsTemplate.format(
--- a/Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.py	Fri Sep 01 12:08:49 2017 +0200
+++ b/Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.py	Tue Oct 03 15:33:11 2017 +0200
@@ -9,6 +9,8 @@
 
 from __future__ import unicode_literals
 
+import os
+
 from PyQt5.QtCore import pyqtSlot, Qt, QCoreApplication, QDir, QLibraryInfo, \
     QLocale
 from PyQt5.QtWidgets import QListWidgetItem
@@ -39,7 +41,7 @@
         self.on_spellCheckEnabledCheckBox_clicked()
         
         if Globals.isMacPlatform():
-            dictionaryDirectories = {
+            self.__dictionaryDirectories = {
                 QDir.cleanPath(
                     QCoreApplication.applicationDirPath() +
                     "/../Resources/qtwebengine_dictionaries"),
@@ -49,7 +51,7 @@
                     "/Resources/qtwebengine_dictionaries"),
             }
         else:
-            dictionaryDirectories = {
+            self.__dictionaryDirectories = {
                 QDir.cleanPath(
                     QCoreApplication.applicationDirPath() +
                     "/qtwebengine_dictionaries"),
@@ -58,9 +60,32 @@
                     "/qtwebengine_dictionaries"),
             }
         self.spellCheckDictionaryDirectoriesEdit.setPlainText(
-            "\n".join(dictionaryDirectories))
+            "\n".join(self.__dictionaryDirectories))
+        # try to create these directories, if they don't exist
+        for directory in self.__dictionaryDirectories:
+            if not os.path.exists(directory):
+                try:
+                    os.makedirs(directory)
+                except os.error:
+                    # ignore it
+                    pass
         
-        for path in dictionaryDirectories:
+        self.__writeableDirectories = []
+        for directory in self.__dictionaryDirectories:
+            if os.access(directory, os.W_OK):
+                self.__writeableDirectories.append(directory)
+        self.manageDictionariesButton.setEnabled(
+            bool(self.__writeableDirectories))
+        
+        self.__populateDictionariesList()
+    
+    def __populateDictionariesList(self):
+        """
+        Private method to populate the spell checking dictionaries list.
+        """
+        self.spellCheckLanguagesList.clear()
+        
+        for path in self.__dictionaryDirectories:
             directory = QDir(path)
             fileNames = directory.entryList(["*.bdic"])
             for fileName in fileNames:
@@ -91,8 +116,12 @@
         
         if self.spellCheckLanguagesList.count():
             self.noLanguagesLabel.hide()
+            self.spellCheckLanguagesList.show()
         else:
+            # no dictionaries available, disable spell checking
+            self.noLanguagesLabel.show()
             self.spellCheckLanguagesList.hide()
+            self.spellCheckEnabledCheckBox.setChecked(False)
     
     def save(self):
         """
@@ -138,6 +167,18 @@
         lang = QLocale.languageToString(loc.language())
         languageString = "{0}/{1} [{2}]".format(lang, country, language)
         return languageString
+    
+    @pyqtSlot()
+    def on_manageDictionariesButton_clicked(self):
+        """
+        Private slot to manage spell checking dictionaries.
+        """
+        from WebBrowser.SpellCheck.ManageDictionariesDialog import \
+            ManageDictionariesDialog
+        dlg = ManageDictionariesDialog(self.__writeableDirectories, self)
+        dlg.exec_()
+        
+        self.__populateDictionariesList()
 
 
 def create(dlg):
--- a/Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui	Fri Sep 01 12:08:49 2017 +0200
+++ b/Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui	Tue Oct 03 15:33:11 2017 +0200
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>499</width>
-    <height>550</height>
+    <height>583</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout_3">
@@ -102,6 +102,46 @@
     </widget>
    </item>
    <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="manageDictionariesButton">
+       <property name="toolTip">
+        <string>Press to open a dialog to manage spell checking dictionaries</string>
+       </property>
+       <property name="text">
+        <string>Manage Dictionaries...</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_2">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item>
     <spacer name="verticalSpacer">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
--- a/Preferences/ProgramsDialog.py	Fri Sep 01 12:08:49 2017 +0200
+++ b/Preferences/ProgramsDialog.py	Tue Oct 03 15:33:11 2017 +0200
@@ -143,7 +143,7 @@
         # 2.1b. Forms Compiler PyQt4
         self.__createProgramEntry(
             self.tr("Forms Compiler (Python, PyQt4)"),
-            Utilities.generatePyQtToolPath("pyuic4"),
+            Utilities.generatePyQtToolPath("pyuic4", ["py3uic4", "py2uic4"]),
             '--version', 'Python User', 4)
         # 2.1c. Resource Compiler PyQt4
         self.__createProgramEntry(
@@ -160,7 +160,7 @@
         # 2.2b. Forms Compiler PyQt5
         self.__createProgramEntry(
             self.tr("Forms Compiler (Python, PyQt5)"),
-            Utilities.generatePyQtToolPath("pyuic5"),
+            Utilities.generatePyQtToolPath("pyuic5", ["py3uic5", "py2uic5"]),
             '--version', 'Python User', 4)
         # 2.2c. Resource Compiler PyQt5
         self.__createProgramEntry(
--- a/Preferences/__init__.py	Fri Sep 01 12:08:49 2017 +0200
+++ b/Preferences/__init__.py	Tue Oct 03 15:33:11 2017 +0200
@@ -1090,6 +1090,9 @@
         # Spell Checking
         "SpellCheckEnabled": False,
         "SpellCheckLanguages": [],
+        "SpellCheckDictionariesUrl":
+        "https://eric-ide.python-projects.org/qwebengine_dictionaries/" \
+        "dictionaries.xml",
         # Sync
         "SyncEnabled": False,
         "SyncBookmarks": True,
--- a/Project/ProjectFormsBrowser.py	Fri Sep 01 12:08:49 2017 +0200
+++ b/Project/ProjectFormsBrowser.py	Tue Oct 03 15:33:11 2017 +0200
@@ -745,14 +745,18 @@
         if self.project.getProjectLanguage() in \
                 ["Python", "Python2", "Python3"]:
             if self.project.getProjectType() in ["Qt4", ]:
-                self.uicompiler = Utilities.generatePyQtToolPath('pyuic4')
+                self.uicompiler = Utilities.generatePyQtToolPath(
+                    'pyuic4', ["py3uic4", "py2uic4"])
             elif self.project.getProjectType() in ["PyQt5"]:
-                self.uicompiler = Utilities.generatePyQtToolPath('pyuic5')
+                self.uicompiler = Utilities.generatePyQtToolPath(
+                    'pyuic5', ["py3uic5", "py2uic5"])
             elif self.project.getProjectType() in ["E6Plugin"]:
                 if PYQT_VERSION < 0x050000:
-                    self.uicompiler = Utilities.generatePyQtToolPath('pyuic4')
+                    self.uicompiler = Utilities.generatePyQtToolPath(
+                        'pyuic4', ["py3uic4", "py2uic4"])
                 else:
-                    self.uicompiler = Utilities.generatePyQtToolPath('pyuic5')
+                    self.uicompiler = Utilities.generatePyQtToolPath(
+                        'pyuic5', ["py3uic5", "py2uic5"])
             elif self.project.getProjectType() == "PySide":
                 self.uicompiler = \
                     Utilities.generatePySideToolPath('pyside-uic')
--- a/Project/PropertiesDialog.py	Fri Sep 01 12:08:49 2017 +0200
+++ b/Project/PropertiesDialog.py	Tue Oct 03 15:33:11 2017 +0200
@@ -126,8 +126,7 @@
         
         self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(
             bool(self.dirPicker.text()) and
-            self.dirPicker.text() not in
-            self.__initPaths)
+            self.dirPicker.text() not in self.__initPaths)
     
     @pyqtSlot(str)
     def on_languageComboBox_currentIndexChanged(self, language):
--- a/QScintilla/Editor.py	Fri Sep 01 12:08:49 2017 +0200
+++ b/QScintilla/Editor.py	Tue Oct 03 15:33:11 2017 +0200
@@ -381,10 +381,9 @@
         self.__setTextDisplay()
         
         # set the autocompletion and calltips function
-        self.__acHookFunction = None
         self.__completionListHookFunctions = {}
         self.__setAutoCompletion()
-        self.__ctHookFunction = None
+        
         self.__ctHookFunctions = {}
         self.__setCallTips()
         
@@ -4368,8 +4367,7 @@
         else:
             self.setAutoCompletionSource(QsciScintilla.AcsAll)
         if Preferences.getEditor("AutoCompletionEnabled"):
-            if self.__acHookFunction is None or \
-                    not self.__completionListHookFunctions:
+            if not self.__completionListHookFunctions:
                 self.setAutoCompletionThreshold(
                     Preferences.getEditor("AutoCompletionThreshold"))
             else:
@@ -4519,54 +4517,9 @@
         
         return False
     
-    #####################################################
-    ## old auto-completion hook interfaces (before 6.1.0)
-    #####################################################
-    
-    def setAutoCompletionHook(self, func):
-        """
-        Public method to set an autocompletion hook.
-        
-        @param func Function to be set to handle autocompletion. func
-            should be a function taking a reference to the editor and
-            a boolean indicating to complete a context.
-        """
-        if self.__acHookFunction is not None:
-            # there is another provider registered already
-            E5MessageBox.warning(
-                self,
-                self.tr("Activating Auto-Completion Provider"),
-                self.tr("""Auto-completion provider cannot be connected"""
-                        """ because there is already another one active."""
-                        """ Please check your configuration."""))
-            return
-        
-        if self.autoCompletionThreshold() > 0:
-            self.setAutoCompletionThreshold(0)
-        self.__acHookFunction = func
-        self.SCN_CHARADDED.connect(self.__charAdded)
-    
-    def unsetAutoCompletionHook(self):
-        """
-        Public method to unset a previously installed autocompletion hook.
-        """
-        self.SCN_CHARADDED.disconnect(self.__charAdded)
-        self.__acHookFunction = None
-        if self.autoCompletionThreshold() == 0:
-            self.setAutoCompletionThreshold(
-                Preferences.getEditor("AutoCompletionThreshold"))
-    
-    def autoCompletionHook(self):
-        """
-        Public method to get the autocompletion hook function.
-        
-        @return function set by setAutoCompletionHook()
-        """
-        return self.__acHookFunction
-    
-    ########################################################
-    ## new auto-completion hook interfaces (6.1.0 and later)
-    ########################################################
+    #################################################################
+    ## auto-completion hook interfaces
+    #################################################################
     
     def addCompletionListHook(self, key, func):
         """
@@ -4656,9 +4609,6 @@
                 completionsList.sort()
                 self.showUserList(EditorAutoCompletionListID,
                                   completionsList)
-        elif self.__acHookFunction is not None:
-            # for backward compatibility
-            self.__acHookFunction(self, context)
         elif not auto:
             self.autoCompleteQScintilla()
         elif self.autoCompletionSource() != QsciScintilla.AcsNone:
@@ -4702,14 +4652,13 @@
             (boolean)
         """
         return (self.acAPI or
-                self.__acHookFunction is not None or
                 bool(self.__completionListHookFunctions))
     
     def callTip(self):
         """
         Public method to show calltips.
         """
-        if bool(self.__ctHookFunctions) or self.__ctHookFunction is not None:
+        if bool(self.__ctHookFunctions):
             self.__callTip()
         else:
             super(Editor, self).callTip()
@@ -4759,9 +4708,6 @@
                 callTips.extend(self.__ctHookFunctions[key](self, pos, commas))
             callTips = list(set(callTips))
             callTips.sort()
-        else:
-            # for backward compatibility
-            callTips = self.__ctHookFunction(self, pos, commas)
         if len(callTips) == 0:
             if Preferences.getEditor("CallTipsScintillaOnFail"):
                 # try QScintilla calltips
@@ -4837,49 +4783,9 @@
                 ct = ct - ctshift
         return ct
     
-    ##############################################
-    ## old calltips hook interfaces (before 6.1.0)
-    ##############################################
-    
-    def setCallTipHook(self, func):
-        """
-        Public method to set a calltip hook.
-        
-        @param func Function to be set to determine calltips. func
-            should be a function taking a reference to the editor,
-            a position into the text and the amount of commas to the
-            left of the cursor. It should return the possible
-            calltips as a list of strings.
-        """
-        if self.__ctHookFunction is not None:
-            # there is another provider registered already
-            E5MessageBox.warning(
-                self,
-                self.tr("Activating Calltip Provider"),
-                self.tr("""Calltip provider cannot be connected"""
-                        """ because there is already another one active."""
-                        """ Please check your configuration."""))
-            return
-        
-        self.__ctHookFunction = func
-    
-    def unsetCallTipHook(self):
-        """
-        Public method to unset a calltip hook.
-        """
-        self.__ctHookFunction = None
-    
-    def callTipHook(self):
-        """
-        Public method to get the calltip hook function.
-        
-        @return function set by setCallTipHook()
-        """
-        return self.__ctHookFunction
-    
-    ########################################################
-    ## new auto-completion hook interfaces (6.1.0 and later)
-    ########################################################
+    #################################################################
+    ## call-tip hook interfaces
+    #################################################################
     
     def addCallTipHook(self, key, func):
         """
@@ -4937,7 +4843,6 @@
         @return flag indicating the availability of calltips (boolean)
         """
         return (self.acAPI or
-                self.__ctHookFunction is not None or
                 bool(self.__ctHookFunctions))
     
     #################################################################
--- a/Utilities/BackgroundService.py	Fri Sep 01 12:08:49 2017 +0200
+++ b/Utilities/BackgroundService.py	Tue Oct 03 15:33:11 2017 +0200
@@ -161,8 +161,10 @@
             
             packedData = b''
             while len(packedData) < length:
-                connection.waitForReadyRead(50)
-                packedData += connection.read(length - len(packedData))
+                maxSize = length - len(packedData)
+                if connection.bytesAvailable() < maxSize:
+                    connection.waitForReadyRead(50)
+                packedData += connection.read(maxSize)
 
             assert adler32(packedData) & 0xffffffff == datahash, \
                 'Hashes not equal'
--- a/Utilities/__init__.py	Fri Sep 01 12:08:49 2017 +0200
+++ b/Utilities/__init__.py	Tue Oct 03 15:33:11 2017 +0200
@@ -1693,12 +1693,14 @@
 ###############################################################################
 
 
-def generatePyQtToolPath(toolname):
+def generatePyQtToolPath(toolname, alternatives=None):
     """
     Module function to generate the executable path for a PyQt tool.
     
     @param toolname base name of the tool
     @type str
+    @param alternatives list of alternative tool names to try
+    @type list of str
     @return executable path name of the tool
     @rtype str
     """
@@ -1713,6 +1715,12 @@
             exe = getWindowsExecutablePath(toolname)
         else:
             exe = toolname
+    
+    if not isinpath(exe) and alternatives:
+        ex_ = generatePyQtToolPath(alternatives[0], alternatives[1:])
+        if isinpath(ex_):
+            exe = ex_
+    
     return exe
 
 ###############################################################################
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebBrowser/SpellCheck/ManageDictionariesDialog.py	Tue Oct 03 15:33:11 2017 +0200
@@ -0,0 +1,487 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to install spell checking dictionaries.
+"""
+
+from __future__ import unicode_literals
+
+import os
+import io
+import zipfile
+import glob
+import shutil
+
+from PyQt5.QtCore import pyqtSlot, Qt, QUrl
+from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QAbstractButton, \
+    QListWidgetItem
+from PyQt5.QtNetwork import QNetworkConfigurationManager, QNetworkRequest, \
+    QNetworkReply
+
+from E5Gui import E5MessageBox
+
+from .Ui_ManageDictionariesDialog import Ui_ManageDictionariesDialog
+
+from WebBrowser.WebBrowserWindow import WebBrowserWindow
+
+import Preferences
+
+
+class ManageDictionariesDialog(QDialog, Ui_ManageDictionariesDialog):
+    """
+    Class implementing a dialog to install spell checking dictionaries.
+    """
+    FilenameRole = Qt.UserRole
+    UrlRole = Qt.UserRole + 1
+    DocumentationDirRole = Qt.UserRole + 2
+    LocalesRole = Qt.UserRole + 3
+    
+    def __init__(self, writeableDirectories, parent=None):
+        """
+        Constructor
+        
+        @param writeableDirectories list of writable directories
+        @type list of str
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super(ManageDictionariesDialog, self).__init__(parent)
+        self.setupUi(self)
+        
+        self.__refreshButton = self.buttonBox.addButton(
+            self.tr("Refresh"), QDialogButtonBox.ActionRole)
+        self.__installButton = self.buttonBox.addButton(
+            self.tr("Install Selected"), QDialogButtonBox.ActionRole)
+        self.__installButton.setEnabled(False)
+        self.__uninstallButton = self.buttonBox.addButton(
+            self.tr("Uninstall Selected"), QDialogButtonBox.ActionRole)
+        self.__uninstallButton.setEnabled(False)
+        self.__cancelButton = self.buttonBox.addButton(
+            self.tr("Cancel"), QDialogButtonBox.ActionRole)
+        self.__cancelButton.setEnabled(False)
+        
+        self.locationComboBox.addItems(writeableDirectories)
+        
+        self.dictionariesUrlEdit.setText(
+            Preferences.getWebBrowser("SpellCheckDictionariesUrl"))
+        
+        if Preferences.getUI("DynamicOnlineCheck"):
+            self.__networkConfigurationManager = \
+                QNetworkConfigurationManager(self)
+            self.__onlineStateChanged(
+                self.__networkConfigurationManager.isOnline())
+            self.__networkConfigurationManager.onlineStateChanged.connect(
+                self.__onlineStateChanged)
+        else:
+            self.__networkConfigurationManager = None
+            self.__onlineStateChanged(True)
+        self.__replies = []
+        
+        self.__downloadCancelled = False
+        self.__dictionariesToDownload = []
+        
+        self.__populateList()
+    
+    @pyqtSlot(bool)
+    def __onlineStateChanged(self, online):
+        """
+        Private slot handling online state changes.
+        
+        @param online flag indicating the online status
+        @type bool
+        """
+        self.__refreshButton.setEnabled(online)
+        
+        if online:
+            msg = self.tr("Network Status: online")
+        else:
+            msg = self.tr("Network Status: offline")
+        self.statusLabel.setText(msg)
+        
+        self.on_dictionariesList_itemSelectionChanged()
+    
+    def __isOnline(self):
+        """
+        Private method to check the online status.
+        
+        @return flag indicating the online status
+        @rtype bool
+        """
+        if self.__networkConfigurationManager is not None:
+            return self.__networkConfigurationManager.isOnline()
+        else:
+            return True
+    
+    @pyqtSlot(QAbstractButton)
+    def on_buttonBox_clicked(self, button):
+        """
+        Private slot to handle the click of a button of the button box.
+        
+        @param button reference to the button pressed
+        @type QAbstractButton
+        """
+        if button == self.__refreshButton:
+            self.__populateList()
+        elif button == self.__cancelButton:
+            self.__downloadCancel()
+        elif button == self.__installButton:
+            self.__installSelected()
+        elif button == self.__uninstallButton:
+            self.__uninstallSelected()
+    
+    @pyqtSlot()
+    def on_dictionariesList_itemSelectionChanged(self):
+        """
+        Private slot to handle a change of the selection.
+        """
+        self.__installButton.setEnabled(
+            self.locationComboBox.count() > 0 and
+            len(self.dictionariesList.selectedItems()) > 0 and
+            self.__isOnline()
+        )
+        
+        self.__uninstallButton.setEnabled(
+            self.locationComboBox.count() > 0 and
+            len([itm
+                 for itm in self.dictionariesList.selectedItems()
+                 if itm.checkState() == Qt.Checked
+                 ])
+        )
+    
+    @pyqtSlot(bool)
+    def on_dictionariesUrlEditButton_toggled(self, checked):
+        """
+        Private slot to set the read only status of the dictionaries URL line
+        edit.
+        
+        @param checked state of the push button (boolean)
+        """
+        self.dictionariesUrlEdit.setReadOnly(not checked)
+    
+    @pyqtSlot(str)
+    def on_locationComboBox_currentTextChanged(self, txt):
+        """
+        Private slot to handle a change of the installation location.
+        
+        @param txt installation location
+        @type str
+        """
+        self.__checkInstalledDictionaries()
+    
+    def __populateList(self):
+        """
+        Private method to populate the list of available plugins.
+        """
+        self.dictionariesList.clear()
+        self.downloadProgress.setValue(0)
+        
+        url = self.dictionariesUrlEdit.text()
+        
+        if self.__isOnline():
+            self.__refreshButton.setEnabled(False)
+            self.__installButton.setEnabled(False)
+            self.__uninstallButton.setEnabled(False)
+            self.__cancelButton.setEnabled(True)
+            
+            self.statusLabel.setText(url)
+            
+            self.__downloadCancelled = False
+            
+            request = QNetworkRequest(QUrl(url))
+            request.setAttribute(QNetworkRequest.CacheLoadControlAttribute,
+                                 QNetworkRequest.AlwaysNetwork)
+            reply = WebBrowserWindow.networkManager().get(request)
+            reply.finished.connect(self.__listFileDownloaded)
+            reply.downloadProgress.connect(self.__downloadProgress)
+            self.__replies.append(reply)
+        else:
+            E5MessageBox.warning(
+                self,
+                self.tr("Error populating list of dictionaries"),
+                self.tr(
+                    """<p>Could not download the dictionaries list"""
+                    """ from {0}.</p><p>Error: {1}</p>"""
+                ).format(url, self.tr("Computer is offline.")))
+    
+    def __listFileDownloaded(self):
+        """
+        Private method called, after the dictionaries list file has been
+        downloaded from the Internet.
+        """
+        self.__refreshButton.setEnabled(True)
+        self.__cancelButton.setEnabled(False)
+        self.__onlineStateChanged(self.__isOnline())
+        
+        self.downloadProgress.setValue(0)
+        
+        reply = self.sender()
+        if reply in self.__replies:
+            self.__replies.remove(reply)
+        reply.deleteLater()
+        
+        if reply.error() != QNetworkReply.NoError:
+            if not self.__downloadCancelled:
+                E5MessageBox.warning(
+                    self,
+                    self.tr("Error downloading dictionaries list"),
+                    self.tr(
+                        """<p>Could not download the dictionaries list"""
+                        """ from {0}.</p><p>Error: {1}</p>"""
+                    ).format(self.repositoryUrlEdit.text(),
+                             reply.errorString())
+                )
+            self.downloadProgress.setValue(0)
+            return
+        
+        listFileData = reply.readAll()
+        
+        # extract the dictionaries
+        from E5XML.SpellCheckDictionariesReader import \
+            SpellCheckDictionariesReader
+        reader = SpellCheckDictionariesReader(listFileData, self.addEntry)
+        reader.readXML()
+        url = Preferences.getWebBrowser("SpellCheckDictionariesUrl")
+        if url != self.dictionariesUrlEdit.text():
+            self.dictionariesUrlEdit.setText(url)
+            E5MessageBox.warning(
+                self,
+                self.tr("Dictionaries URL Changed"),
+                self.tr(
+                    """The URL of the spell check dictionaries has"""
+                    """ changed. Select the "Refresh" button to get"""
+                    """ the new dictionaries list."""
+                )
+            )
+        
+        if self.locationComboBox.count() == 0:
+            # no writable locations available
+            E5MessageBox.warning(
+                self,
+                self.tr("Error installing dictionaries"),
+                self.tr(
+                    """<p>None of the dictionary locations is writable by"""
+                    """ you. Please download required dictionaries manually"""
+                    """ and install them as administrator.</p>"""
+                )
+            )
+        
+        self.__checkInstalledDictionaries()
+    
+    def __downloadCancel(self):
+        """
+        Private slot to cancel the current download.
+        """
+        if self.__replies:
+            reply = self.__replies[0]
+            self.__downloadCancelled = True
+            self.__dictionariesToDownload = []
+            reply.abort()
+    
+    def __downloadProgress(self, done, total):
+        """
+        Private slot to show the download progress.
+        
+        @param done number of bytes downloaded so far
+        @type int
+        @param total total bytes to be downloaded
+        @type int
+        """
+        if total:
+            self.downloadProgress.setMaximum(total)
+            self.downloadProgress.setValue(done)
+    
+    def addEntry(self, short, filename, url, documentationDir, locales):
+        """
+        Public method to add an entry to the list.
+        
+        @param short data for the description field
+        @type str
+        @param filename data for the filename field
+        @type str
+        @param url download URL for the dictionary entry
+        @type str
+        @param documentationDir name of the directory containing the
+            dictionary documentation
+        @type str
+        @param locales list of locales
+        @type list of str
+        """
+        itm = QListWidgetItem(
+            self.tr("{0} ({1})").format(short, " ".join(locales)),
+            self.dictionariesList)
+        itm.setCheckState(Qt.Unchecked)
+        
+        itm.setData(ManageDictionariesDialog.FilenameRole, filename)
+        itm.setData(ManageDictionariesDialog.UrlRole, url)
+        itm.setData(ManageDictionariesDialog.DocumentationDirRole,
+                    documentationDir)
+        itm.setData(ManageDictionariesDialog.LocalesRole, locales)
+    
+    def __checkInstalledDictionaries(self):
+        """
+        Private method to check all installed dictionaries.
+        
+        Note: A dictionary is assumed to be installed, if at least one of its
+        binary dictionaries (*.bdic) is found in the selected dictionaries
+        location.
+        """
+        if self.locationComboBox.currentText():
+            installedLocales = {
+                os.path.splitext(os.path.basename(dic))[0]
+                for dic in glob.glob(
+                    os.path.join(self.locationComboBox.currentText(), "*.bdic")
+                )
+            }
+            
+            for row in range(self.dictionariesList.count()):
+                itm = self.dictionariesList.item(row)
+                locales = set(itm.data(ManageDictionariesDialog.LocalesRole))
+                if locales.intersection(installedLocales):
+                    itm.setCheckState(Qt.Checked)
+                else:
+                    itm.setCheckState(Qt.Unchecked)
+        else:
+            for row in range(self.dictionariesList.count()):
+                itm = self.dictionariesList.item(row)
+                itm.setCheckState(Qt.Unchecked)
+    
+    def __installSelected(self):
+        """
+        Private method to install the selected dictionaries.
+        """
+        if self.__isOnline() and bool(self.locationComboBox.currentText()):
+            self.__dictionariesToDownload = [
+                itm.data(ManageDictionariesDialog.UrlRole)
+                for itm in self.dictionariesList.selectedItems()
+            ]
+            
+            self.__refreshButton.setEnabled(False)
+            self.__installButton.setEnabled(False)
+            self.__uninstallButton.setEnabled(False)
+            self.__cancelButton.setEnabled(True)
+            
+            self.__downloadCancelled = False
+            
+            self.__downloadDictionary()
+    
+    def __downloadDictionary(self):
+        """
+        Private slot to download a dictionary.
+        """
+        if self.__isOnline():
+            if self.__dictionariesToDownload:
+                url = self.__dictionariesToDownload.pop(0)
+                self.statusLabel.setText(url)
+                
+                self.__downloadCancelled = False
+                
+                request = QNetworkRequest(QUrl(url))
+                request.setAttribute(QNetworkRequest.CacheLoadControlAttribute,
+                                     QNetworkRequest.AlwaysNetwork)
+                reply = WebBrowserWindow.networkManager().get(request)
+                reply.finished.connect(self.__installDictionary)
+                reply.downloadProgress.connect(self.__downloadProgress)
+                self.__replies.append(reply)
+            else:
+                self.__installationFinished()
+        else:
+            E5MessageBox.warning(
+                self,
+                self.tr("Error downloading dictionary file"),
+                self.tr(
+                    """<p>Could not download the requested dictionary file"""
+                    """ from {0}.</p><p>Error: {1}</p>"""
+                ).format(url, self.tr("Computer is offline.")))
+            
+            self.__installationFinished()
+    
+    def __installDictionary(self):
+        """
+        Private slot to install the downloaded dictionary.
+        """
+        reply = self.sender()
+        if reply in self.__replies:
+            self.__replies.remove(reply)
+        reply.deleteLater()
+        
+        if reply.error() != QNetworkReply.NoError:
+            if not self.__downloadCancelled:
+                E5MessageBox.warning(
+                    self,
+                    self.tr("Error downloading dictionary file"),
+                    self.tr(
+                        """<p>Could not download the requested dictionary"""
+                        """ file from {0}.</p><p>Error: {1}</p>"""
+                    ).format(reply.url(), reply.errorString())
+                )
+            self.downloadProgress.setValue(0)
+            return
+        
+        archiveData = reply.readAll()
+        archiveFile = io.BytesIO(bytes(archiveData))
+        archive = zipfile.ZipFile(archiveFile, "r")
+        if archive.testzip() is not None:
+            E5MessageBox.critical(
+                self,
+                self.tr("Error downloading dictionary"),
+                self.tr(
+                    """<p>The downloaded dictionary archive is invalid."""
+                    """ Skipping it.</p>""")
+            )
+        else:
+            installDir = self.locationComboBox.currentText()
+            archive.extractall(installDir)
+        
+        if self.__dictionariesToDownload:
+            self.__downloadDictionary()
+        else:
+            self.__installationFinished()
+    
+    def __installationFinished(self):
+        """
+        Private method called after all selected dictionaries have been
+        installed.
+        """
+        self.__refreshButton.setEnabled(True)
+        self.__cancelButton.setEnabled(False)
+        self.__onlineStateChanged(self.__isOnline())
+        
+        self.dictionariesList.clearSelection()
+        self.downloadProgress.setValue(0)
+        
+        self.__checkInstalledDictionaries()
+    
+    def __uninstallSelected(self):
+        """
+        Private method to uninstall the selected dictionaries.
+        """
+        installLocation = self.locationComboBox.currentText()
+        if not installLocation:
+            return
+        
+        itemsToDelete = [
+            itm
+            for itm in self.dictionariesList.selectedItems()
+            if itm.checkState() == Qt.Checked
+        ]
+        for itm in itemsToDelete:
+            documentationDir = itm.data(
+                ManageDictionariesDialog.DocumentationDirRole)
+            shutil.rmtree(os.path.join(installLocation, documentationDir),
+                          True)
+            
+            locales = itm.data(ManageDictionariesDialog.LocalesRole)
+            for locale in locales:
+                bdic = os.path.join(installLocation, locale + ".bdic")
+                try:
+                    os.remove(bdic)
+                except OSError:
+                    # ignore silently
+                    pass
+        
+        self.dictionariesList.clearSelection()
+        
+        self.__checkInstalledDictionaries()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebBrowser/SpellCheck/ManageDictionariesDialog.ui	Tue Oct 03 15:33:11 2017 +0200
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ManageDictionariesDialog</class>
+ <widget class="QDialog" name="ManageDictionariesDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>676</width>
+    <height>653</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Spell Check Dictionaries</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>Installation Location:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QComboBox" name="locationComboBox">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="toolTip">
+        <string>Select the location for the dictionaries installation</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QListWidget" name="dictionariesList">
+     <property name="toolTip">
+      <string>Shows the list of available dictionaries</string>
+     </property>
+     <property name="alternatingRowColors">
+      <bool>true</bool>
+     </property>
+     <property name="selectionMode">
+      <enum>QAbstractItemView::ExtendedSelection</enum>
+     </property>
+     <property name="sortingEnabled">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="Line" name="line">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QProgressBar" name="downloadProgress">
+     <property name="toolTip">
+      <string>Shows the progress of the current download</string>
+     </property>
+     <property name="value">
+      <number>0</number>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLabel" name="statusLabel">
+     <property name="text">
+      <string/>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLabel" name="label_4">
+       <property name="text">
+        <string>Dictionaries URL:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="dictionariesUrlEdit">
+       <property name="toolTip">
+        <string>Shows the dictionaries URL</string>
+       </property>
+       <property name="readOnly">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="dictionariesUrlEditButton">
+       <property name="toolTip">
+        <string>Press to edit the dictionaries URL</string>
+       </property>
+       <property name="text">
+        <string>Edit URL</string>
+       </property>
+       <property name="checkable">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Close</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>locationComboBox</tabstop>
+  <tabstop>dictionariesList</tabstop>
+  <tabstop>dictionariesUrlEdit</tabstop>
+  <tabstop>dictionariesUrlEditButton</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>ManageDictionariesDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>ManageDictionariesDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebBrowser/SpellCheck/__init__.py	Tue Oct 03 15:33:11 2017 +0200
@@ -0,0 +1,9 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+
+"""
+Package implementing Spell Checking related modules.
+"""
--- a/WebBrowser/WebBrowserView.py	Fri Sep 01 12:08:49 2017 +0200
+++ b/WebBrowser/WebBrowserView.py	Tue Oct 03 15:33:11 2017 +0200
@@ -560,7 +560,7 @@
                         self.__replaceMisspelledWord)
                     act.setFont(boldFont)
                 
-                if bool(menu.actions()):
+                if not bool(menu.actions()):
                     menu.addAction(self.tr("No suggestions")).setEnabled(False)
                 
                 menu.addSeparator()
--- a/changelog	Fri Sep 01 12:08:49 2017 +0200
+++ b/changelog	Tue Oct 03 15:33:11 2017 +0200
@@ -1,5 +1,11 @@
 Change Log
 ----------
+Version 17.10:
+- bug fixes
+- Web Browser (NG)
+  -- added a downloader and installer/uninstaller dialog for spell check
+     dictionaries
+
 Version 17.09:
 - bug fixes
 - Debugger
--- a/eric6.e4p	Fri Sep 01 12:08:49 2017 +0200
+++ b/eric6.e4p	Tue Oct 03 15:33:11 2017 +0200
@@ -184,6 +184,7 @@
     <Source>E5XML/SessionWriter.py</Source>
     <Source>E5XML/ShortcutsReader.py</Source>
     <Source>E5XML/ShortcutsWriter.py</Source>
+    <Source>E5XML/SpellCheckDictionariesReader.py</Source>
     <Source>E5XML/TasksReader.py</Source>
     <Source>E5XML/TasksWriter.py</Source>
     <Source>E5XML/TemplatesReader.py</Source>
@@ -1427,6 +1428,8 @@
     <Source>WebBrowser/SpeedDial/SpeedDialReader.py</Source>
     <Source>WebBrowser/SpeedDial/SpeedDialWriter.py</Source>
     <Source>WebBrowser/SpeedDial/__init__.py</Source>
+    <Source>WebBrowser/SpellCheck/ManageDictionariesDialog.py</Source>
+    <Source>WebBrowser/SpellCheck/__init__.py</Source>
     <Source>WebBrowser/StatusBar/ImagesIcon.py</Source>
     <Source>WebBrowser/StatusBar/JavaScriptIcon.py</Source>
     <Source>WebBrowser/StatusBar/JavaScriptSettingsDialog.py</Source>
@@ -1948,6 +1951,7 @@
     <Form>WebBrowser/SearchWidget.ui</Form>
     <Form>WebBrowser/Session/SessionManagerDialog.ui</Form>
     <Form>WebBrowser/SiteInfo/SiteInfoDialog.ui</Form>
+    <Form>WebBrowser/SpellCheck/ManageDictionariesDialog.ui</Form>
     <Form>WebBrowser/StatusBar/JavaScriptSettingsDialog.ui</Form>
     <Form>WebBrowser/Sync/SyncCheckPage.ui</Form>
     <Form>WebBrowser/Sync/SyncDataPage.ui</Form>
@@ -2794,7 +2798,7 @@
               <string>ExcludeFiles</string>
             </key>
             <value>
-              <string>*/ThirdParty/*, */coverage/*, Ui_*.py</string>
+              <string>*/ThirdParty/*, */coverage/*, Ui_*.py, *_rc.py</string>
             </value>
           </dict>
         </value>
--- a/i18n/eric6_cs.ts	Fri Sep 01 12:08:49 2017 +0200
+++ b/i18n/eric6_cs.ts	Tue Oct 03 15:33:11 2017 +0200
@@ -36764,6 +36764,149 @@
     </message>
 </context>
 <context>
+    <name>ManageDictionariesDialog</name>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="14"/>
+        <source>Spell Check Dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="25"/>
+        <source>Installation Location:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="38"/>
+        <source>Select the location for the dictionaries installation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="47"/>
+        <source>Shows the list of available dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="70"/>
+        <source>Shows the progress of the current download</source>
+        <translation type="unfinished">Zobrazit průběh aktuálního downloadu</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="89"/>
+        <source>Dictionaries URL:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="96"/>
+        <source>Shows the dictionaries URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="106"/>
+        <source>Press to edit the dictionaries URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="109"/>
+        <source>Edit URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="54"/>
+        <source>Refresh</source>
+        <translation type="unfinished">Obnovit</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="56"/>
+        <source>Install Selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="59"/>
+        <source>Uninstall Selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="62"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Zrušit</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="99"/>
+        <source>Network Status: online</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="101"/>
+        <source>Network Status: offline</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="201"/>
+        <source>Error populating list of dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="391"/>
+        <source>Computer is offline.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>Error downloading dictionaries list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>Dictionaries URL Changed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>The URL of the spell check dictionaries has changed. Select the &quot;Refresh&quot; button to get the new dictionaries list.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>Error installing dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="312"/>
+        <source>{0} ({1})</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>Error downloading dictionary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>Error downloading dictionary file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>MarkdownProvider</name>
     <message>
         <location filename="../QScintilla/MarkupProviders/MarkdownProvider.py" line="383"/>
@@ -40874,22 +41017,22 @@
 Vyberte Obnovit.</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>Error downloading file</source>
         <translation>Chyba při stahování souboru</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="584"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="583"/>
         <source>Stable</source>
         <translation>Stabilní</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="591"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="590"/>
         <source>Unstable</source>
         <translation>Nestabilní</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="598"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="597"/>
         <source>Unknown</source>
         <translation>Neznámý</translation>
     </message>
@@ -40899,7 +41042,7 @@
         <translation>&lt;p&gt;Soubor repozitáře pluginů &lt;b&gt;{0}&lt;/b&gt; nelze přečíst. Vyberte Obnovit&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nelze stáhnout požadovaný soubor z {0}.&lt;/p&gt;&lt;p&gt;Chyba: {1}&lt;/p&gt;</translation>
     </message>
@@ -40939,32 +41082,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="612"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="611"/>
         <source>up-to-date</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="615"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="614"/>
         <source>new download available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="619"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="618"/>
         <source>update installable</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="623"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="622"/>
         <source>updated download available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>Cleanup of Plugin Downloads</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -41002,17 +41145,17 @@
 <context>
     <name>PluginRepositoryWindow</name>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>Process Generation Error</source>
         <translation>Chyba v procesu generování</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit zveřejnění.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
@@ -41086,27 +41229,27 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1592"/>
+        <location filename="../Preferences/__init__.py" line="1595"/>
         <source>Export Preferences</source>
         <translation>Předvolby exportu</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Import Preferences</source>
         <translation>Předvolby importu</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select Python{0} Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select the Python{0} interpreter to be used:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -72018,6 +72161,16 @@
         <source>Dictionary Directories</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="122"/>
+        <source>Press to open a dialog to manage spell checking dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="125"/>
+        <source>Manage Dictionaries...</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WebBrowserTabWidget</name>
@@ -74670,30 +74823,35 @@
 <context>
     <name>XMLStreamReaderBase</name>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="60"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="68"/>
         <source>XML parse error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="187"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="195"/>
         <source>Pickle data encoding &apos;{0}&apos; is not supported.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="53"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="54"/>
         <source>&lt;p&gt;XML parse error in file &lt;b&gt;{0}&lt;/b&gt;, line {1}, column {2}&lt;/p&gt;&lt;p&gt;Error: {3}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="81"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="89"/>
         <source>File format version &apos;{0}&apos; is not supported.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="91"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="99"/>
         <source>Bad value: {0}</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="62"/>
+        <source>&lt;p&gt;XML parse error (line {0}, column {1})&lt;/p&gt;&lt;p&gt;Error: {2}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>XbelImporter</name>
Binary file i18n/eric6_de.qm has changed
--- a/i18n/eric6_de.ts	Fri Sep 01 12:08:49 2017 +0200
+++ b/i18n/eric6_de.ts	Tue Oct 03 15:33:11 2017 +0200
@@ -35824,6 +35824,149 @@
     </message>
 </context>
 <context>
+    <name>ManageDictionariesDialog</name>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="14"/>
+        <source>Spell Check Dictionaries</source>
+        <translation>Rechtschreibwörterbücher</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="25"/>
+        <source>Installation Location:</source>
+        <translation>Installationsort:</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="38"/>
+        <source>Select the location for the dictionaries installation</source>
+        <translation>Wähle den Installationsort für die Wörterbücher</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="47"/>
+        <source>Shows the list of available dictionaries</source>
+        <translation>Zeigt die Liste der verfügbaren Wörterbücher</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="70"/>
+        <source>Shows the progress of the current download</source>
+        <translation>Zeigt den Fortschritt des aktuellen Download</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="89"/>
+        <source>Dictionaries URL:</source>
+        <translation>URL der Wörterbücher:</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="96"/>
+        <source>Shows the dictionaries URL</source>
+        <translation>Zeigt die URL der Wörterbücher an</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="106"/>
+        <source>Press to edit the dictionaries URL</source>
+        <translation>Drücken, um die URL der Wörterbücher zu bearbeiten</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="109"/>
+        <source>Edit URL</source>
+        <translation>URL bearbeiten</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="54"/>
+        <source>Refresh</source>
+        <translation>Aktualisieren</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="56"/>
+        <source>Install Selected</source>
+        <translation>Ausgewählte installieren</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="59"/>
+        <source>Uninstall Selected</source>
+        <translation>Ausgewählte deinstallieren</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="62"/>
+        <source>Cancel</source>
+        <translation>Abbrechen</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="99"/>
+        <source>Network Status: online</source>
+        <translation>Netzwerkstatus: verbunden</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="101"/>
+        <source>Network Status: offline</source>
+        <translation>Netzwerkstatus: nicht verbunden</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="201"/>
+        <source>Error populating list of dictionaries</source>
+        <translation>&lt;p&gt;Die Wörterbuchliste konnte nicht von {0} heruntergeladen werden.&lt;/p&gt;&lt;p&gt;Fehler: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="391"/>
+        <source>Computer is offline.</source>
+        <translation>Computer ist nicht verbunden.</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>Error downloading dictionaries list</source>
+        <translation>Fehler beim Herunterladen der Wörterbuchliste</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Die Wörterbuchliste konnte nicht von {0} heruntergeladen werden.&lt;/p&gt;&lt;p&gt;Fehler: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>Dictionaries URL Changed</source>
+        <translation>URL der Wörterbücher geändert</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>The URL of the spell check dictionaries has changed. Select the &quot;Refresh&quot; button to get the new dictionaries list.</source>
+        <translation>Die URL für die Rechtschreibwörterbücher hat sich geändert. Wählen Sie den „Aktualisieren“-Knopf, um die neue Liste zu erhalten.</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>Error installing dictionaries</source>
+        <translation>Fehler beid er Installation von Wörterbücher</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Keines der Wörterbuchverzeichnisse ist durch sie veränderbar. Bitte laden sie die benötigten Wörterbücher manuell herunter und installieren sie sie als Administrator.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="312"/>
+        <source>{0} ({1})</source>
+        <translation>{0} ({1})</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>Error downloading dictionary</source>
+        <translation>Fehler beim Herunterladen der Wörterbuchdatei</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Die angefragte Wörterbuchdatei konnte nicht von {0} heruntergeladen werden.&lt;/p&gt;&lt;p&gt;Fehler: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>Error downloading dictionary file</source>
+        <translation>Fehler beim Herunterladen der Wörterbuchdatei</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Das heruntergeladene Wörterbucharchiv ist fehlerhaft. Überspringe es.&lt;/p&gt;</translation>
+    </message>
+</context>
+<context>
     <name>MarkdownProvider</name>
     <message>
         <location filename="../QScintilla/MarkupProviders/MarkdownProvider.py" line="383"/>
@@ -39902,27 +40045,27 @@
 Bitte „Aktualisieren“ drücken.</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>Error downloading file</source>
         <translation>Fehler beim Herunterladen der Datei</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die angefragte Datei konnte nicht von {0} gedownloaded werden.&lt;/p&gt;&lt;p&gt;Fehler: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="584"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="583"/>
         <source>Stable</source>
         <translation>Stabil</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="591"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="590"/>
         <source>Unstable</source>
         <translation>Instabil</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="598"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="597"/>
         <source>Unknown</source>
         <translation>Unbekannt</translation>
     </message>
@@ -39962,32 +40105,32 @@
         <translation>Downloadswartung</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="612"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="611"/>
         <source>up-to-date</source>
         <translation>aktuell</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="615"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="614"/>
         <source>new download available</source>
         <translation>neuer Download verfügbar</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="619"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="618"/>
         <source>update installable</source>
         <translation>Aktualisierung installierbar</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="623"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="622"/>
         <source>updated download available</source>
         <translation>aktualisiertes Download verfügbar</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>Cleanup of Plugin Downloads</source>
         <translation>Wartung der Plugin Downloads</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Plugindatei &lt;b&gt;{0}&lt;/b&gt; konnte nicht gelöscht werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
     </message>
@@ -40025,17 +40168,17 @@
 <context>
     <name>PluginRepositoryWindow</name>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>Process Generation Error</source>
         <translation>Fehler beim Prozessstart</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Der Prozess konnte nicht gestartet werden.&lt;br&gt;Stellen Sie sicher, dass er als &lt;b&gt;{0}&lt;/b&gt; verfügbar ist.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
@@ -40109,27 +40252,27 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1592"/>
+        <location filename="../Preferences/__init__.py" line="1595"/>
         <source>Export Preferences</source>
         <translation>Einstellungen exportieren</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Import Preferences</source>
         <translation>Einstellungen importieren</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation>Properties-Dateien (*.ini);;Alle Dateien (*)</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select Python{0} Interpreter</source>
         <translation>Wähle den Python{0}-Interpreter</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select the Python{0} interpreter to be used:</source>
         <translation>Wähle den zu verwendenden Python{0}-Interpreter aus:</translation>
     </message>
@@ -70693,6 +70836,16 @@
         <source>Dictionary Directories</source>
         <translation>Wörterbuchverzeichnisse</translation>
     </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="122"/>
+        <source>Press to open a dialog to manage spell checking dictionaries</source>
+        <translation>Drücken, um einen Dialog zur Verwaltung der Rechtschreibwörterbücher zu öffnen</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="125"/>
+        <source>Manage Dictionaries...</source>
+        <translation>Wörterbücher verwalten...</translation>
+    </message>
 </context>
 <context>
     <name>WebBrowserTabWidget</name>
@@ -73323,30 +73476,35 @@
 <context>
     <name>XMLStreamReaderBase</name>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="60"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="68"/>
         <source>XML parse error</source>
         <translation>XML-Parse-Fehler</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="187"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="195"/>
         <source>Pickle data encoding &apos;{0}&apos; is not supported.</source>
         <translation>Pickle-Datenkodierung „{0}“ wird nicht unterstützt.</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="53"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="54"/>
         <source>&lt;p&gt;XML parse error in file &lt;b&gt;{0}&lt;/b&gt;, line {1}, column {2}&lt;/p&gt;&lt;p&gt;Error: {3}&lt;/p&gt;</source>
         <translation>&lt;p&gt;XML-Parse-Fehler in der Datei &lt;b&gt;{0}&lt;/b&gt;, Zeile {1}, Spalte {2}&lt;/p&gt;&lt;p&gt;Fehler: {3}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="81"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="89"/>
         <source>File format version &apos;{0}&apos; is not supported.</source>
         <translation>Dateiformatversion „{0}“ wird nicht unterstützt.</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="91"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="99"/>
         <source>Bad value: {0}</source>
         <translation>Ungültiger Wert: {0}</translation>
     </message>
+    <message>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="62"/>
+        <source>&lt;p&gt;XML parse error (line {0}, column {1})&lt;/p&gt;&lt;p&gt;Error: {2}&lt;/p&gt;</source>
+        <translation>&lt;p&gt;XML-Parse-Fehler (Zeile {0}, Spalte {1})&lt;/p&gt;&lt;p&gt;Fehler: {2}&lt;/p&gt;</translation>
+    </message>
 </context>
 <context>
     <name>XbelImporter</name>
--- a/i18n/eric6_empty.ts	Fri Sep 01 12:08:49 2017 +0200
+++ b/i18n/eric6_empty.ts	Tue Oct 03 15:33:11 2017 +0200
@@ -35628,6 +35628,149 @@
     </message>
 </context>
 <context>
+    <name>ManageDictionariesDialog</name>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="14"/>
+        <source>Spell Check Dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="25"/>
+        <source>Installation Location:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="38"/>
+        <source>Select the location for the dictionaries installation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="47"/>
+        <source>Shows the list of available dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="70"/>
+        <source>Shows the progress of the current download</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="89"/>
+        <source>Dictionaries URL:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="96"/>
+        <source>Shows the dictionaries URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="106"/>
+        <source>Press to edit the dictionaries URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="109"/>
+        <source>Edit URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="54"/>
+        <source>Refresh</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="56"/>
+        <source>Install Selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="59"/>
+        <source>Uninstall Selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="62"/>
+        <source>Cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="99"/>
+        <source>Network Status: online</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="101"/>
+        <source>Network Status: offline</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="201"/>
+        <source>Error populating list of dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="391"/>
+        <source>Computer is offline.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>Error downloading dictionaries list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>Dictionaries URL Changed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>The URL of the spell check dictionaries has changed. Select the &quot;Refresh&quot; button to get the new dictionaries list.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>Error installing dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="312"/>
+        <source>{0} ({1})</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>Error downloading dictionary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>Error downloading dictionary file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>MarkdownProvider</name>
     <message>
         <location filename="../QScintilla/MarkupProviders/MarkdownProvider.py" line="383"/>
@@ -39741,12 +39884,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>Error downloading file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -39756,47 +39899,47 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="584"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="583"/>
         <source>Stable</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="591"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="590"/>
         <source>Unstable</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="598"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="597"/>
         <source>Unknown</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="612"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="611"/>
         <source>up-to-date</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="615"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="614"/>
         <source>new download available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="619"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="618"/>
         <source>update installable</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="623"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="622"/>
         <source>updated download available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>Cleanup of Plugin Downloads</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -39819,17 +39962,17 @@
 <context>
     <name>PluginRepositoryWindow</name>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>Process Generation Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>OK</source>
         <translation type="unfinished"></translation>
     </message>
@@ -39903,27 +40046,27 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1592"/>
+        <location filename="../Preferences/__init__.py" line="1595"/>
         <source>Export Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Import Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select Python{0} Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select the Python{0} interpreter to be used:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -70094,6 +70237,16 @@
         <source>Dictionary Directories</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="122"/>
+        <source>Press to open a dialog to manage spell checking dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="125"/>
+        <source>Manage Dictionaries...</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WebBrowserTabWidget</name>
@@ -72719,30 +72872,35 @@
 <context>
     <name>XMLStreamReaderBase</name>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="53"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="54"/>
         <source>&lt;p&gt;XML parse error in file &lt;b&gt;{0}&lt;/b&gt;, line {1}, column {2}&lt;/p&gt;&lt;p&gt;Error: {3}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="60"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="68"/>
         <source>XML parse error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="81"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="89"/>
         <source>File format version &apos;{0}&apos; is not supported.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="91"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="99"/>
         <source>Bad value: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="187"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="195"/>
         <source>Pickle data encoding &apos;{0}&apos; is not supported.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="62"/>
+        <source>&lt;p&gt;XML parse error (line {0}, column {1})&lt;/p&gt;&lt;p&gt;Error: {2}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>XbelImporter</name>
--- a/i18n/eric6_en.ts	Fri Sep 01 12:08:49 2017 +0200
+++ b/i18n/eric6_en.ts	Tue Oct 03 15:33:11 2017 +0200
@@ -35667,6 +35667,149 @@
     </message>
 </context>
 <context>
+    <name>ManageDictionariesDialog</name>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="14"/>
+        <source>Spell Check Dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="25"/>
+        <source>Installation Location:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="38"/>
+        <source>Select the location for the dictionaries installation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="47"/>
+        <source>Shows the list of available dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="70"/>
+        <source>Shows the progress of the current download</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="89"/>
+        <source>Dictionaries URL:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="96"/>
+        <source>Shows the dictionaries URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="106"/>
+        <source>Press to edit the dictionaries URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="109"/>
+        <source>Edit URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="54"/>
+        <source>Refresh</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="56"/>
+        <source>Install Selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="59"/>
+        <source>Uninstall Selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="62"/>
+        <source>Cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="99"/>
+        <source>Network Status: online</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="101"/>
+        <source>Network Status: offline</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="201"/>
+        <source>Error populating list of dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="391"/>
+        <source>Computer is offline.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>Error downloading dictionaries list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>Dictionaries URL Changed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>The URL of the spell check dictionaries has changed. Select the &quot;Refresh&quot; button to get the new dictionaries list.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>Error installing dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="312"/>
+        <source>{0} ({1})</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>Error downloading dictionary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>Error downloading dictionary file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>MarkdownProvider</name>
     <message>
         <location filename="../QScintilla/MarkupProviders/MarkdownProvider.py" line="383"/>
@@ -39735,27 +39878,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>Error downloading file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="584"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="583"/>
         <source>Stable</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="591"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="590"/>
         <source>Unstable</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="598"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="597"/>
         <source>Unknown</source>
         <translation type="unfinished"></translation>
     </message>
@@ -39795,32 +39938,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="612"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="611"/>
         <source>up-to-date</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="615"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="614"/>
         <source>new download available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="619"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="618"/>
         <source>update installable</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="623"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="622"/>
         <source>updated download available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>Cleanup of Plugin Downloads</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -39858,17 +40001,17 @@
 <context>
     <name>PluginRepositoryWindow</name>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>Process Generation Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>OK</source>
         <translation type="unfinished"></translation>
     </message>
@@ -39942,27 +40085,27 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1592"/>
+        <location filename="../Preferences/__init__.py" line="1595"/>
         <source>Export Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Import Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select Python{0} Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select the Python{0} interpreter to be used:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -70136,6 +70279,16 @@
         <source>Dictionary Directories</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="122"/>
+        <source>Press to open a dialog to manage spell checking dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="125"/>
+        <source>Manage Dictionaries...</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WebBrowserTabWidget</name>
@@ -72764,30 +72917,35 @@
 <context>
     <name>XMLStreamReaderBase</name>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="53"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="54"/>
         <source>&lt;p&gt;XML parse error in file &lt;b&gt;{0}&lt;/b&gt;, line {1}, column {2}&lt;/p&gt;&lt;p&gt;Error: {3}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="60"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="68"/>
         <source>XML parse error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="81"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="89"/>
         <source>File format version &apos;{0}&apos; is not supported.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="91"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="99"/>
         <source>Bad value: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="187"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="195"/>
         <source>Pickle data encoding &apos;{0}&apos; is not supported.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="62"/>
+        <source>&lt;p&gt;XML parse error (line {0}, column {1})&lt;/p&gt;&lt;p&gt;Error: {2}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>XbelImporter</name>
Binary file i18n/eric6_es.qm has changed
--- a/i18n/eric6_es.ts	Fri Sep 01 12:08:49 2017 +0200
+++ b/i18n/eric6_es.ts	Tue Oct 03 15:33:11 2017 +0200
@@ -1443,32 +1443,32 @@
         <translation>{0} no configurado.</translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="183"/>
+        <location filename="../Utilities/BackgroundService.py" line="185"/>
         <source>Restart background client?</source>
         <translation>¿Reiniciar cliente en background?</translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="426"/>
+        <location filename="../Utilities/BackgroundService.py" line="428"/>
         <source>Background client disconnected.</source>
         <translation>Cliente en background desconectado.</translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="420"/>
+        <location filename="../Utilities/BackgroundService.py" line="422"/>
         <source>Erics background client disconnected because of an unknown reason.</source>
         <translation>El cliente en background de Eric ha desconectado debido a una razón desconocida.</translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="209"/>
+        <location filename="../Utilities/BackgroundService.py" line="211"/>
         <source>An error in Erics background client stopped the service.</source>
         <translation>Un error en el cliente en background de Eric ha detenido el servicio.</translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="183"/>
+        <location filename="../Utilities/BackgroundService.py" line="185"/>
         <source>&lt;p&gt;The background client for &lt;b&gt;{0}&lt;/b&gt; has stopped due to an exception. It&apos;s used by various plug-ins like the different checkers.&lt;/p&gt;&lt;p&gt;Select&lt;ul&gt;&lt;li&gt;&lt;b&gt;&apos;Yes&apos;&lt;/b&gt; to restart the client, but abort the last job&lt;/li&gt;&lt;li&gt;&lt;b&gt;&apos;Retry&apos;&lt;/b&gt; to restart the client and the last job&lt;/li&gt;&lt;li&gt;&lt;b&gt;&apos;No&apos;&lt;/b&gt; to leave the client off.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;Note: The client can be restarted by opening and accepting the preferences dialog or reloading/changing the project.&lt;/p&gt;</source>
         <translation>&lt;p&gt;El cliente en background para &lt;b&gt;{0}&lt;/b&gt; se ha detenido debido a una excepción. Éste es utilizado por varios plug-ins como los distintos comprobadores.&lt;/p&gt;&lt;p&gt;Seleccionar&lt;ul&gt;&lt;li&gt;&lt;b&gt;&apos;Si&apos;&lt;/b&gt; para reiniciar el cliente, abortando el último trabajo&lt;/li&gt;&lt;li&gt;&lt;b&gt;&apos;Reintentar&apos;&lt;/b&gt; para reiniciar el cliente y el último trabajo&lt;/li&gt;&lt;li&gt;&lt;b&gt;&apos;No&apos;&lt;/b&gt; para dejar el cliente sin iniciar.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;Nota: El cliente se puede reiniciar abriendo y aceptando el diálogo de preferencias o recargando/cambiando el proyecto.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="426"/>
+        <location filename="../Utilities/BackgroundService.py" line="428"/>
         <source>The background client for &lt;b&gt;{0}&lt;/b&gt; disconnected because of an unknown reason.&lt;br&gt;Should it be restarted?</source>
         <translation>El cliente en background para &lt;b&gt;{0}&lt;/b&gt; ha desconectado por razón desconocida.&lt;br&gt;¿Reiniciarlo?</translation>
     </message>
@@ -9231,652 +9231,652 @@
 <context>
     <name>Editor</name>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2890"/>
+        <location filename="../QScintilla/Editor.py" line="2889"/>
         <source>Open File</source>
         <translation>Abrir archivo</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="668"/>
+        <location filename="../QScintilla/Editor.py" line="667"/>
         <source>Undo</source>
         <translation>Deshacer</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="671"/>
+        <location filename="../QScintilla/Editor.py" line="670"/>
         <source>Redo</source>
         <translation>Rehacer</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="674"/>
+        <location filename="../QScintilla/Editor.py" line="673"/>
         <source>Revert to last saved state</source>
         <translation>Volver al último estado guardado</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="678"/>
+        <location filename="../QScintilla/Editor.py" line="677"/>
         <source>Cut</source>
         <translation>Cortar</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="681"/>
+        <location filename="../QScintilla/Editor.py" line="680"/>
         <source>Copy</source>
         <translation>Copiar</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="684"/>
+        <location filename="../QScintilla/Editor.py" line="683"/>
         <source>Paste</source>
         <translation>Pegar</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="689"/>
+        <location filename="../QScintilla/Editor.py" line="688"/>
         <source>Indent</source>
         <translation>Indentar</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="692"/>
+        <location filename="../QScintilla/Editor.py" line="691"/>
         <source>Unindent</source>
         <translation>Desindentar</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="695"/>
+        <location filename="../QScintilla/Editor.py" line="694"/>
         <source>Comment</source>
         <translation>Pasar a comentario</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="698"/>
+        <location filename="../QScintilla/Editor.py" line="697"/>
         <source>Uncomment</source>
         <translation>Sacar de comentario</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="701"/>
+        <location filename="../QScintilla/Editor.py" line="700"/>
         <source>Stream Comment</source>
         <translation>Bloque de comentario</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="704"/>
+        <location filename="../QScintilla/Editor.py" line="703"/>
         <source>Box Comment</source>
         <translation>Caja de comentario</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="708"/>
+        <location filename="../QScintilla/Editor.py" line="707"/>
         <source>Select to brace</source>
         <translation>Seleccionar hasta la llave ( &apos;{&apos; o &apos;}&apos; )</translation>
     </message>
     <message>
+        <location filename="../QScintilla/Editor.py" line="709"/>
+        <source>Select all</source>
+        <translation>Seleccionar todo</translation>
+    </message>
+    <message>
         <location filename="../QScintilla/Editor.py" line="710"/>
-        <source>Select all</source>
-        <translation>Seleccionar todo</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="711"/>
         <source>Deselect all</source>
         <translation>Deseleccionar todo</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="725"/>
+        <location filename="../QScintilla/Editor.py" line="724"/>
         <source>Shorten empty lines</source>
         <translation>Acortar las líneas vacías</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="732"/>
+        <location filename="../QScintilla/Editor.py" line="731"/>
         <source>Use Monospaced Font</source>
         <translation>Usar fuente monoespaciada</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="737"/>
+        <location filename="../QScintilla/Editor.py" line="736"/>
         <source>Autosave enabled</source>
         <translation>Autoguardar habilitado</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="778"/>
+        <location filename="../QScintilla/Editor.py" line="777"/>
         <source>Close</source>
         <translation>Cerrar</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="784"/>
+        <location filename="../QScintilla/Editor.py" line="783"/>
         <source>Save</source>
         <translation>Guardar</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="787"/>
+        <location filename="../QScintilla/Editor.py" line="786"/>
         <source>Save As...</source>
         <translation>Guardar como...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="803"/>
+        <location filename="../QScintilla/Editor.py" line="802"/>
         <source>Print</source>
         <translation>Imprimir</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="829"/>
+        <location filename="../QScintilla/Editor.py" line="828"/>
         <source>Complete from Document</source>
         <translation>Completar desde documento</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="831"/>
+        <location filename="../QScintilla/Editor.py" line="830"/>
         <source>Complete from APIs</source>
         <translation>Completar desde APIs</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="833"/>
+        <location filename="../QScintilla/Editor.py" line="832"/>
         <source>Complete from Document and APIs</source>
         <translation>Completar desde Documento y APIs</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="847"/>
+        <location filename="../QScintilla/Editor.py" line="846"/>
         <source>Check</source>
         <translation>Verificar</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="867"/>
+        <location filename="../QScintilla/Editor.py" line="866"/>
         <source>Show</source>
         <translation>Mostrar</translation>
     </message>
     <message>
+        <location filename="../QScintilla/Editor.py" line="868"/>
+        <source>Code metrics...</source>
+        <translation>Métricas de código...</translation>
+    </message>
+    <message>
         <location filename="../QScintilla/Editor.py" line="869"/>
-        <source>Code metrics...</source>
-        <translation>Métricas de código...</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="870"/>
         <source>Code coverage...</source>
         <translation>Cobertura de código...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="872"/>
+        <location filename="../QScintilla/Editor.py" line="871"/>
         <source>Show code coverage annotations</source>
         <translation>Mostrar anotaciones de cobertura de codigo</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="875"/>
+        <location filename="../QScintilla/Editor.py" line="874"/>
         <source>Hide code coverage annotations</source>
         <translation>Ocultar anotaciones de cobertura de codigo</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="878"/>
+        <location filename="../QScintilla/Editor.py" line="877"/>
         <source>Profile data...</source>
         <translation>Datos de profiling...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="891"/>
+        <location filename="../QScintilla/Editor.py" line="890"/>
         <source>Diagrams</source>
         <translation>Diagramas</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="893"/>
+        <location filename="../QScintilla/Editor.py" line="892"/>
         <source>Class Diagram...</source>
         <translation>Diagrama de clases...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="895"/>
+        <location filename="../QScintilla/Editor.py" line="894"/>
         <source>Package Diagram...</source>
         <translation>Diagrama de paquetes...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="897"/>
+        <location filename="../QScintilla/Editor.py" line="896"/>
         <source>Imports Diagram...</source>
         <translation>Diagrama de imports...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="899"/>
+        <location filename="../QScintilla/Editor.py" line="898"/>
         <source>Application Diagram...</source>
         <translation>Diagrama de aplicación...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="917"/>
+        <location filename="../QScintilla/Editor.py" line="916"/>
         <source>Languages</source>
         <translation>Lenguajes</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="920"/>
+        <location filename="../QScintilla/Editor.py" line="919"/>
         <source>No Language</source>
         <translation>Ningún Lenguaje</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1040"/>
+        <location filename="../QScintilla/Editor.py" line="1039"/>
         <source>Export as</source>
         <translation>Exportar como</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1163"/>
+        <location filename="../QScintilla/Editor.py" line="1162"/>
         <source>Toggle bookmark</source>
         <translation>Alternar marcador</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1165"/>
+        <location filename="../QScintilla/Editor.py" line="1164"/>
         <source>Next bookmark</source>
         <translation>Nuevo marcador</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1167"/>
+        <location filename="../QScintilla/Editor.py" line="1166"/>
         <source>Previous bookmark</source>
         <translation>Marcador anterior</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1169"/>
+        <location filename="../QScintilla/Editor.py" line="1168"/>
         <source>Clear all bookmarks</source>
         <translation>Borrar todos los marcadores</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1172"/>
+        <location filename="../QScintilla/Editor.py" line="1171"/>
         <source>Goto syntax error</source>
         <translation>Ir al error de sintaxis</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1174"/>
+        <location filename="../QScintilla/Editor.py" line="1173"/>
         <source>Show syntax error message</source>
         <translation>Ver el mensaje de error de sintaxis</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1176"/>
+        <location filename="../QScintilla/Editor.py" line="1175"/>
         <source>Clear syntax error</source>
         <translation>Borrar error de sintaxis</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1189"/>
+        <location filename="../QScintilla/Editor.py" line="1188"/>
         <source>Toggle breakpoint</source>
         <translation>Alternar punto de interrupción</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1191"/>
+        <location filename="../QScintilla/Editor.py" line="1190"/>
         <source>Toggle temporary breakpoint</source>
         <translation>Alternar punto de interrupción temporal</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1194"/>
+        <location filename="../QScintilla/Editor.py" line="1193"/>
         <source>Edit breakpoint...</source>
         <translation>Editar punto de interrupción...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5178"/>
+        <location filename="../QScintilla/Editor.py" line="5083"/>
         <source>Enable breakpoint</source>
         <translation>Activar punto de interrupción</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1199"/>
+        <location filename="../QScintilla/Editor.py" line="1198"/>
         <source>Next breakpoint</source>
         <translation>Siguiente punto de interrupción</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1201"/>
+        <location filename="../QScintilla/Editor.py" line="1200"/>
         <source>Previous breakpoint</source>
         <translation>Punto de interrupción anterior</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1203"/>
+        <location filename="../QScintilla/Editor.py" line="1202"/>
         <source>Clear all breakpoints</source>
         <translation>Borrar todos los puntos de interrupción</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1206"/>
+        <location filename="../QScintilla/Editor.py" line="1205"/>
         <source>Next uncovered line</source>
         <translation>Siguiente línea sin cobertura</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1209"/>
+        <location filename="../QScintilla/Editor.py" line="1208"/>
         <source>Previous uncovered line</source>
         <translation>Anterior línea sin cobertura</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1212"/>
+        <location filename="../QScintilla/Editor.py" line="1211"/>
         <source>Next task</source>
         <translation>Nueva tarea</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1214"/>
+        <location filename="../QScintilla/Editor.py" line="1213"/>
         <source>Previous task</source>
         <translation>Tarea anterior</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1223"/>
+        <location filename="../QScintilla/Editor.py" line="1222"/>
         <source>LMB toggles bookmarks</source>
         <translation>LMB (botón izquierdo del ratón) alterna marcadores</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1227"/>
+        <location filename="../QScintilla/Editor.py" line="1226"/>
         <source>LMB toggles breakpoints</source>
         <translation>LMB (botón izquierdo del ratón) alterna puntos de interrupción</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1263"/>
+        <location filename="../QScintilla/Editor.py" line="1262"/>
         <source>Export source</source>
         <translation>Exportar fuente</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1263"/>
+        <location filename="../QScintilla/Editor.py" line="1262"/>
         <source>No export format given. Aborting...</source>
         <translation>No se ha proporcionado un formato de exportación. Abortando...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1764"/>
+        <location filename="../QScintilla/Editor.py" line="1763"/>
         <source>Modification of Read Only file</source>
         <translation>Modificación de un archivo de solo lectura</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1764"/>
+        <location filename="../QScintilla/Editor.py" line="1763"/>
         <source>You are attempting to change a read only file. Please save to a different file first.</source>
         <translation>Usted está intentando modificar un archivo solo lectura. Por favor guarde en otro archivo primero.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2455"/>
+        <location filename="../QScintilla/Editor.py" line="2454"/>
         <source>Printing...</source>
         <translation>Imprimiendo...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2472"/>
+        <location filename="../QScintilla/Editor.py" line="2471"/>
         <source>Printing completed</source>
         <translation>Impresión completa</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2474"/>
+        <location filename="../QScintilla/Editor.py" line="2473"/>
         <source>Error while printing</source>
         <translation>Error al imprimir</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2477"/>
+        <location filename="../QScintilla/Editor.py" line="2476"/>
         <source>Printing aborted</source>
         <translation>Impresión cancelada</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2835"/>
+        <location filename="../QScintilla/Editor.py" line="2834"/>
         <source>File Modified</source>
         <translation>Archivo modificado</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3053"/>
+        <location filename="../QScintilla/Editor.py" line="3052"/>
         <source>Save File</source>
         <translation>Guardar archivo</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4451"/>
+        <location filename="../QScintilla/Editor.py" line="4449"/>
         <source>Autocompletion</source>
         <translation>Autocompletar</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4451"/>
+        <location filename="../QScintilla/Editor.py" line="4449"/>
         <source>Autocompletion is not available because there is no autocompletion source set.</source>
         <translation>Autocompletar no está disponible porque no hay origen de datos para autocompletar.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5181"/>
+        <location filename="../QScintilla/Editor.py" line="5086"/>
         <source>Disable breakpoint</source>
         <translation>Deshabilitar punto de interrupción</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5555"/>
+        <location filename="../QScintilla/Editor.py" line="5460"/>
         <source>Code Coverage</source>
         <translation>Cobertura de codigo</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5555"/>
+        <location filename="../QScintilla/Editor.py" line="5460"/>
         <source>Please select a coverage file</source>
         <translation>Por favor seleccione un archivo de cobertura</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5618"/>
+        <location filename="../QScintilla/Editor.py" line="5523"/>
         <source>Show Code Coverage Annotations</source>
         <translation>Mostrar Anotaciones de Cobertura de Código</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5611"/>
+        <location filename="../QScintilla/Editor.py" line="5516"/>
         <source>All lines have been covered.</source>
         <translation>Todas las líneas han sido cubiertas.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5618"/>
+        <location filename="../QScintilla/Editor.py" line="5523"/>
         <source>There is no coverage file available.</source>
         <translation>No hay archivo de cobertura disponible.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5733"/>
+        <location filename="../QScintilla/Editor.py" line="5638"/>
         <source>Profile Data</source>
         <translation>Datos de profiling</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5733"/>
+        <location filename="../QScintilla/Editor.py" line="5638"/>
         <source>Please select a profile file</source>
         <translation>Por favor seleccione un archivo de profiling</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5893"/>
+        <location filename="../QScintilla/Editor.py" line="5798"/>
         <source>Syntax Error</source>
         <translation>Error de sintaxis</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5893"/>
+        <location filename="../QScintilla/Editor.py" line="5798"/>
         <source>No syntax error message available.</source>
         <translation>No hay mensajes de error de sintaxis disponibles.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6208"/>
+        <location filename="../QScintilla/Editor.py" line="6113"/>
         <source>Macro Name</source>
         <translation>Nombre de macro</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6208"/>
+        <location filename="../QScintilla/Editor.py" line="6113"/>
         <source>Select a macro name:</source>
         <translation>Seleccione un nombre de macro:</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6236"/>
+        <location filename="../QScintilla/Editor.py" line="6141"/>
         <source>Load macro file</source>
         <translation>Cargar archivo de macro</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6279"/>
+        <location filename="../QScintilla/Editor.py" line="6184"/>
         <source>Macro files (*.macro)</source>
         <translation>Archivos de Macro  (*.macro)</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6259"/>
+        <location filename="../QScintilla/Editor.py" line="6164"/>
         <source>Error loading macro</source>
         <translation>Error al cargar macro</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6279"/>
+        <location filename="../QScintilla/Editor.py" line="6184"/>
         <source>Save macro file</source>
         <translation>Guardar archivo de macro</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6296"/>
+        <location filename="../QScintilla/Editor.py" line="6201"/>
         <source>Save macro</source>
         <translation>Guardar macro</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6312"/>
+        <location filename="../QScintilla/Editor.py" line="6217"/>
         <source>Error saving macro</source>
         <translation>Error al guardar macro</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6325"/>
+        <location filename="../QScintilla/Editor.py" line="6230"/>
         <source>Start Macro Recording</source>
         <translation>Comenzar grabación de macro</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6325"/>
+        <location filename="../QScintilla/Editor.py" line="6230"/>
         <source>Macro recording is already active. Start new?</source>
         <translation>Grabación de macro ya está activada. ¿Comenzar una nueva?</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6351"/>
+        <location filename="../QScintilla/Editor.py" line="6256"/>
         <source>Macro Recording</source>
         <translation>Grabando macro</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6351"/>
+        <location filename="../QScintilla/Editor.py" line="6256"/>
         <source>Enter name of the macro:</source>
         <translation>Introduzca el nombre de la macro:</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6489"/>
+        <location filename="../QScintilla/Editor.py" line="6394"/>
         <source>File changed</source>
         <translation>Archivo modificado</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6793"/>
+        <location filename="../QScintilla/Editor.py" line="6698"/>
         <source>Drop Error</source>
         <translation>Error al soltar</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6814"/>
+        <location filename="../QScintilla/Editor.py" line="6719"/>
         <source>Resources</source>
         <translation>Recursos</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6816"/>
+        <location filename="../QScintilla/Editor.py" line="6721"/>
         <source>Add file...</source>
         <translation>Añadir archivo...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6818"/>
+        <location filename="../QScintilla/Editor.py" line="6723"/>
         <source>Add files...</source>
         <translation>Añadir archivos...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6820"/>
+        <location filename="../QScintilla/Editor.py" line="6725"/>
         <source>Add aliased file...</source>
         <translation>Añadir archivo con un alias...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6823"/>
+        <location filename="../QScintilla/Editor.py" line="6728"/>
         <source>Add localized resource...</source>
         <translation>Añadir recursos localizados...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6827"/>
+        <location filename="../QScintilla/Editor.py" line="6732"/>
         <source>Add resource frame</source>
         <translation>Añadir ventana de recursos</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6846"/>
+        <location filename="../QScintilla/Editor.py" line="6751"/>
         <source>Add file resource</source>
         <translation>Añadir archivo de recursos</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6862"/>
+        <location filename="../QScintilla/Editor.py" line="6767"/>
         <source>Add file resources</source>
         <translation>Añadir archivo de recursos</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6890"/>
+        <location filename="../QScintilla/Editor.py" line="6795"/>
         <source>Add aliased file resource</source>
         <translation>Añadir archivo de recursos con un alias</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6954"/>
+        <location filename="../QScintilla/Editor.py" line="6859"/>
         <source>Package Diagram</source>
         <translation>Digrama de paquetes</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6954"/>
+        <location filename="../QScintilla/Editor.py" line="6859"/>
         <source>Include class attributes?</source>
         <translation>¿Incluir atributos de clase?</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6974"/>
+        <location filename="../QScintilla/Editor.py" line="6879"/>
         <source>Imports Diagram</source>
         <translation>Diagrama de imports</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6974"/>
+        <location filename="../QScintilla/Editor.py" line="6879"/>
         <source>Include imports from external modules?</source>
         <translation>¿Incluir los imports de módulos externos?</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6988"/>
+        <location filename="../QScintilla/Editor.py" line="6893"/>
         <source>Application Diagram</source>
         <translation>Diagrama de aplicación</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6988"/>
+        <location filename="../QScintilla/Editor.py" line="6893"/>
         <source>Include module names?</source>
         <translation>¿Incluir nombres de módulos?</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="756"/>
+        <location filename="../QScintilla/Editor.py" line="755"/>
         <source>Calltip</source>
         <translation>Consejo de llamada</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="800"/>
+        <location filename="../QScintilla/Editor.py" line="799"/>
         <source>Print Preview</source>
         <translation>Presentación preliminar</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="410"/>
+        <location filename="../QScintilla/Editor.py" line="409"/>
         <source>&lt;b&gt;A Source Editor Window&lt;/b&gt;&lt;p&gt;This window is used to display and edit a source file.  You can open as many of these as you like. The name of the file is displayed in the window&apos;s titlebar.&lt;/p&gt;&lt;p&gt;In order to set breakpoints just click in the space between the line numbers and the fold markers. Via the context menu of the margins they may be edited.&lt;/p&gt;&lt;p&gt;In order to set bookmarks just Shift click in the space between the line numbers and the fold markers.&lt;/p&gt;&lt;p&gt;These actions can be reversed via the context menu.&lt;/p&gt;&lt;p&gt;Ctrl clicking on a syntax error marker shows some info about this error.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Una Ventana de Edición de Códigos Fuente&lt;/b&gt;&lt;p&gt;Esta ventana se utiliza para mostrar y editar un archivo de código fuente.  Puede abrir tantas como desee. El nombre del archivo se muestra en la barra de título de la ventana.&lt;/p&gt;&lt;p&gt;Para insertar puntos de interrupción basta con hacer un click en el espacio entre los números de línea y los marcadores de plegado.  Pueden editarse con el menú de contexto de los márgenes.&lt;/p&gt;&lt;p&gt;Para insertar marcadores solo hay que hacer Shift-click en el espacio entre los números de línea y los marcadores de plegado.&lt;/p&gt;&lt;p&gt;Estas acciones se pueden revertir utilizando el menú de contexto.&lt;/p&gt;&lt;p&gt;Haciendo Ctrl-click en un marcador de error sintáctico se muestra información sobre el dicho error.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="741"/>
+        <location filename="../QScintilla/Editor.py" line="740"/>
         <source>Typing aids enabled</source>
         <translation>Ayudas al tecleo habilitadas</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1004"/>
+        <location filename="../QScintilla/Editor.py" line="1003"/>
         <source>End-of-Line Type</source>
         <translation>Tipo de fin-de-línea</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1008"/>
+        <location filename="../QScintilla/Editor.py" line="1007"/>
         <source>Unix</source>
         <translation>Unix</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1015"/>
+        <location filename="../QScintilla/Editor.py" line="1014"/>
         <source>Windows</source>
         <translation>Windows</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1022"/>
+        <location filename="../QScintilla/Editor.py" line="1021"/>
         <source>Macintosh</source>
         <translation>Macintosh</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="963"/>
+        <location filename="../QScintilla/Editor.py" line="962"/>
         <source>Encodings</source>
         <translation>Codificaciones</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="943"/>
+        <location filename="../QScintilla/Editor.py" line="942"/>
         <source>Guessed</source>
         <translation>Suposición</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1278"/>
+        <location filename="../QScintilla/Editor.py" line="1277"/>
         <source>Alternatives</source>
         <translation>Alternativas</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1294"/>
+        <location filename="../QScintilla/Editor.py" line="1293"/>
         <source>Pygments Lexer</source>
         <translation>Analizador Léxico de Pygments</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1294"/>
+        <location filename="../QScintilla/Editor.py" line="1293"/>
         <source>Select the Pygments lexer to apply.</source>
         <translation>Seleccionar el Analizador Léxico de Pygments.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7266"/>
+        <location filename="../QScintilla/Editor.py" line="7171"/>
         <source>Check spelling...</source>
         <translation>Corrección ortográfica...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="717"/>
+        <location filename="../QScintilla/Editor.py" line="716"/>
         <source>Check spelling of selection...</source>
         <translation>Corrección ortográfica de la selección...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7269"/>
+        <location filename="../QScintilla/Editor.py" line="7174"/>
         <source>Add to dictionary</source>
         <translation>Añadir al diccionario</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7271"/>
+        <location filename="../QScintilla/Editor.py" line="7176"/>
         <source>Ignore All</source>
         <translation>Ignorar Todo</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="721"/>
+        <location filename="../QScintilla/Editor.py" line="720"/>
         <source>Remove from dictionary</source>
         <translation>Eliminar del diccionario</translation>
     </message>
@@ -9886,237 +9886,217 @@
         <translation>&lt;p&gt;El tamaño del archivo &lt;b&gt;{0}&lt;/b&gt; es &lt;b&gt;{1} KB&lt;/b&gt;. ¿Desea cargarlo de todos modos?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1255"/>
+        <location filename="../QScintilla/Editor.py" line="1254"/>
         <source>&lt;p&gt;No exporter available for the export format &lt;b&gt;{0}&lt;/b&gt;. Aborting...&lt;/p&gt;</source>
         <translation>&lt;p&gt;No hay un exportador disponible para el formato de exportación &lt;b&gt;{0}&lt;/b&gt;. Abortando...&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1274"/>
+        <location filename="../QScintilla/Editor.py" line="1273"/>
         <source>Alternatives ({0})</source>
         <translation>Alternativas ({0})</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2835"/>
+        <location filename="../QScintilla/Editor.py" line="2834"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has unsaved changes.&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; tiene cambios sin guardar.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2890"/>
+        <location filename="../QScintilla/Editor.py" line="2889"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be opened.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo&lt;b&gt;{0}&lt;/b&gt; no puede ser abierto.&lt;br /&gt;Causa: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2994"/>
+        <location filename="../QScintilla/Editor.py" line="2993"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; no puede ser guardado.&lt;br&gt;Causa: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6250"/>
+        <location filename="../QScintilla/Editor.py" line="6155"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo de macro &lt;b&gt;{0}&lt;/b&gt; no se puede leer.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6259"/>
+        <location filename="../QScintilla/Editor.py" line="6164"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo de macro &lt;b&gt;{0}&lt;/b&gt; está dañado&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6312"/>
+        <location filename="../QScintilla/Editor.py" line="6217"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo de macro  &lt;b&gt;{0}&lt;/b&gt; no se puede escribir.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6653"/>
+        <location filename="../QScintilla/Editor.py" line="6558"/>
         <source>{0} (ro)</source>
         <translation>{0} (ro)</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6793"/>
+        <location filename="../QScintilla/Editor.py" line="6698"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; no es un archivo.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6890"/>
+        <location filename="../QScintilla/Editor.py" line="6795"/>
         <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
         <translation>Alias para el archivo &lt;b&gt;{0}&lt;/b&gt;:</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1179"/>
+        <location filename="../QScintilla/Editor.py" line="1178"/>
         <source>Next warning</source>
         <translation>Siguiente advertencia</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1182"/>
+        <location filename="../QScintilla/Editor.py" line="1181"/>
         <source>Previous warning</source>
         <translation>Anterior advertencia</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1184"/>
+        <location filename="../QScintilla/Editor.py" line="1183"/>
         <source>Show warning message</source>
         <translation>Mostrar mensaje de advertencia</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1186"/>
+        <location filename="../QScintilla/Editor.py" line="1185"/>
         <source>Clear warnings</source>
         <translation>Limpiar advertencias</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3053"/>
+        <location filename="../QScintilla/Editor.py" line="3052"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; ya existe. ¿Desea sobreescribirlo?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6296"/>
+        <location filename="../QScintilla/Editor.py" line="6201"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo de macro &lt;b&gt;{0}&lt;/b&gt; ya existe. ¿Desea sobreescribirlo?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6147"/>
+        <location filename="../QScintilla/Editor.py" line="6052"/>
         <source>Warning: {0}</source>
         <translation>Advertencia: {0}</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6154"/>
+        <location filename="../QScintilla/Editor.py" line="6059"/>
         <source>Error: {0}</source>
         <translation>Error: {0}</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6485"/>
+        <location filename="../QScintilla/Editor.py" line="6390"/>
         <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reopening it.</source>
         <translation>&lt;br&gt;&lt;b&gt;Advertencia:&lt;/b&gt; Perderá los cambios si lo reabre.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4556"/>
-        <source>Activating Auto-Completion Provider</source>
-        <translation>Activando el Proveedor de Autocompletado</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="4556"/>
-        <source>Auto-completion provider cannot be connected because there is already another one active. Please check your configuration.</source>
-        <translation>El proveedor de autocompletado no puede ser conectado porque ya hay uno activo. Por favor revise la configuración.</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="4876"/>
-        <source>Activating Calltip Provider</source>
-        <translation>Activando Proveedor de Calltip</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="4876"/>
-        <source>Calltip provider cannot be connected because there is already another one active. Please check your configuration.</source>
-        <translation>El proveedor de calltip no puede ser conectado porque ya hay uno activo. Por favor revise la configuración.</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="796"/>
+        <location filename="../QScintilla/Editor.py" line="795"/>
         <source>Open &apos;rejection&apos; file</source>
         <translation>Abrir archivo &apos;de rechazo&apos;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="903"/>
+        <location filename="../QScintilla/Editor.py" line="902"/>
         <source>Load Diagram...</source>
         <translation>Cargar Diagrama...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1217"/>
+        <location filename="../QScintilla/Editor.py" line="1216"/>
         <source>Next change</source>
         <translation>Siguiente cambio</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1220"/>
+        <location filename="../QScintilla/Editor.py" line="1219"/>
         <source>Previous change</source>
         <translation>Cambio anterior</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7683"/>
+        <location filename="../QScintilla/Editor.py" line="7588"/>
         <source>Sort Lines</source>
         <translation>Ordenar Líneas</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7683"/>
+        <location filename="../QScintilla/Editor.py" line="7588"/>
         <source>The selection contains illegal data for a numerical sort.</source>
         <translation>La selección contiene datos ilegales para una ordenación numérica.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6083"/>
+        <location filename="../QScintilla/Editor.py" line="5988"/>
         <source>Warning</source>
         <translation>Advertencia</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6083"/>
+        <location filename="../QScintilla/Editor.py" line="5988"/>
         <source>No warning messages available.</source>
         <translation>No hay mensajes de advertencia disponibles.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6144"/>
+        <location filename="../QScintilla/Editor.py" line="6049"/>
         <source>Style: {0}</source>
         <translation>Estilo: {0}</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="770"/>
+        <location filename="../QScintilla/Editor.py" line="769"/>
         <source>New Document View</source>
         <translation>Nueva Vista de Documento</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="773"/>
+        <location filename="../QScintilla/Editor.py" line="772"/>
         <source>New Document View (with new split)</source>
         <translation>Nueva Vista de Documento (con nueva división)</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="857"/>
+        <location filename="../QScintilla/Editor.py" line="856"/>
         <source>Tools</source>
         <translation>Herramientas</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="985"/>
+        <location filename="../QScintilla/Editor.py" line="984"/>
         <source>Re-Open With Encoding</source>
         <translation>Reabrir Con Codificación</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6479"/>
+        <location filename="../QScintilla/Editor.py" line="6384"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric6. Reread it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; ha cambiado mientras estaba abierto en eric6. ¿Desea volver a cargarlo?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="748"/>
+        <location filename="../QScintilla/Editor.py" line="747"/>
         <source>Automatic Completion enabled</source>
         <translation>Autocompletar habilitado</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="826"/>
+        <location filename="../QScintilla/Editor.py" line="825"/>
         <source>Complete</source>
         <translation>Completo</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4605"/>
+        <location filename="../QScintilla/Editor.py" line="4558"/>
         <source>Auto-Completion Provider</source>
         <translation>Proveedor de Autocompletado</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4605"/>
+        <location filename="../QScintilla/Editor.py" line="4558"/>
         <source>The completion list provider &apos;{0}&apos; was already registered. Ignoring duplicate request.</source>
         <translation>El proveedor de lista de completado&apos;{0}&apos; ya está registrado. Se ignora la solicitud duplicada.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4919"/>
+        <location filename="../QScintilla/Editor.py" line="4825"/>
         <source>Call-Tips Provider</source>
         <translation>Proveedor de Call-Tips</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4919"/>
+        <location filename="../QScintilla/Editor.py" line="4825"/>
         <source>The call-tips provider &apos;{0}&apos; was already registered. Ignoring duplicate request.</source>
         <translation>El proveedor de call-tips&apos;{0}&apos; ya está registrado. Se ignora la solicitud duplicada.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7770"/>
+        <location filename="../QScintilla/Editor.py" line="7675"/>
         <source>Register Mouse Click Handler</source>
         <translation>Registrar Manejador de Clicks de Ratón</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7770"/>
+        <location filename="../QScintilla/Editor.py" line="7675"/>
         <source>A mouse click handler for &quot;{0}&quot; was already registered by &quot;{1}&quot;. Aborting request by &quot;{2}&quot;...</source>
         <translation>Un manejador de clicks de ratón para &quot;{0}&quot; ya está registrado por &quot;{1}&quot;. Abortando solicitud por &quot;{2}&quot;...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="790"/>
+        <location filename="../QScintilla/Editor.py" line="789"/>
         <source>Save Copy...</source>
         <translation>Guardar Copia...</translation>
     </message>
@@ -24917,12 +24897,12 @@
         <translation>Cambiar Fase</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2075"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2076"/>
         <source>Copy Changesets</source>
         <translation>Copiar Changesets</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2391"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2392"/>
         <source>The project should be reread. Do this now?</source>
         <translation>El proyecto debería ser cargado de nuevo. ¿Desea hacerlo ahora?</translation>
     </message>
@@ -24947,7 +24927,7 @@
         <translation>Aplicar Tag a la revisión seleccionada</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2127"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2128"/>
         <source>Switch</source>
         <translation>Hacer switch</translation>
     </message>
@@ -25012,12 +24992,12 @@
         <translation>&lt;tr&gt;&lt;td&gt;&lt;b&gt;Marcadores&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2531"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2532"/>
         <source>Find Commit</source>
         <translation>Buscar Commit</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2531"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2532"/>
         <source>&apos;{0}&apos; was not found.</source>
         <translation>&apos;{0}&apos; no se ha encontrado.</translation>
     </message>
@@ -25042,7 +25022,7 @@
         <translation>Secreto</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2258"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2259"/>
         <source>Pull Changes</source>
         <translation>Hacer Pull de Cambios</translation>
     </message>
@@ -25072,12 +25052,12 @@
         <translation>Hacer push de todos los cambios a un repositorio remoto</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2222"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2223"/>
         <source>Fetch Changes</source>
         <translation>Fetch (recuperación) de cambios</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2301"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2302"/>
         <source>Strip Changesets</source>
         <translation>Hacer strip de Changesets</translation>
     </message>
@@ -25112,27 +25092,27 @@
         <translation>Mover marcador a la revisión seleccionada</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2148"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2149"/>
         <source>Define Bookmark</source>
         <translation>Definir Marcador</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2148"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2149"/>
         <source>Enter bookmark name for changeset &quot;{0}&quot;:</source>
         <translation>Introducir nombre de marcador para el changeset &quot;{0}&quot;:</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2170"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2171"/>
         <source>Move Bookmark</source>
         <translation>Mover Marcador</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2170"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2171"/>
         <source>Select the bookmark to be moved  to changeset &quot;{0}&quot;:</source>
         <translation>Seleccionar el marcador a mover al changeset &quot;{0}&quot;:</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2113"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2114"/>
         <source>Select bookmark to switch to (leave empty to use revision):</source>
         <translation>Seleccionar marcador al que cambiar (dejar vacío para usar revisión):</translation>
     </message>
@@ -25194,7 +25174,7 @@
 &lt;p&gt;Esto crea un archivo de changegroup que contiene las revisiones seleccionadas. Si no se han seleccionado revisiones, se incluirán todos los changesets. Si se ha seleccionado una revisión, se tomará como revisión base. En cualquier otro lugar, la revisión más baja se usará como revisión base y todas las otras revisiones se incluirán en el archivo. Si el diálogo muestra changesets salientes, todos los changesets seleccionados se incluirán en el archivo.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2391"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2392"/>
         <source>Apply Changegroup</source>
         <translation>Aplicar Changegroup</translation>
     </message>
@@ -25254,42 +25234,42 @@
         <translation>Hacer Fetch de Cambios Seleccionados</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2575"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2576"/>
         <source>Differences</source>
         <translation>Diferencias</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2585"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2586"/>
         <source>Differences to Parent {0}</source>
         <translation>Diferencias con el Parent {0}</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2601"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2602"/>
         <source>Diff to Parent {0}{1}</source>
         <translation>Diff con el Parent {0}{1}</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2626"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2627"/>
         <source>There is no difference.</source>
         <translation>No hay ninguna diferencia.</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2769"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2770"/>
         <source>Save Diff</source>
         <translation>Guardar Diff</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2736"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2737"/>
         <source>Patch Files (*.diff)</source>
         <translation>Archivos de Parche (*.diff)</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2753"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2754"/>
         <source>&lt;p&gt;The patch file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo de parche &lt;b&gt;{0}&lt;/b&gt; ya existe. ¿Desea sobreescribirlo?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2769"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2770"/>
         <source>&lt;p&gt;The patch file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;El archivo de parche &lt;b&gt;{0}&lt;/b&gt; no puede ser guardado.&lt;br /&gt;Causa: {1}&lt;/p&gt;</translation>
     </message>
@@ -25299,7 +25279,7 @@
         <translation>&lt;a href=&quot;save:me&quot;&gt;Guardar&lt;/a&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2574"/>
+        <location filename="../Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py" line="2575"/>
         <source>Generating differences ...</source>
         <translation>Generando diferencias ...</translation>
     </message>
@@ -35826,6 +35806,149 @@
     </message>
 </context>
 <context>
+    <name>ManageDictionariesDialog</name>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="14"/>
+        <source>Spell Check Dictionaries</source>
+        <translation>Diccionarios de Corrección Ortográfica</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="25"/>
+        <source>Installation Location:</source>
+        <translation>Ubicación de la Instalación:</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="38"/>
+        <source>Select the location for the dictionaries installation</source>
+        <translation>Seleccionar la ubicación de la instalación de los diccionarios</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="47"/>
+        <source>Shows the list of available dictionaries</source>
+        <translation>Muestra la lista de diccionarios disponibles</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="70"/>
+        <source>Shows the progress of the current download</source>
+        <translation>Muestra el progreso de la descarga actual</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="89"/>
+        <source>Dictionaries URL:</source>
+        <translation>URL de los diccionarios:</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="96"/>
+        <source>Shows the dictionaries URL</source>
+        <translation>Muestra la URL de los diccionarios</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="106"/>
+        <source>Press to edit the dictionaries URL</source>
+        <translation>Pulsar para editar la URL de los diccionarios</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="109"/>
+        <source>Edit URL</source>
+        <translation>Editar URL</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="54"/>
+        <source>Refresh</source>
+        <translation>Actualizar</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="56"/>
+        <source>Install Selected</source>
+        <translation>Instalar Seleccionados</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="59"/>
+        <source>Uninstall Selected</source>
+        <translation>Desinstalar Seleccionados</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="62"/>
+        <source>Cancel</source>
+        <translation>Cancelar</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="99"/>
+        <source>Network Status: online</source>
+        <translation>Estado de la Red: en línea</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="101"/>
+        <source>Network Status: offline</source>
+        <translation>Estado de la Red: sin línea</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="201"/>
+        <source>Error populating list of dictionaries</source>
+        <translation>Error al popular la lista de diccionarios</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="391"/>
+        <source>Computer is offline.</source>
+        <translation>El ordenador está sin línea.</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>Error downloading dictionaries list</source>
+        <translation>Error descargando la lista de diccionarios</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation>&lt;p&gt;No se ha podido descargar la lista de diccionarios desde {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>Dictionaries URL Changed</source>
+        <translation>URL de Diccionarios Cambiada</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>The URL of the spell check dictionaries has changed. Select the &quot;Refresh&quot; button to get the new dictionaries list.</source>
+        <translation>La URL de los diccionarios de corrección ortográfica ha cambiado. Seleccionar el botón de &quot;Actualizar&quot; para obtener la nueva lista de diccionarios.</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>Error installing dictionaries</source>
+        <translation>Error instalando los diccionarios</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Ninguna de las ubicaciones para diccionarios tiene permisos de escritura. Por favor, descargue manualmente los diccionarios requeridos e instálelos como administrador.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="312"/>
+        <source>{0} ({1})</source>
+        <translation>{0} ({1})</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>Error downloading dictionary</source>
+        <translation>Error descargando diccionario</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation>&lt;p&gt;No se ha podido descargar el archivo de diccionario requerido de {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>Error downloading dictionary file</source>
+        <translation>Error descargando archivo de diccionario</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;El archivo de diccionario que se ha descargado no es válido. Cancelando.&lt;/p&gt;</translation>
+    </message>
+</context>
+<context>
     <name>MarkdownProvider</name>
     <message>
         <location filename="../QScintilla/MarkupProviders/MarkdownProvider.py" line="383"/>
@@ -39898,22 +40021,22 @@
 Seleccione Actualizar.</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>Error downloading file</source>
         <translation>Error al descargar el fichero</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="584"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="583"/>
         <source>Stable</source>
         <translation>Estable</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="591"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="590"/>
         <source>Unstable</source>
         <translation>Inestable</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="598"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="597"/>
         <source>Unknown</source>
         <translation>Desconocido</translation>
     </message>
@@ -39923,7 +40046,7 @@
         <translation>&lt;p&gt;El archivo de repositorio de plugins &lt;b&gt;{0}&lt;/b&gt; no se ha podido leer. Seleccione Actualizar&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;No se pudo descargar el archivo solicitado desde {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</translation>
     </message>
@@ -39963,32 +40086,32 @@
         <translation>Limpiar Descargas</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="612"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="611"/>
         <source>up-to-date</source>
         <translation>al dia</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="615"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="614"/>
         <source>new download available</source>
         <translation>mueva descarga disponible</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="619"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="618"/>
         <source>update installable</source>
         <translation>actualización instalable</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="623"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="622"/>
         <source>updated download available</source>
         <translation>descarga actualizada disponible</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>Cleanup of Plugin Downloads</source>
         <translation>Limpieza de Descargas de Plugins</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;La descarga del plugin &lt;b&gt;{0}&lt;/b&gt; no se ha podido borrar.&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
     </message>
@@ -40026,17 +40149,17 @@
 <context>
     <name>PluginRepositoryWindow</name>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>Process Generation Error</source>
         <translation>Error de Generación de Proceso</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>OK</source>
         <translation>Aceptar</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;No se ha podido ejecutar el proceso.&lt;br&gt;Asegúrese de que esta disponible como &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
@@ -40110,27 +40233,27 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1592"/>
+        <location filename="../Preferences/__init__.py" line="1595"/>
         <source>Export Preferences</source>
         <translation>Exportar Preferencias</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Import Preferences</source>
         <translation>Importar Preferencias</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation>Archivo de Propiedades (*.ini);;Todos los archivos (*)</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select Python{0} Interpreter</source>
         <translation>Seleccionar intérprete de Python{0}</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select the Python{0} interpreter to be used:</source>
         <translation>Seleccionar el intérprete de Python{0} a utilizar:</translation>
     </message>
@@ -41982,7 +42105,7 @@
 <context>
     <name>ProjectFormsBrowser</name>
     <message>
-        <location filename="../Project/ProjectFormsBrowser.py" line="940"/>
+        <location filename="../Project/ProjectFormsBrowser.py" line="944"/>
         <source>Forms</source>
         <translation>Formularios</translation>
     </message>
@@ -42162,27 +42285,27 @@
         <translation>La compilación del archivo de formulario ha fallado.</translation>
     </message>
     <message>
-        <location filename="../Project/ProjectFormsBrowser.py" line="806"/>
+        <location filename="../Project/ProjectFormsBrowser.py" line="810"/>
         <source>Process Generation Error</source>
         <translation>Error de Generación de Proceso</translation>
     </message>
     <message>
-        <location filename="../Project/ProjectFormsBrowser.py" line="898"/>
+        <location filename="../Project/ProjectFormsBrowser.py" line="902"/>
         <source>Compiling forms...</source>
         <translation>Compilando formularios...</translation>
     </message>
     <message>
-        <location filename="../Project/ProjectFormsBrowser.py" line="898"/>
+        <location filename="../Project/ProjectFormsBrowser.py" line="902"/>
         <source>Abort</source>
         <translation>Abortar</translation>
     </message>
     <message>
-        <location filename="../Project/ProjectFormsBrowser.py" line="936"/>
+        <location filename="../Project/ProjectFormsBrowser.py" line="940"/>
         <source>Determining changed forms...</source>
         <translation>Determinando que formularios han cambiado...</translation>
     </message>
     <message>
-        <location filename="../Project/ProjectFormsBrowser.py" line="965"/>
+        <location filename="../Project/ProjectFormsBrowser.py" line="969"/>
         <source>Compiling changed forms...</source>
         <translation>Compilando formularios que han cambiado...</translation>
     </message>
@@ -42207,7 +42330,7 @@
         <translation>&lt;p&gt;La compilación del archivo de formulario ha fallado.&lt;/p&gt;&lt;p&gt;Causa: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/ProjectFormsBrowser.py" line="806"/>
+        <location filename="../Project/ProjectFormsBrowser.py" line="810"/>
         <source>Could not start {0}.&lt;br&gt;Ensure that it is in the search path.</source>
         <translation>No se ha podido ejecutar {0}.&lt;br&gt;Verifique que está en la ruta de búsqueda (search path).</translation>
     </message>
@@ -42262,7 +42385,7 @@
         <translation>QStackedWidget</translation>
     </message>
     <message>
-        <location filename="../Project/ProjectFormsBrowser.py" line="936"/>
+        <location filename="../Project/ProjectFormsBrowser.py" line="940"/>
         <source>%v/%m Forms</source>
         <translation>%v/%m Formularios</translation>
     </message>
@@ -70648,6 +70771,16 @@
         <source>Dictionary Directories</source>
         <translation>Directorios de Diccionarios</translation>
     </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="122"/>
+        <source>Press to open a dialog to manage spell checking dictionaries</source>
+        <translation>Pulsar para abrir un diálogo para gestionar diccionarios de corrección ortográfica</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="125"/>
+        <source>Manage Dictionaries...</source>
+        <translation>Gestionar Diccionarios...</translation>
+    </message>
 </context>
 <context>
     <name>WebBrowserTabWidget</name>
@@ -73278,30 +73411,35 @@
 <context>
     <name>XMLStreamReaderBase</name>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="60"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="68"/>
         <source>XML parse error</source>
         <translation>Error de interpretación de XML</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="187"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="195"/>
         <source>Pickle data encoding &apos;{0}&apos; is not supported.</source>
         <translation>La codificación de datos de Pickle {0}no está soportada.</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="53"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="54"/>
         <source>&lt;p&gt;XML parse error in file &lt;b&gt;{0}&lt;/b&gt;, line {1}, column {2}&lt;/p&gt;&lt;p&gt;Error: {3}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Error de interpretación de XML en el archivo &lt;b&gt;{0}&lt;/b&gt;, line {1}, column {2}&lt;/p&gt;&lt;p&gt;Error: {3}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="81"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="89"/>
         <source>File format version &apos;{0}&apos; is not supported.</source>
         <translation>La versión {0} del formato de archivo no esta soportada.</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="91"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="99"/>
         <source>Bad value: {0}</source>
         <translation>Valor erróneo: {0}</translation>
     </message>
+    <message>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="62"/>
+        <source>&lt;p&gt;XML parse error (line {0}, column {1})&lt;/p&gt;&lt;p&gt;Error: {2}&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Error de interpretación de XML (línea {0}, columna {1})&lt;/p&gt;&lt;p&gt;Error: {2}&lt;/p&gt;</translation>
+    </message>
 </context>
 <context>
     <name>XbelImporter</name>
--- a/i18n/eric6_fr.ts	Fri Sep 01 12:08:49 2017 +0200
+++ b/i18n/eric6_fr.ts	Tue Oct 03 15:33:11 2017 +0200
@@ -36526,6 +36526,149 @@
     </message>
 </context>
 <context>
+    <name>ManageDictionariesDialog</name>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="14"/>
+        <source>Spell Check Dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="25"/>
+        <source>Installation Location:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="38"/>
+        <source>Select the location for the dictionaries installation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="47"/>
+        <source>Shows the list of available dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="70"/>
+        <source>Shows the progress of the current download</source>
+        <translation type="unfinished">Affiche la progression du téléchargement en cours</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="89"/>
+        <source>Dictionaries URL:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="96"/>
+        <source>Shows the dictionaries URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="106"/>
+        <source>Press to edit the dictionaries URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="109"/>
+        <source>Edit URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="54"/>
+        <source>Refresh</source>
+        <translation type="unfinished">Rafraichir</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="56"/>
+        <source>Install Selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="59"/>
+        <source>Uninstall Selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="62"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Annuler</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="99"/>
+        <source>Network Status: online</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="101"/>
+        <source>Network Status: offline</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="201"/>
+        <source>Error populating list of dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="391"/>
+        <source>Computer is offline.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>Error downloading dictionaries list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>Dictionaries URL Changed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>The URL of the spell check dictionaries has changed. Select the &quot;Refresh&quot; button to get the new dictionaries list.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>Error installing dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="312"/>
+        <source>{0} ({1})</source>
+        <translation type="unfinished">{0}({1})</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>Error downloading dictionary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>Error downloading dictionary file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>MarkdownProvider</name>
     <message>
         <location filename="../QScintilla/MarkupProviders/MarkdownProvider.py" line="383"/>
@@ -40620,22 +40763,22 @@
 Cliquer sur &quot;Mise à jour&quot; pour récupérer la liste des plugins.</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>Error downloading file</source>
         <translation>Erreur de téléchargement</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="584"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="583"/>
         <source>Stable</source>
         <translation>Stable</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="591"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="590"/>
         <source>Unstable</source>
         <translation>Instable</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="598"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="597"/>
         <source>Unknown</source>
         <translation>Inconnu</translation>
     </message>
@@ -40645,7 +40788,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -40685,32 +40828,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="612"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="611"/>
         <source>up-to-date</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="615"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="614"/>
         <source>new download available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="619"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="618"/>
         <source>update installable</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="623"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="622"/>
         <source>updated download available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>Cleanup of Plugin Downloads</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -40748,17 +40891,17 @@
 <context>
     <name>PluginRepositoryWindow</name>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>Process Generation Error</source>
         <translation>Erreur du processus</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -40832,27 +40975,27 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1592"/>
+        <location filename="../Preferences/__init__.py" line="1595"/>
         <source>Export Preferences</source>
         <translation>Export des préférences</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Import Preferences</source>
         <translation>Import des préférences</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select Python{0} Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select the Python{0} interpreter to be used:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -71792,6 +71935,16 @@
         <source>Dictionary Directories</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="122"/>
+        <source>Press to open a dialog to manage spell checking dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="125"/>
+        <source>Manage Dictionaries...</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WebBrowserTabWidget</name>
@@ -74439,30 +74592,35 @@
 <context>
     <name>XMLStreamReaderBase</name>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="60"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="68"/>
         <source>XML parse error</source>
         <translation>Erreur XML</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="187"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="195"/>
         <source>Pickle data encoding &apos;{0}&apos; is not supported.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="53"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="54"/>
         <source>&lt;p&gt;XML parse error in file &lt;b&gt;{0}&lt;/b&gt;, line {1}, column {2}&lt;/p&gt;&lt;p&gt;Error: {3}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="81"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="89"/>
         <source>File format version &apos;{0}&apos; is not supported.</source>
         <translation>La version &apos;{0}&apos; de format de fichier n&apos;est pas supportée.</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="91"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="99"/>
         <source>Bad value: {0}</source>
         <translation>Mauvaise valeur: {0}</translation>
     </message>
+    <message>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="62"/>
+        <source>&lt;p&gt;XML parse error (line {0}, column {1})&lt;/p&gt;&lt;p&gt;Error: {2}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>XbelImporter</name>
--- a/i18n/eric6_it.ts	Fri Sep 01 12:08:49 2017 +0200
+++ b/i18n/eric6_it.ts	Tue Oct 03 15:33:11 2017 +0200
@@ -37009,6 +37009,149 @@
     </message>
 </context>
 <context>
+    <name>ManageDictionariesDialog</name>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="14"/>
+        <source>Spell Check Dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="25"/>
+        <source>Installation Location:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="38"/>
+        <source>Select the location for the dictionaries installation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="47"/>
+        <source>Shows the list of available dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="70"/>
+        <source>Shows the progress of the current download</source>
+        <translation type="unfinished">Mostra l&apos;avanzamento del download attuale</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="89"/>
+        <source>Dictionaries URL:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="96"/>
+        <source>Shows the dictionaries URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="106"/>
+        <source>Press to edit the dictionaries URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="109"/>
+        <source>Edit URL</source>
+        <translation type="unfinished">Modifica URL</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="54"/>
+        <source>Refresh</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="56"/>
+        <source>Install Selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="59"/>
+        <source>Uninstall Selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="62"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Cancella</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="99"/>
+        <source>Network Status: online</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="101"/>
+        <source>Network Status: offline</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="201"/>
+        <source>Error populating list of dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="391"/>
+        <source>Computer is offline.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>Error downloading dictionaries list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>Dictionaries URL Changed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>The URL of the spell check dictionaries has changed. Select the &quot;Refresh&quot; button to get the new dictionaries list.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>Error installing dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="312"/>
+        <source>{0} ({1})</source>
+        <translation type="unfinished">{0} ({1})</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>Error downloading dictionary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>Error downloading dictionary file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>MarkdownProvider</name>
     <message>
         <location filename="../QScintilla/MarkupProviders/MarkdownProvider.py" line="383"/>
@@ -41149,22 +41292,22 @@
 Selezionare Aggiorna.</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>Error downloading file</source>
         <translation>Errone nello scaricamento del file</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="584"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="583"/>
         <source>Stable</source>
         <translation>Stabile</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="591"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="590"/>
         <source>Unstable</source>
         <translation>Instabile</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="598"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="597"/>
         <source>Unknown</source>
         <translation>Sconosciuto</translation>
     </message>
@@ -41174,7 +41317,7 @@
         <translation>&lt;p&gt;I file repository del plugin&lt;b&gt;{0}&lt;/b&gt; non può essere letto. Seleziona aggiorna.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Non posso scaricare il file richiesto da {0}&lt;/p&gt;&lt;p&gt;Errore: {1}&lt;/p&gt;</translation>
     </message>
@@ -41214,32 +41357,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="612"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="611"/>
         <source>up-to-date</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="615"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="614"/>
         <source>new download available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="619"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="618"/>
         <source>update installable</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="623"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="622"/>
         <source>updated download available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>Cleanup of Plugin Downloads</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -41277,17 +41420,17 @@
 <context>
     <name>PluginRepositoryWindow</name>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>Process Generation Error</source>
         <translation>Errore Generazione Processo</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Non posso avviare il processo.&lt;br&gt;Assicurarsi sia disponibile come &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
@@ -41361,27 +41504,27 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1592"/>
+        <location filename="../Preferences/__init__.py" line="1595"/>
         <source>Export Preferences</source>
         <translation>Esporta Preferenze</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Import Preferences</source>
         <translation>Importa Preferenze</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation>File proprietà (*.ini);;Tutti i file(*)</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select Python{0} Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select the Python{0} interpreter to be used:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -72435,6 +72578,16 @@
         <source>Dictionary Directories</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="122"/>
+        <source>Press to open a dialog to manage spell checking dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="125"/>
+        <source>Manage Dictionaries...</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WebBrowserTabWidget</name>
@@ -75088,30 +75241,35 @@
 <context>
     <name>XMLStreamReaderBase</name>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="60"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="68"/>
         <source>XML parse error</source>
         <translation>Errore parsing XML</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="187"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="195"/>
         <source>Pickle data encoding &apos;{0}&apos; is not supported.</source>
         <translation>la Codifica dati Pickle &apos;{0}&apos; non è supportata.</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="53"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="54"/>
         <source>&lt;p&gt;XML parse error in file &lt;b&gt;{0}&lt;/b&gt;, line {1}, column {2}&lt;/p&gt;&lt;p&gt;Error: {3}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Errore di parsing XML nel file &lt;b&gt;{0}&lt;/b&gt;, linea {1}, colonna {2}&lt;/p&gt;&lt;p&gt;Errore: {3}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="81"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="89"/>
         <source>File format version &apos;{0}&apos; is not supported.</source>
         <translation>Il formato file versione {0} non è supportato.</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="91"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="99"/>
         <source>Bad value: {0}</source>
         <translation>Valore errato: {0}</translation>
     </message>
+    <message>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="62"/>
+        <source>&lt;p&gt;XML parse error (line {0}, column {1})&lt;/p&gt;&lt;p&gt;Error: {2}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>XbelImporter</name>
--- a/i18n/eric6_pt.ts	Fri Sep 01 12:08:49 2017 +0200
+++ b/i18n/eric6_pt.ts	Tue Oct 03 15:33:11 2017 +0200
@@ -37193,6 +37193,149 @@
     </message>
 </context>
 <context>
+    <name>ManageDictionariesDialog</name>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="14"/>
+        <source>Spell Check Dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="25"/>
+        <source>Installation Location:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="38"/>
+        <source>Select the location for the dictionaries installation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="47"/>
+        <source>Shows the list of available dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="70"/>
+        <source>Shows the progress of the current download</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="89"/>
+        <source>Dictionaries URL:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="96"/>
+        <source>Shows the dictionaries URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="106"/>
+        <source>Press to edit the dictionaries URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="109"/>
+        <source>Edit URL</source>
+        <translation type="unfinished">Editar URL</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="54"/>
+        <source>Refresh</source>
+        <translation type="unfinished">Atualizar</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="56"/>
+        <source>Install Selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="59"/>
+        <source>Uninstall Selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="62"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Cancelar</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="99"/>
+        <source>Network Status: online</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="101"/>
+        <source>Network Status: offline</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="201"/>
+        <source>Error populating list of dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="391"/>
+        <source>Computer is offline.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>Error downloading dictionaries list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>Dictionaries URL Changed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>The URL of the spell check dictionaries has changed. Select the &quot;Refresh&quot; button to get the new dictionaries list.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>Error installing dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="312"/>
+        <source>{0} ({1})</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>Error downloading dictionary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>Error downloading dictionary file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>MarkdownProvider</name>
     <message>
         <location filename="../QScintilla/MarkupProviders/MarkdownProvider.py" line="383"/>
@@ -41299,27 +41442,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>Error downloading file</source>
         <translation type="unfinished">Erro ao descarregar ficheiro</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="584"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="583"/>
         <source>Stable</source>
         <translation type="unfinished">Estável</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="591"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="590"/>
         <source>Unstable</source>
         <translation type="unfinished">Instável</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="598"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="597"/>
         <source>Unknown</source>
         <translation>Desconhecido</translation>
     </message>
@@ -41359,32 +41502,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="612"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="611"/>
         <source>up-to-date</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="615"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="614"/>
         <source>new download available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="619"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="618"/>
         <source>update installable</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="623"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="622"/>
         <source>updated download available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>Cleanup of Plugin Downloads</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -41422,17 +41565,17 @@
 <context>
     <name>PluginRepositoryWindow</name>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>Process Generation Error</source>
         <translation>Erro na Criação de Processo</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Não pode começar o processo. &lt;br&gt; Assegurar de que está disponível como &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>OK</source>
         <translation></translation>
     </message>
@@ -41506,27 +41649,27 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1592"/>
+        <location filename="../Preferences/__init__.py" line="1595"/>
         <source>Export Preferences</source>
         <translation>Exportar Preferências</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Import Preferences</source>
         <translation>Importar Preferências</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation>Ficheiro de Propriedades (*.ini);;Ficheiros Todos (*)</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select Python{0} Interpreter</source>
         <translation>Selecionar intérprete de Python{0}</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select the Python{0} interpreter to be used:</source>
         <translation>Selecionar o intérprete de Python{0} a usar:</translation>
     </message>
@@ -72173,6 +72316,16 @@
         <source>Dictionary Directories</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="122"/>
+        <source>Press to open a dialog to manage spell checking dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="125"/>
+        <source>Manage Dictionaries...</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WebBrowserTabWidget</name>
@@ -74831,30 +74984,35 @@
 <context>
     <name>XMLStreamReaderBase</name>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="53"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="54"/>
         <source>&lt;p&gt;XML parse error in file &lt;b&gt;{0}&lt;/b&gt;, line {1}, column {2}&lt;/p&gt;&lt;p&gt;Error: {3}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="60"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="68"/>
         <source>XML parse error</source>
         <translation>erro de análise XML</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="81"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="89"/>
         <source>File format version &apos;{0}&apos; is not supported.</source>
         <translation>Versão {0} do formato de ficheiro não é suportada.</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="91"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="99"/>
         <source>Bad value: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="187"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="195"/>
         <source>Pickle data encoding &apos;{0}&apos; is not supported.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="62"/>
+        <source>&lt;p&gt;XML parse error (line {0}, column {1})&lt;/p&gt;&lt;p&gt;Error: {2}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>XbelImporter</name>
Binary file i18n/eric6_ru.qm has changed
--- a/i18n/eric6_ru.ts	Fri Sep 01 12:08:49 2017 +0200
+++ b/i18n/eric6_ru.ts	Tue Oct 03 15:33:11 2017 +0200
@@ -1443,32 +1443,32 @@
         <translation>{0} не сконфигурирован.</translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="183"/>
+        <location filename="../Utilities/BackgroundService.py" line="185"/>
         <source>Restart background client?</source>
         <translation>Перезапустить клиента в фоновом режиме?</translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="209"/>
+        <location filename="../Utilities/BackgroundService.py" line="211"/>
         <source>An error in Erics background client stopped the service.</source>
         <translation>Ошибка фонового клиента остановила сервис.</translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="420"/>
+        <location filename="../Utilities/BackgroundService.py" line="422"/>
         <source>Erics background client disconnected because of an unknown reason.</source>
         <translation>Фоновый клиент прервал соединение по неизвестной причине.</translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="426"/>
+        <location filename="../Utilities/BackgroundService.py" line="428"/>
         <source>Background client disconnected.</source>
         <translation>Соединение фонового клиента прервано.</translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="183"/>
+        <location filename="../Utilities/BackgroundService.py" line="185"/>
         <source>&lt;p&gt;The background client for &lt;b&gt;{0}&lt;/b&gt; has stopped due to an exception. It&apos;s used by various plug-ins like the different checkers.&lt;/p&gt;&lt;p&gt;Select&lt;ul&gt;&lt;li&gt;&lt;b&gt;&apos;Yes&apos;&lt;/b&gt; to restart the client, but abort the last job&lt;/li&gt;&lt;li&gt;&lt;b&gt;&apos;Retry&apos;&lt;/b&gt; to restart the client and the last job&lt;/li&gt;&lt;li&gt;&lt;b&gt;&apos;No&apos;&lt;/b&gt; to leave the client off.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;Note: The client can be restarted by opening and accepting the preferences dialog or reloading/changing the project.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Фоновый клиент &lt;b&gt;{0}&lt;/b&gt; прекратил выполнение из-за ошибки. Этот клиент необходим для работы различных плагинов.&lt;/p&gt;&lt;p&gt;Выберите &lt;ul&gt;&lt;li&gt;&lt;b&gt;&apos;Да&apos;&lt;/b&gt; чтобы перезапустить его и отменить последнее задание &lt;/li&gt;&lt;li&gt;&lt;b&gt;&apos;Повторить&apos;&lt;/b&gt; чтобы перезапустить его и последнее задание &lt;/li&gt;&lt;li&gt;&lt;b&gt;&apos;Нет&apos;&lt;/b&gt; чтобы не перезапускать клиента.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;Заметьте: Клиента можно перезапустить, открыв и сохранив диалог настроек или закрыв и снова открыв текущий проект.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="426"/>
+        <location filename="../Utilities/BackgroundService.py" line="428"/>
         <source>The background client for &lt;b&gt;{0}&lt;/b&gt; disconnected because of an unknown reason.&lt;br&gt;Should it be restarted?</source>
         <translation>Соединение фонового клиента &lt;b&gt;{0}&lt;/b&gt; прервано по неизвестной причине.&lt;br&gt;Перезапустить клиента?</translation>
     </message>
@@ -6611,17 +6611,17 @@
     <message>
         <location filename="../Debugger/DebuggerInterfacePython.py" line="846"/>
         <source>Client forking</source>
-        <translation>Порождение процесса</translation>
+        <translation>Разветвление процесса</translation>
     </message>
     <message>
         <location filename="../Debugger/DebuggerInterfacePython.py" line="846"/>
         <source>Select the fork branch to follow.</source>
-        <translation>Выберите, какой процесс отслеживать - родительский или порожденный.</translation>
+        <translation>Выберите fork-ветку для отслеживания.</translation>
     </message>
     <message>
         <location filename="../Debugger/DebuggerInterfacePython.py" line="891"/>
         <source>Debug Protocol Error</source>
-        <translation>Debug Protocol Error</translation>
+        <translation>Протокол ошибок отладки</translation>
     </message>
     <message>
         <location filename="../Debugger/DebuggerInterfacePython.py" line="891"/>
@@ -8889,12 +8889,12 @@
     <message>
         <location filename="../E5Gui/E5StringListEditWidget.ui" line="142"/>
         <source>Press to set the default list of values</source>
-        <translation type="unfinished"></translation>
+        <translation>Установить список значений по умолчанию</translation>
     </message>
     <message>
         <location filename="../E5Gui/E5StringListEditWidget.ui" line="145"/>
         <source>&amp;Default</source>
-        <translation type="unfinished"></translation>
+        <translation>По &amp;умолчанию</translation>
     </message>
 </context>
 <context>
@@ -35897,6 +35897,149 @@
     </message>
 </context>
 <context>
+    <name>ManageDictionariesDialog</name>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="14"/>
+        <source>Spell Check Dictionaries</source>
+        <translation>Словари проверки орфографии</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="25"/>
+        <source>Installation Location:</source>
+        <translation>Место установки:</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="38"/>
+        <source>Select the location for the dictionaries installation</source>
+        <translation>Выберите место установки словарей</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="47"/>
+        <source>Shows the list of available dictionaries</source>
+        <translation>Отображение списка доступных словарей</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="70"/>
+        <source>Shows the progress of the current download</source>
+        <translation>Отображение хода текущей загрузки</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="89"/>
+        <source>Dictionaries URL:</source>
+        <translation>URL словарей:</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="96"/>
+        <source>Shows the dictionaries URL</source>
+        <translation>Отображение URL словарей</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="106"/>
+        <source>Press to edit the dictionaries URL</source>
+        <translation>Редактировать URL словарей</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="109"/>
+        <source>Edit URL</source>
+        <translation>Правка URL</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="54"/>
+        <source>Refresh</source>
+        <translation>Освежить</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="56"/>
+        <source>Install Selected</source>
+        <translation>Установить выбранные</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="59"/>
+        <source>Uninstall Selected</source>
+        <translation>Отменить установку выбранных</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="62"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="99"/>
+        <source>Network Status: online</source>
+        <translation>Статус сети: в сети</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="101"/>
+        <source>Network Status: offline</source>
+        <translation>Статус сети: не в сети</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="201"/>
+        <source>Error populating list of dictionaries</source>
+        <translation>Ошибка заполнения списка словарей</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="391"/>
+        <source>Computer is offline.</source>
+        <translation>Компьютер не в сети.</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>Error downloading dictionaries list</source>
+        <translation>Ошибка загрузки списка словарей</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation>&lt;p&gt; Не удалось загрузить список словарей из {0}. &lt;/ p&gt; &lt;p&gt; Ошибка: {1} &lt;/ p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>Dictionaries URL Changed</source>
+        <translation>URL-адрес словарей изменен</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>The URL of the spell check dictionaries has changed. Select the &quot;Refresh&quot; button to get the new dictionaries list.</source>
+        <translation>URL-адрес словарей проверки орфографии изменился. Выберите кнопку «Обновить», чтобы получить список новых словарей.</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>Error installing dictionaries</source>
+        <translation>Ошибка установки словарей</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
+        <translation>&lt;p&gt; Ни одно из мест размещения в словаре не доступно для записи. Загрузите необходимые словари вручную и установите их как администратор.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="312"/>
+        <source>{0} ({1})</source>
+        <translation>{0} ({1})</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>Error downloading dictionary</source>
+        <translation>Ошибка загрузки словаря</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation>&lt;p&gt; Не удалось загрузить запрошенный файл слова из {0}. &lt;/ p&gt; &lt;p&gt; Ошибка: {1} &lt;/ p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>Error downloading dictionary file</source>
+        <translation>Ошибка загрузки файла словаря</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Загруженный архив словаря недействителен. Пропущен.&lt;/p&gt;</translation>
+    </message>
+</context>
+<context>
     <name>MarkdownProvider</name>
     <message>
         <location filename="../QScintilla/MarkupProviders/MarkdownProvider.py" line="383"/>
@@ -39988,27 +40131,27 @@
 Выполните обновление.</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>Error downloading file</source>
         <translation>Ошибка загрузки файла</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Ошибка загрузки файла из {0}.&lt;/p&gt;&lt;p&gt;Ошибка: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="584"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="583"/>
         <source>Stable</source>
         <translation>Стабильные</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="591"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="590"/>
         <source>Unstable</source>
         <translation>Нестабильные</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="598"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="597"/>
         <source>Unknown</source>
         <translation>Неизвестный</translation>
     </message>
@@ -40048,32 +40191,32 @@
         <translation>Очистить загруженные файлы</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="612"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="611"/>
         <source>up-to-date</source>
         <translation>новых изменений нет</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="615"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="614"/>
         <source>new download available</source>
         <translation>имеются обновления для загрузки</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="619"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="618"/>
         <source>update installable</source>
         <translation>обновления готовы к установке</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="623"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="622"/>
         <source>updated download available</source>
         <translation>имеется обновление</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>Cleanup of Plugin Downloads</source>
         <translation>Очистить загруженные плагины</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Невозможно удалить обновление для плагина &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Причина: {1}&lt;/p&gt;</translation>
     </message>
@@ -40111,17 +40254,17 @@
 <context>
     <name>PluginRepositoryWindow</name>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>Process Generation Error</source>
         <translation>Ошибка при запуске процесса</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Невозможно запустить процесс.&lt;br&gt;Убедитесь, что он доступен как &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
@@ -40195,27 +40338,27 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1592"/>
+        <location filename="../Preferences/__init__.py" line="1595"/>
         <source>Export Preferences</source>
         <translation>Экспорт предпочтений</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Import Preferences</source>
         <translation>Импорт предпочтений</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation>Файлы свойств (*.ini);;Все файлы (*)</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select Python{0} Interpreter</source>
         <translation>Задайте интерпретатор Python{0}</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select the Python{0} interpreter to be used:</source>
         <translation>Задайте интерпретатор Python{0}:</translation>
     </message>
@@ -50236,7 +50379,7 @@
     <message>
         <location filename="../WebBrowser/SafeBrowsing/SafeBrowsingDialog.ui" line="112"/>
         <source>Select to update the threat lists automatically when fair use period has expired</source>
-        <translation>Разрешить автоматическое обновление списков угроз по завершении срока справедливого использования</translation>
+        <translation>Разрешить автоматическое обновление списков угроз по завершении срока честного использования</translation>
     </message>
     <message>
         <location filename="../WebBrowser/SafeBrowsing/SafeBrowsingDialog.ui" line="115"/>
@@ -70900,6 +71043,16 @@
         <source>Dictionary Directories</source>
         <translation>Директории словаря</translation>
     </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="122"/>
+        <source>Press to open a dialog to manage spell checking dictionaries</source>
+        <translation>Открыть диалог управления словарями проверки орфографии</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="125"/>
+        <source>Manage Dictionaries...</source>
+        <translation>Менеджер словарей...</translation>
+    </message>
 </context>
 <context>
     <name>WebBrowserTabWidget</name>
@@ -73532,30 +73685,35 @@
 <context>
     <name>XMLStreamReaderBase</name>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="53"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="54"/>
         <source>&lt;p&gt;XML parse error in file &lt;b&gt;{0}&lt;/b&gt;, line {1}, column {2}&lt;/p&gt;&lt;p&gt;Error: {3}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Ошибка анализа XML файла &lt;b&gt;{0}&lt;/b&gt;, строка {1}, позиция {2}&lt;br&gt;Ошибка: {3}.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="60"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="68"/>
         <source>XML parse error</source>
         <translation>Ошибка анализа XML</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="81"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="89"/>
         <source>File format version &apos;{0}&apos; is not supported.</source>
         <translation>Формат файла версии &apos;{0}&apos; не поддерживается.</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="91"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="99"/>
         <source>Bad value: {0}</source>
         <translation>Неправильное значение: {0}</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="187"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="195"/>
         <source>Pickle data encoding &apos;{0}&apos; is not supported.</source>
         <translation>Кодировка &apos;{0}&apos; данных pickle не поддерживается.</translation>
     </message>
+    <message>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="62"/>
+        <source>&lt;p&gt;XML parse error (line {0}, column {1})&lt;/p&gt;&lt;p&gt;Error: {2}&lt;/p&gt;</source>
+        <translation>&lt;p&gt; Ошибка синтаксического анализа XML (строка {0}, столбец {1}) &lt;/ p&gt; &lt;p&gt; Ошибка: {2} &lt;/ p&gt;</translation>
+    </message>
 </context>
 <context>
     <name>XbelImporter</name>
--- a/i18n/eric6_tr.ts	Fri Sep 01 12:08:49 2017 +0200
+++ b/i18n/eric6_tr.ts	Tue Oct 03 15:33:11 2017 +0200
@@ -36601,6 +36601,149 @@
     </message>
 </context>
 <context>
+    <name>ManageDictionariesDialog</name>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="14"/>
+        <source>Spell Check Dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="25"/>
+        <source>Installation Location:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="38"/>
+        <source>Select the location for the dictionaries installation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="47"/>
+        <source>Shows the list of available dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="70"/>
+        <source>Shows the progress of the current download</source>
+        <translation type="unfinished">Geçerli indirmenin ilelemesini göster</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="89"/>
+        <source>Dictionaries URL:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="96"/>
+        <source>Shows the dictionaries URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="106"/>
+        <source>Press to edit the dictionaries URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="109"/>
+        <source>Edit URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="54"/>
+        <source>Refresh</source>
+        <translation type="unfinished">Tazele</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="56"/>
+        <source>Install Selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="59"/>
+        <source>Uninstall Selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="62"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Vazgeç</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="99"/>
+        <source>Network Status: online</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="101"/>
+        <source>Network Status: offline</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="201"/>
+        <source>Error populating list of dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="391"/>
+        <source>Computer is offline.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>Error downloading dictionaries list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>Dictionaries URL Changed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>The URL of the spell check dictionaries has changed. Select the &quot;Refresh&quot; button to get the new dictionaries list.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>Error installing dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="312"/>
+        <source>{0} ({1})</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>Error downloading dictionary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>Error downloading dictionary file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>MarkdownProvider</name>
     <message>
         <location filename="../QScintilla/MarkupProviders/MarkdownProvider.py" line="383"/>
@@ -40705,27 +40848,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>Error downloading file</source>
         <translation>Dosya yüklenirken hata</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="584"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="583"/>
         <source>Stable</source>
         <translation>Dengeli</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="591"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="590"/>
         <source>Unstable</source>
         <translation>Dengesiz</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="598"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="597"/>
         <source>Unknown</source>
         <translation>Bilinmeyen</translation>
     </message>
@@ -40765,32 +40908,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="612"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="611"/>
         <source>up-to-date</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="615"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="614"/>
         <source>new download available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="619"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="618"/>
         <source>update installable</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="623"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="622"/>
         <source>updated download available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>Cleanup of Plugin Downloads</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -40828,17 +40971,17 @@
 <context>
     <name>PluginRepositoryWindow</name>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>Process Generation Error</source>
         <translation>İşlem Üretecinde Hata</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;İşlem başlatılamıyor.&lt;br&gt;Bu durum büyük olasılıkla şundan kaynaklanıyto &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>OK</source>
         <translation>TAMAM</translation>
     </message>
@@ -40912,27 +41055,27 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1592"/>
+        <location filename="../Preferences/__init__.py" line="1595"/>
         <source>Export Preferences</source>
         <translation>Seçenekleri Dışa Aktar</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Import Preferences</source>
         <translation>Seçenekleri İçe Aktar</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select Python{0} Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select the Python{0} interpreter to be used:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -71642,6 +71785,16 @@
         <source>Dictionary Directories</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="122"/>
+        <source>Press to open a dialog to manage spell checking dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="125"/>
+        <source>Manage Dictionaries...</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WebBrowserTabWidget</name>
@@ -74298,30 +74451,35 @@
 <context>
     <name>XMLStreamReaderBase</name>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="53"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="54"/>
         <source>&lt;p&gt;XML parse error in file &lt;b&gt;{0}&lt;/b&gt;, line {1}, column {2}&lt;/p&gt;&lt;p&gt;Error: {3}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="60"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="68"/>
         <source>XML parse error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="81"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="89"/>
         <source>File format version &apos;{0}&apos; is not supported.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="91"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="99"/>
         <source>Bad value: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="187"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="195"/>
         <source>Pickle data encoding &apos;{0}&apos; is not supported.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="62"/>
+        <source>&lt;p&gt;XML parse error (line {0}, column {1})&lt;/p&gt;&lt;p&gt;Error: {2}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>XbelImporter</name>
--- a/i18n/eric6_zh_CN.ts	Fri Sep 01 12:08:49 2017 +0200
+++ b/i18n/eric6_zh_CN.ts	Tue Oct 03 15:33:11 2017 +0200
@@ -36596,6 +36596,149 @@
     </message>
 </context>
 <context>
+    <name>ManageDictionariesDialog</name>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="14"/>
+        <source>Spell Check Dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="25"/>
+        <source>Installation Location:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="38"/>
+        <source>Select the location for the dictionaries installation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="47"/>
+        <source>Shows the list of available dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="70"/>
+        <source>Shows the progress of the current download</source>
+        <translation type="unfinished">显示当前下载的进程</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="89"/>
+        <source>Dictionaries URL:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="96"/>
+        <source>Shows the dictionaries URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="106"/>
+        <source>Press to edit the dictionaries URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.ui" line="109"/>
+        <source>Edit URL</source>
+        <translation type="unfinished">编辑 URL</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="54"/>
+        <source>Refresh</source>
+        <translation type="unfinished">刷新</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="56"/>
+        <source>Install Selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="59"/>
+        <source>Uninstall Selected</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="62"/>
+        <source>Cancel</source>
+        <translation type="unfinished">取消</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="99"/>
+        <source>Network Status: online</source>
+        <translation type="unfinished">网络状态:在线</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="101"/>
+        <source>Network Status: offline</source>
+        <translation type="unfinished">网络状态:离线</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="201"/>
+        <source>Error populating list of dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="391"/>
+        <source>Computer is offline.</source>
+        <translation type="unfinished">计算机已离线。</translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>Error downloading dictionaries list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="227"/>
+        <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>Dictionaries URL Changed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249"/>
+        <source>The URL of the spell check dictionaries has changed. Select the &quot;Refresh&quot; button to get the new dictionaries list.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>Error installing dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261"/>
+        <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="312"/>
+        <source>{0} ({1})</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>Error downloading dictionary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="412"/>
+        <source>Error downloading dictionary file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="427"/>
+        <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>MarkdownProvider</name>
     <message>
         <location filename="../QScintilla/MarkupProviders/MarkdownProvider.py" line="383"/>
@@ -40697,22 +40840,22 @@
 选择更新。</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>Error downloading file</source>
         <translation>下载文件出错</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="584"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="583"/>
         <source>Stable</source>
         <translation>稳定</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="591"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="590"/>
         <source>Unstable</source>
         <translation>不稳定</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="598"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="597"/>
         <source>Unknown</source>
         <translation>未知</translation>
     </message>
@@ -40722,7 +40865,7 @@
         <translation>&lt;p&gt;插件仓库文件 &lt;b&gt;{0}&lt;/b&gt; 无法读取。选择更新&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="499"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="498"/>
         <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;无法从 {0} 下载指定文件。&lt;/p&gt;&lt;p&gt;错误:{1}&lt;/p&gt;</translation>
     </message>
@@ -40762,32 +40905,32 @@
         <translation>清理下载</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="612"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="611"/>
         <source>up-to-date</source>
         <translation>最新</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="615"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="614"/>
         <source>new download available</source>
         <translation>新的下载可用</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="619"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="618"/>
         <source>update installable</source>
         <translation>更新可安装</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="623"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="622"/>
         <source>updated download available</source>
         <translation>更新下载可用</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>Cleanup of Plugin Downloads</source>
         <translation>清理插件安装</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="903"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="902"/>
         <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;插件下载 &lt;b&gt;{0}&lt;/b&gt; 无法删除。&lt;/p&gt;&lt;p&gt;原因:{1}&lt;/p&gt;</translation>
     </message>
@@ -40825,17 +40968,17 @@
 <context>
     <name>PluginRepositoryWindow</name>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>Process Generation Error</source>
         <translation>进程生成错误</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>OK</source>
         <translation>确定</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="855"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="854"/>
         <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;无法启动进程。&lt;br&gt;请确保它作为 &lt;b&gt;{0}&lt;/b&gt; 可用。&lt;/p&gt;</translation>
     </message>
@@ -40909,27 +41052,27 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1592"/>
+        <location filename="../Preferences/__init__.py" line="1595"/>
         <source>Export Preferences</source>
         <translation>导出首选项</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Import Preferences</source>
         <translation>导入首选项</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1620"/>
+        <location filename="../Preferences/__init__.py" line="1623"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation>属性文件 (*.ini);;所有文件 (*)</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select Python{0} Interpreter</source>
         <translation>选择 Python{0} 解释器</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1722"/>
+        <location filename="../Preferences/__init__.py" line="1725"/>
         <source>Select the Python{0} interpreter to be used:</source>
         <translation>选择要使用的 Python{0} 解释器:</translation>
     </message>
@@ -71882,6 +72025,16 @@
         <source>Dictionary Directories</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="122"/>
+        <source>Press to open a dialog to manage spell checking dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="125"/>
+        <source>Manage Dictionaries...</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>WebBrowserTabWidget</name>
@@ -74538,30 +74691,35 @@
 <context>
     <name>XMLStreamReaderBase</name>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="60"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="68"/>
         <source>XML parse error</source>
         <translation>XML 解析错误</translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="187"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="195"/>
         <source>Pickle data encoding &apos;{0}&apos; is not supported.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="53"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="54"/>
         <source>&lt;p&gt;XML parse error in file &lt;b&gt;{0}&lt;/b&gt;, line {1}, column {2}&lt;/p&gt;&lt;p&gt;Error: {3}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="81"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="89"/>
         <source>File format version &apos;{0}&apos; is not supported.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../E5XML/XMLStreamReaderBase.py" line="91"/>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="99"/>
         <source>Bad value: {0}</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../E5XML/XMLStreamReaderBase.py" line="62"/>
+        <source>&lt;p&gt;XML parse error (line {0}, column {1})&lt;/p&gt;&lt;p&gt;Error: {2}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>XbelImporter</name>

eric ide

mercurial