Extracted the IRC widgets from eric-ide to provide them as a plug-in.

Fri, 18 Apr 2025 18:36:48 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 18 Apr 2025 18:36:48 +0200
changeset 2
5b635dc8895f
parent 1
60cb9d784005
child 3
51c2c37bde76

Extracted the IRC widgets from eric-ide to provide them as a plug-in.

ExtensionIrc/ConfigurationPage/IrcPage.py file | annotate | diff | comparison | revisions
ExtensionIrc/ConfigurationPage/IrcPage.ui file | annotate | diff | comparison | revisions
ExtensionIrc/ConfigurationPage/Ui_IrcPage.py file | annotate | diff | comparison | revisions
ExtensionIrc/ConfigurationPage/__init__.py file | annotate | diff | comparison | revisions
ExtensionIrc/IrcChannelEditDialog.py file | annotate | diff | comparison | revisions
ExtensionIrc/IrcChannelEditDialog.ui file | annotate | diff | comparison | revisions
ExtensionIrc/IrcChannelWidget.py file | annotate | diff | comparison | revisions
ExtensionIrc/IrcChannelWidget.ui file | annotate | diff | comparison | revisions
ExtensionIrc/IrcIdentitiesEditDialog.py file | annotate | diff | comparison | revisions
ExtensionIrc/IrcIdentitiesEditDialog.ui file | annotate | diff | comparison | revisions
ExtensionIrc/IrcMessageEdit.py file | annotate | diff | comparison | revisions
ExtensionIrc/IrcNetworkEditDialog.py file | annotate | diff | comparison | revisions
ExtensionIrc/IrcNetworkEditDialog.ui file | annotate | diff | comparison | revisions
ExtensionIrc/IrcNetworkListDialog.py file | annotate | diff | comparison | revisions
ExtensionIrc/IrcNetworkListDialog.ui file | annotate | diff | comparison | revisions
ExtensionIrc/IrcNetworkManager.py file | annotate | diff | comparison | revisions
ExtensionIrc/IrcNetworkWidget.py file | annotate | diff | comparison | revisions
ExtensionIrc/IrcNetworkWidget.ui file | annotate | diff | comparison | revisions
ExtensionIrc/IrcServerEditDialog.py file | annotate | diff | comparison | revisions
ExtensionIrc/IrcServerEditDialog.ui file | annotate | diff | comparison | revisions
ExtensionIrc/IrcUtilities.py file | annotate | diff | comparison | revisions
ExtensionIrc/IrcWidget.py file | annotate | diff | comparison | revisions
ExtensionIrc/IrcWidget.ui file | annotate | diff | comparison | revisions
ExtensionIrc/Ui_IrcChannelEditDialog.py file | annotate | diff | comparison | revisions
ExtensionIrc/Ui_IrcChannelWidget.py file | annotate | diff | comparison | revisions
ExtensionIrc/Ui_IrcIdentitiesEditDialog.py file | annotate | diff | comparison | revisions
ExtensionIrc/Ui_IrcNetworkEditDialog.py file | annotate | diff | comparison | revisions
ExtensionIrc/Ui_IrcNetworkListDialog.py file | annotate | diff | comparison | revisions
ExtensionIrc/Ui_IrcNetworkWidget.py file | annotate | diff | comparison | revisions
ExtensionIrc/Ui_IrcServerEditDialog.py file | annotate | diff | comparison | revisions
ExtensionIrc/Ui_IrcWidget.py file | annotate | diff | comparison | revisions
ExtensionIrc/__init__.py file | annotate | diff | comparison | revisions
ExtensionIrc/i18n/irc_de.ts file | annotate | diff | comparison | revisions
ExtensionIrc/i18n/irc_empty.ts file | annotate | diff | comparison | revisions
ExtensionIrc/i18n/irc_en.ts file | annotate | diff | comparison | revisions
ExtensionIrc/i18n/irc_es.ts file | annotate | diff | comparison | revisions
ExtensionIrc/i18n/irc_ru.ts file | annotate | diff | comparison | revisions
ExtensionIrc/icons/dark/ircAdmin.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/dark/ircAway.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/dark/ircCloseChannel.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/dark/ircConfigure.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/dark/ircConnect.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/dark/ircDisconnect.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/dark/ircEditTopic.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/dark/ircHalfOp.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/dark/ircJoinChannel.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/dark/ircNormal.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/dark/ircOp.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/dark/ircOwner.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/dark/ircUserAway.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/dark/ircUserPresent.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/dark/ircVoice.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/irc.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/irc128.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/irc48.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/light/ircAdmin.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/light/ircAway.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/light/ircCloseChannel.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/light/ircConfigure.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/light/ircConnect.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/light/ircDisconnect.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/light/ircEditTopic.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/light/ircHalfOp.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/light/ircJoinChannel.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/light/ircNormal.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/light/ircOp.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/light/ircOwner.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/light/ircUserAway.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/light/ircUserPresent.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/light/ircVoice.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/sbIrc48.svg file | annotate | diff | comparison | revisions
ExtensionIrc/icons/sbIrc96.svg file | annotate | diff | comparison | revisions
PluginExtensionIrc.py file | annotate | diff | comparison | revisions
PluginIrc.epj file | annotate | diff | comparison | revisions
__init__.py file | annotate | diff | comparison | revisions
pyproject.toml file | annotate | diff | comparison | revisions
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/ConfigurationPage/IrcPage.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,263 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the IRC configuration page.
+"""
+
+from eric7.Preferences.ConfigurationPages.ConfigurationPageBase import (
+    ConfigurationPageBase,
+)
+
+from .Ui_IrcPage import Ui_IrcPage
+
+
+class IrcPage(ConfigurationPageBase, Ui_IrcPage):
+    """
+    Class implementing the IRC configuration page.
+    """
+
+    TimeFormats = ["hh:mm", "hh:mm:ss", "h:mm ap", "h:mm:ss ap"]
+    DateFormats = [
+        "yyyy-MM-dd",
+        "dd.MM.yyyy",
+        "MM/dd/yyyy",
+        "yyyy MMM. dd",
+        "dd MMM. yyyy",
+        "MMM. dd, yyyy",
+    ]
+
+    def __init__(self, plugin):
+        """
+        Constructor
+
+        @param plugin reference to the plugin object
+        @type PluginPipxInterface
+        """
+        super().__init__()
+        self.setupUi(self)
+        self.setObjectName("IrcPage")
+
+        self.__plugin = plugin
+
+        self.timeFormatCombo.addItems(IrcPage.TimeFormats)
+        self.dateFormatCombo.addItems(IrcPage.DateFormats)
+
+        # set initial values
+        # timestamps
+        self.timestampGroup.setChecked(self.__plugin.getPreferences("ShowTimestamps"))
+        self.showDateCheckBox.setChecked(
+            self.__plugin.getPreferences("TimestampIncludeDate")
+        )
+        self.timeFormatCombo.setCurrentIndex(
+            self.timeFormatCombo.findText(self.__plugin.getPreferences("TimeFormat"))
+        )
+        self.dateFormatCombo.setCurrentIndex(
+            self.dateFormatCombo.findText(self.__plugin.getPreferences("DateFormat"))
+        )
+
+        # colours
+        self.initColour(
+            "NetworkMessageColour",
+            self.networkButton,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+        self.initColour(
+            "ServerMessageColour",
+            self.serverButton,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+        self.initColour(
+            "ErrorMessageColour",
+            self.errorButton,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+        self.initColour(
+            "TimestampColour",
+            self.timestampButton,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+        self.initColour(
+            "HyperlinkColour",
+            self.hyperlinkButton,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+        self.initColour(
+            "ChannelMessageColour",
+            self.channelButton,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+        self.initColour(
+            "OwnNickColour",
+            self.ownNickButton,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+        self.initColour(
+            "NickColour", self.nickButton, self.__plugin.getPreferences, byName=True
+        )
+        self.initColour(
+            "JoinChannelColour",
+            self.joinButton,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+        self.initColour(
+            "LeaveChannelColour",
+            self.leaveButton,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+        self.initColour(
+            "ChannelInfoColour",
+            self.infoButton,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+
+        # notifications
+        self.notificationsGroup.setChecked(
+            self.__plugin.getPreferences("ShowNotifications")
+        )
+        self.joinLeaveCheckBox.setChecked(
+            self.__plugin.getPreferences("NotifyJoinPart")
+        )
+        self.messageCheckBox.setChecked(self.__plugin.getPreferences("NotifyMessage"))
+        self.ownNickCheckBox.setChecked(self.__plugin.getPreferences("NotifyNick"))
+
+        # IRC text colors
+        self.initColour(
+            "IrcColor0", self.ircColor0Button, self.__plugin.getPreferences, byName=True
+        )
+        self.initColour(
+            "IrcColor1", self.ircColor1Button, self.__plugin.getPreferences, byName=True
+        )
+        self.initColour(
+            "IrcColor2", self.ircColor2Button, self.__plugin.getPreferences, byName=True
+        )
+        self.initColour(
+            "IrcColor3", self.ircColor3Button, self.__plugin.getPreferences, byName=True
+        )
+        self.initColour(
+            "IrcColor4", self.ircColor4Button, self.__plugin.getPreferences, byName=True
+        )
+        self.initColour(
+            "IrcColor5", self.ircColor5Button, self.__plugin.getPreferences, byName=True
+        )
+        self.initColour(
+            "IrcColor6", self.ircColor6Button, self.__plugin.getPreferences, byName=True
+        )
+        self.initColour(
+            "IrcColor7", self.ircColor7Button, self.__plugin.getPreferences, byName=True
+        )
+        self.initColour(
+            "IrcColor8", self.ircColor8Button, self.__plugin.getPreferences, byName=True
+        )
+        self.initColour(
+            "IrcColor9", self.ircColor9Button, self.__plugin.getPreferences, byName=True
+        )
+        self.initColour(
+            "IrcColor10",
+            self.ircColor10Button,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+        self.initColour(
+            "IrcColor11",
+            self.ircColor11Button,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+        self.initColour(
+            "IrcColor12",
+            self.ircColor12Button,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+        self.initColour(
+            "IrcColor13",
+            self.ircColor13Button,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+        self.initColour(
+            "IrcColor14",
+            self.ircColor14Button,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+        self.initColour(
+            "IrcColor15",
+            self.ircColor15Button,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+
+        # Automatic User Information Lookup
+        self.whoGroup.setChecked(self.__plugin.getPreferences("AutoUserInfoLookup"))
+        self.whoUsersSpinBox.setValue(self.__plugin.getPreferences("AutoUserInfoMax"))
+        self.whoIntervalSpinBox.setValue(
+            self.__plugin.getPreferences("AutoUserInfoInterval")
+        )
+
+        # Markers
+        self.markWhenHiddenCheckBox.setChecked(
+            self.__plugin.getPreferences("MarkPositionWhenHidden")
+        )
+        self.initColour(
+            "MarkerLineForegroundColour",
+            self.markerForegroundButton,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+        self.initColour(
+            "MarkerLineBackgroundColour",
+            self.markerBackgroundButton,
+            self.__plugin.getPreferences,
+            byName=True,
+        )
+
+    def save(self):
+        """
+        Public slot to save the IRC configuration.
+        """
+        # timestamps
+        self.__plugin.setPreferences("ShowTimestamps", self.timestampGroup.isChecked())
+        self.__plugin.setPreferences(
+            "TimestampIncludeDate", self.showDateCheckBox.isChecked()
+        )
+        self.__plugin.setPreferences("TimeFormat", self.timeFormatCombo.currentText())
+        self.__plugin.setPreferences("DateFormat", self.dateFormatCombo.currentText())
+
+        # notifications
+        self.__plugin.setPreferences(
+            "ShowNotifications", self.notificationsGroup.isChecked()
+        )
+        self.__plugin.setPreferences(
+            "NotifyJoinPart", self.joinLeaveCheckBox.isChecked()
+        )
+        self.__plugin.setPreferences("NotifyMessage", self.messageCheckBox.isChecked())
+        self.__plugin.setPreferences("NotifyNick", self.ownNickCheckBox.isChecked())
+
+        # Automatic User Information Lookup
+        self.__plugin.setPreferences("AutoUserInfoLookup", self.whoGroup.isChecked())
+        self.__plugin.setPreferences("AutoUserInfoMax", self.whoUsersSpinBox.value())
+        self.__plugin.setPreferences(
+            "AutoUserInfoInterval", self.whoIntervalSpinBox.value()
+        )
+
+        # Markers
+        self.__plugin.setPreferences(
+            "MarkPositionWhenHidden", self.markWhenHiddenCheckBox.isChecked()
+        )
+
+        # colours
+        self.saveColours(self.__plugin.setPreferences)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/ConfigurationPage/IrcPage.ui	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,912 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IrcPage</class>
+ <widget class="QWidget" name="IrcPage">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>522</width>
+    <height>979</height>
+   </rect>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="headerLabel">
+     <property name="text">
+      <string>&lt;b&gt;Configure IRC&lt;/b&gt;</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="Line" name="line3">
+     <property name="frameShape">
+      <enum>QFrame::Shape::HLine</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Shadow::Sunken</enum>
+     </property>
+     <property name="orientation">
+      <enum>Qt::Orientation::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="timestampGroup">
+     <property name="toolTip">
+      <string>Enable to show timestamps</string>
+     </property>
+     <property name="title">
+      <string>Show Timestamps</string>
+     </property>
+     <property name="checkable">
+      <bool>true</bool>
+     </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QLabel" name="label">
+        <property name="text">
+         <string>Time Format:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QComboBox" name="timeFormatCombo">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="toolTip">
+         <string>Select the time format to use</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <widget class="QLabel" name="label_2">
+        <property name="text">
+         <string>Date Format</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="3">
+       <widget class="QComboBox" name="dateFormatCombo">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="toolTip">
+         <string>Select the date format to use</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0" colspan="4">
+       <widget class="QCheckBox" name="showDateCheckBox">
+        <property name="toolTip">
+         <string>Select to show the date in timestamps</string>
+        </property>
+        <property name="text">
+         <string>Show Date</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="coloursGroup">
+     <property name="title">
+      <string>Colors</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_2">
+      <item row="0" column="0">
+       <widget class="QLabel" name="label_3">
+        <property name="text">
+         <string>Network Messages:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QPushButton" name="networkButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the color for network messages</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <widget class="QLabel" name="label_9">
+        <property name="text">
+         <string>Nick Names:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="3">
+       <widget class="QPushButton" name="nickButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the color for nick names</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_4">
+        <property name="text">
+         <string>Server Messages:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QPushButton" name="serverButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the color for server messages</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="2">
+       <widget class="QLabel" name="label_10">
+        <property name="text">
+         <string>Own Nick Name:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="3">
+       <widget class="QPushButton" name="ownNickButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the color for own nick name</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="label_5">
+        <property name="text">
+         <string>Channel Messages:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QPushButton" name="channelButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the color for channel messages</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="2">
+       <widget class="QLabel" name="label_11">
+        <property name="text">
+         <string>Join Channel:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="3">
+       <widget class="QPushButton" name="joinButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the color for join channel messages</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QLabel" name="label_6">
+        <property name="text">
+         <string>Error Messages:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="1">
+       <widget class="QPushButton" name="errorButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the color for error messages</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="2">
+       <widget class="QLabel" name="label_12">
+        <property name="text">
+         <string>Leave Channel:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="3">
+       <widget class="QPushButton" name="leaveButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the color for leave channel messages</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="0">
+       <widget class="QLabel" name="label_7">
+        <property name="text">
+         <string>Timestamp:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="1">
+       <widget class="QPushButton" name="timestampButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the color for timestamps</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="2">
+       <widget class="QLabel" name="label_13">
+        <property name="text">
+         <string>Channel Info:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="3">
+       <widget class="QPushButton" name="infoButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the color for channel info messages</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="5" column="0">
+       <widget class="QLabel" name="label_8">
+        <property name="text">
+         <string>Hyperlink:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="5" column="1">
+       <widget class="QPushButton" name="hyperlinkButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the color for hyperlinks</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="textColoursGroup">
+     <property name="toolTip">
+      <string>Enable to allow colored text in IRC messages</string>
+     </property>
+     <property name="title">
+      <string>Allow Colored Text in IRC Messages</string>
+     </property>
+     <property name="checkable">
+      <bool>true</bool>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_4">
+      <item row="0" column="0">
+       <widget class="QLabel" name="label_15">
+        <property name="text">
+         <string notr="true">0:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QPushButton" name="ircColor0Button">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <widget class="QLabel" name="label_19">
+        <property name="text">
+         <string notr="true">4:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="3">
+       <widget class="QPushButton" name="ircColor4Button">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="4">
+       <widget class="QLabel" name="label_23">
+        <property name="text">
+         <string notr="true">8:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="5">
+       <widget class="QPushButton" name="ircColor8Button">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="6">
+       <widget class="QLabel" name="label_27">
+        <property name="text">
+         <string notr="true">12:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="7">
+       <widget class="QPushButton" name="ircColor12Button">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_16">
+        <property name="text">
+         <string notr="true">1:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QPushButton" name="ircColor1Button">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="2">
+       <widget class="QLabel" name="label_20">
+        <property name="text">
+         <string notr="true">5:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="3">
+       <widget class="QPushButton" name="ircColor5Button">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="4">
+       <widget class="QLabel" name="label_24">
+        <property name="text">
+         <string notr="true">9:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="5">
+       <widget class="QPushButton" name="ircColor9Button">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="6">
+       <widget class="QLabel" name="label_28">
+        <property name="text">
+         <string notr="true">13:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="7">
+       <widget class="QPushButton" name="ircColor13Button">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="label_17">
+        <property name="text">
+         <string notr="true">2:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QPushButton" name="ircColor2Button">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="2">
+       <widget class="QLabel" name="label_21">
+        <property name="text">
+         <string notr="true">6:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="3">
+       <widget class="QPushButton" name="ircColor6Button">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="4">
+       <widget class="QLabel" name="label_25">
+        <property name="text">
+         <string notr="true">10:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="5">
+       <widget class="QPushButton" name="ircColor10Button">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="6">
+       <widget class="QLabel" name="label_29">
+        <property name="text">
+         <string notr="true">14:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="7">
+       <widget class="QPushButton" name="ircColor14Button">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QLabel" name="label_18">
+        <property name="text">
+         <string notr="true">3:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="1">
+       <widget class="QPushButton" name="ircColor3Button">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="2">
+       <widget class="QLabel" name="label_22">
+        <property name="text">
+         <string notr="true">7:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="3">
+       <widget class="QPushButton" name="ircColor7Button">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="4">
+       <widget class="QLabel" name="label_26">
+        <property name="text">
+         <string notr="true">11:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="5">
+       <widget class="QPushButton" name="ircColor11Button">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="6">
+       <widget class="QLabel" name="label_30">
+        <property name="text">
+         <string notr="true">15:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="7">
+       <widget class="QPushButton" name="ircColor15Button">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="notificationsGroup">
+     <property name="toolTip">
+      <string>Enable to show notifications</string>
+     </property>
+     <property name="title">
+      <string>Show Notifications</string>
+     </property>
+     <property name="checkable">
+      <bool>true</bool>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_3">
+      <item row="0" column="0">
+       <widget class="QCheckBox" name="joinLeaveCheckBox">
+        <property name="toolTip">
+         <string>Select to show a notification for join and leave events</string>
+        </property>
+        <property name="text">
+         <string>Join/Leave Event</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QCheckBox" name="messageCheckBox">
+        <property name="toolTip">
+         <string>Select to show a notification for every message</string>
+        </property>
+        <property name="text">
+         <string>Every Message</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QCheckBox" name="ownNickCheckBox">
+        <property name="toolTip">
+         <string>Select to show a notification for every mentioning of your nick</string>
+        </property>
+        <property name="text">
+         <string>Mentioning of Own Nick</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="whoGroup">
+     <property name="toolTip">
+      <string>Select this to enable the automatic lookup of user information for joined channels</string>
+     </property>
+     <property name="title">
+      <string>Enable Automatic User Information Lookup (/WHO)</string>
+     </property>
+     <property name="checkable">
+      <bool>true</bool>
+     </property>
+     <property name="checked">
+      <bool>false</bool>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_5">
+      <item row="0" column="0">
+       <widget class="QLabel" name="label_31">
+        <property name="text">
+         <string>Max. Number of Users in Channel:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QSpinBox" name="whoUsersSpinBox">
+        <property name="toolTip">
+         <string>Enter the maximum numbers of users in a channel allowed for this function</string>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
+        </property>
+        <property name="maximum">
+         <number>999</number>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <spacer name="horizontalSpacer">
+        <property name="orientation">
+         <enum>Qt::Orientation::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>174</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_32">
+        <property name="text">
+         <string>Update Interval:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QSpinBox" name="whoIntervalSpinBox">
+        <property name="toolTip">
+         <string>Enter the user information update interval</string>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
+        </property>
+        <property name="suffix">
+         <string> s</string>
+        </property>
+        <property name="minimum">
+         <number>30</number>
+        </property>
+        <property name="maximum">
+         <number>600</number>
+        </property>
+        <property name="singleStep">
+         <number>10</number>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="markerGroup">
+     <property name="title">
+      <string>Marker</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_6">
+      <item row="0" column="0" colspan="3">
+       <widget class="QCheckBox" name="markWhenHiddenCheckBox">
+        <property name="toolTip">
+         <string>Select to mark the current position, when the chat window is hidden</string>
+        </property>
+        <property name="text">
+         <string>Mark Current Position When Hidden</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_33">
+        <property name="text">
+         <string>Marker Foreground:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QPushButton" name="markerForegroundButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the foreground color for the marker</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="2" rowspan="2">
+       <spacer name="horizontalSpacer_2">
+        <property name="orientation">
+         <enum>Qt::Orientation::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>240</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="2" column="1" rowspan="2">
+       <widget class="QPushButton" name="markerBackgroundButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the background color for the marker</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QLabel" name="label_34">
+        <property name="text">
+         <string>Marker Background:</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Orientation::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>79</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>timestampGroup</tabstop>
+  <tabstop>timeFormatCombo</tabstop>
+  <tabstop>dateFormatCombo</tabstop>
+  <tabstop>showDateCheckBox</tabstop>
+  <tabstop>networkButton</tabstop>
+  <tabstop>serverButton</tabstop>
+  <tabstop>channelButton</tabstop>
+  <tabstop>errorButton</tabstop>
+  <tabstop>timestampButton</tabstop>
+  <tabstop>hyperlinkButton</tabstop>
+  <tabstop>nickButton</tabstop>
+  <tabstop>ownNickButton</tabstop>
+  <tabstop>joinButton</tabstop>
+  <tabstop>leaveButton</tabstop>
+  <tabstop>infoButton</tabstop>
+  <tabstop>textColoursGroup</tabstop>
+  <tabstop>ircColor0Button</tabstop>
+  <tabstop>ircColor1Button</tabstop>
+  <tabstop>ircColor2Button</tabstop>
+  <tabstop>ircColor3Button</tabstop>
+  <tabstop>ircColor4Button</tabstop>
+  <tabstop>ircColor5Button</tabstop>
+  <tabstop>ircColor6Button</tabstop>
+  <tabstop>ircColor7Button</tabstop>
+  <tabstop>ircColor8Button</tabstop>
+  <tabstop>ircColor9Button</tabstop>
+  <tabstop>ircColor10Button</tabstop>
+  <tabstop>ircColor11Button</tabstop>
+  <tabstop>ircColor12Button</tabstop>
+  <tabstop>ircColor13Button</tabstop>
+  <tabstop>ircColor14Button</tabstop>
+  <tabstop>ircColor15Button</tabstop>
+  <tabstop>notificationsGroup</tabstop>
+  <tabstop>joinLeaveCheckBox</tabstop>
+  <tabstop>messageCheckBox</tabstop>
+  <tabstop>ownNickCheckBox</tabstop>
+  <tabstop>whoGroup</tabstop>
+  <tabstop>whoUsersSpinBox</tabstop>
+  <tabstop>whoIntervalSpinBox</tabstop>
+  <tabstop>markWhenHiddenCheckBox</tabstop>
+  <tabstop>markerForegroundButton</tabstop>
+  <tabstop>markerBackgroundButton</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/ConfigurationPage/Ui_IrcPage.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,521 @@
+# Form implementation generated from reading ui file 'ExtensionIrc/ConfigurationPage/IrcPage.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_IrcPage(object):
+    def setupUi(self, IrcPage):
+        IrcPage.setObjectName("IrcPage")
+        IrcPage.resize(522, 979)
+        self.verticalLayout = QtWidgets.QVBoxLayout(IrcPage)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.headerLabel = QtWidgets.QLabel(parent=IrcPage)
+        self.headerLabel.setObjectName("headerLabel")
+        self.verticalLayout.addWidget(self.headerLabel)
+        self.line3 = QtWidgets.QFrame(parent=IrcPage)
+        self.line3.setFrameShape(QtWidgets.QFrame.Shape.HLine)
+        self.line3.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
+        self.line3.setFrameShape(QtWidgets.QFrame.Shape.HLine)
+        self.line3.setObjectName("line3")
+        self.verticalLayout.addWidget(self.line3)
+        self.timestampGroup = QtWidgets.QGroupBox(parent=IrcPage)
+        self.timestampGroup.setCheckable(True)
+        self.timestampGroup.setObjectName("timestampGroup")
+        self.gridLayout = QtWidgets.QGridLayout(self.timestampGroup)
+        self.gridLayout.setObjectName("gridLayout")
+        self.label = QtWidgets.QLabel(parent=self.timestampGroup)
+        self.label.setObjectName("label")
+        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
+        self.timeFormatCombo = QtWidgets.QComboBox(parent=self.timestampGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.timeFormatCombo.sizePolicy().hasHeightForWidth())
+        self.timeFormatCombo.setSizePolicy(sizePolicy)
+        self.timeFormatCombo.setObjectName("timeFormatCombo")
+        self.gridLayout.addWidget(self.timeFormatCombo, 0, 1, 1, 1)
+        self.label_2 = QtWidgets.QLabel(parent=self.timestampGroup)
+        self.label_2.setObjectName("label_2")
+        self.gridLayout.addWidget(self.label_2, 0, 2, 1, 1)
+        self.dateFormatCombo = QtWidgets.QComboBox(parent=self.timestampGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.dateFormatCombo.sizePolicy().hasHeightForWidth())
+        self.dateFormatCombo.setSizePolicy(sizePolicy)
+        self.dateFormatCombo.setObjectName("dateFormatCombo")
+        self.gridLayout.addWidget(self.dateFormatCombo, 0, 3, 1, 1)
+        self.showDateCheckBox = QtWidgets.QCheckBox(parent=self.timestampGroup)
+        self.showDateCheckBox.setObjectName("showDateCheckBox")
+        self.gridLayout.addWidget(self.showDateCheckBox, 1, 0, 1, 4)
+        self.verticalLayout.addWidget(self.timestampGroup)
+        self.coloursGroup = QtWidgets.QGroupBox(parent=IrcPage)
+        self.coloursGroup.setObjectName("coloursGroup")
+        self.gridLayout_2 = QtWidgets.QGridLayout(self.coloursGroup)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.label_3 = QtWidgets.QLabel(parent=self.coloursGroup)
+        self.label_3.setObjectName("label_3")
+        self.gridLayout_2.addWidget(self.label_3, 0, 0, 1, 1)
+        self.networkButton = QtWidgets.QPushButton(parent=self.coloursGroup)
+        self.networkButton.setMinimumSize(QtCore.QSize(100, 0))
+        self.networkButton.setText("")
+        self.networkButton.setObjectName("networkButton")
+        self.gridLayout_2.addWidget(self.networkButton, 0, 1, 1, 1)
+        self.label_9 = QtWidgets.QLabel(parent=self.coloursGroup)
+        self.label_9.setObjectName("label_9")
+        self.gridLayout_2.addWidget(self.label_9, 0, 2, 1, 1)
+        self.nickButton = QtWidgets.QPushButton(parent=self.coloursGroup)
+        self.nickButton.setMinimumSize(QtCore.QSize(100, 0))
+        self.nickButton.setText("")
+        self.nickButton.setObjectName("nickButton")
+        self.gridLayout_2.addWidget(self.nickButton, 0, 3, 1, 1)
+        self.label_4 = QtWidgets.QLabel(parent=self.coloursGroup)
+        self.label_4.setObjectName("label_4")
+        self.gridLayout_2.addWidget(self.label_4, 1, 0, 1, 1)
+        self.serverButton = QtWidgets.QPushButton(parent=self.coloursGroup)
+        self.serverButton.setMinimumSize(QtCore.QSize(100, 0))
+        self.serverButton.setText("")
+        self.serverButton.setObjectName("serverButton")
+        self.gridLayout_2.addWidget(self.serverButton, 1, 1, 1, 1)
+        self.label_10 = QtWidgets.QLabel(parent=self.coloursGroup)
+        self.label_10.setObjectName("label_10")
+        self.gridLayout_2.addWidget(self.label_10, 1, 2, 1, 1)
+        self.ownNickButton = QtWidgets.QPushButton(parent=self.coloursGroup)
+        self.ownNickButton.setMinimumSize(QtCore.QSize(100, 0))
+        self.ownNickButton.setText("")
+        self.ownNickButton.setObjectName("ownNickButton")
+        self.gridLayout_2.addWidget(self.ownNickButton, 1, 3, 1, 1)
+        self.label_5 = QtWidgets.QLabel(parent=self.coloursGroup)
+        self.label_5.setObjectName("label_5")
+        self.gridLayout_2.addWidget(self.label_5, 2, 0, 1, 1)
+        self.channelButton = QtWidgets.QPushButton(parent=self.coloursGroup)
+        self.channelButton.setMinimumSize(QtCore.QSize(100, 0))
+        self.channelButton.setText("")
+        self.channelButton.setObjectName("channelButton")
+        self.gridLayout_2.addWidget(self.channelButton, 2, 1, 1, 1)
+        self.label_11 = QtWidgets.QLabel(parent=self.coloursGroup)
+        self.label_11.setObjectName("label_11")
+        self.gridLayout_2.addWidget(self.label_11, 2, 2, 1, 1)
+        self.joinButton = QtWidgets.QPushButton(parent=self.coloursGroup)
+        self.joinButton.setMinimumSize(QtCore.QSize(100, 0))
+        self.joinButton.setText("")
+        self.joinButton.setObjectName("joinButton")
+        self.gridLayout_2.addWidget(self.joinButton, 2, 3, 1, 1)
+        self.label_6 = QtWidgets.QLabel(parent=self.coloursGroup)
+        self.label_6.setObjectName("label_6")
+        self.gridLayout_2.addWidget(self.label_6, 3, 0, 1, 1)
+        self.errorButton = QtWidgets.QPushButton(parent=self.coloursGroup)
+        self.errorButton.setMinimumSize(QtCore.QSize(100, 0))
+        self.errorButton.setText("")
+        self.errorButton.setObjectName("errorButton")
+        self.gridLayout_2.addWidget(self.errorButton, 3, 1, 1, 1)
+        self.label_12 = QtWidgets.QLabel(parent=self.coloursGroup)
+        self.label_12.setObjectName("label_12")
+        self.gridLayout_2.addWidget(self.label_12, 3, 2, 1, 1)
+        self.leaveButton = QtWidgets.QPushButton(parent=self.coloursGroup)
+        self.leaveButton.setMinimumSize(QtCore.QSize(100, 0))
+        self.leaveButton.setText("")
+        self.leaveButton.setObjectName("leaveButton")
+        self.gridLayout_2.addWidget(self.leaveButton, 3, 3, 1, 1)
+        self.label_7 = QtWidgets.QLabel(parent=self.coloursGroup)
+        self.label_7.setObjectName("label_7")
+        self.gridLayout_2.addWidget(self.label_7, 4, 0, 1, 1)
+        self.timestampButton = QtWidgets.QPushButton(parent=self.coloursGroup)
+        self.timestampButton.setMinimumSize(QtCore.QSize(100, 0))
+        self.timestampButton.setText("")
+        self.timestampButton.setObjectName("timestampButton")
+        self.gridLayout_2.addWidget(self.timestampButton, 4, 1, 1, 1)
+        self.label_13 = QtWidgets.QLabel(parent=self.coloursGroup)
+        self.label_13.setObjectName("label_13")
+        self.gridLayout_2.addWidget(self.label_13, 4, 2, 1, 1)
+        self.infoButton = QtWidgets.QPushButton(parent=self.coloursGroup)
+        self.infoButton.setMinimumSize(QtCore.QSize(100, 0))
+        self.infoButton.setText("")
+        self.infoButton.setObjectName("infoButton")
+        self.gridLayout_2.addWidget(self.infoButton, 4, 3, 1, 1)
+        self.label_8 = QtWidgets.QLabel(parent=self.coloursGroup)
+        self.label_8.setObjectName("label_8")
+        self.gridLayout_2.addWidget(self.label_8, 5, 0, 1, 1)
+        self.hyperlinkButton = QtWidgets.QPushButton(parent=self.coloursGroup)
+        self.hyperlinkButton.setMinimumSize(QtCore.QSize(100, 0))
+        self.hyperlinkButton.setText("")
+        self.hyperlinkButton.setObjectName("hyperlinkButton")
+        self.gridLayout_2.addWidget(self.hyperlinkButton, 5, 1, 1, 1)
+        self.verticalLayout.addWidget(self.coloursGroup)
+        self.textColoursGroup = QtWidgets.QGroupBox(parent=IrcPage)
+        self.textColoursGroup.setCheckable(True)
+        self.textColoursGroup.setObjectName("textColoursGroup")
+        self.gridLayout_4 = QtWidgets.QGridLayout(self.textColoursGroup)
+        self.gridLayout_4.setObjectName("gridLayout_4")
+        self.label_15 = QtWidgets.QLabel(parent=self.textColoursGroup)
+        self.label_15.setText("0:")
+        self.label_15.setObjectName("label_15")
+        self.gridLayout_4.addWidget(self.label_15, 0, 0, 1, 1)
+        self.ircColor0Button = QtWidgets.QPushButton(parent=self.textColoursGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.ircColor0Button.sizePolicy().hasHeightForWidth())
+        self.ircColor0Button.setSizePolicy(sizePolicy)
+        self.ircColor0Button.setObjectName("ircColor0Button")
+        self.gridLayout_4.addWidget(self.ircColor0Button, 0, 1, 1, 1)
+        self.label_19 = QtWidgets.QLabel(parent=self.textColoursGroup)
+        self.label_19.setText("4:")
+        self.label_19.setObjectName("label_19")
+        self.gridLayout_4.addWidget(self.label_19, 0, 2, 1, 1)
+        self.ircColor4Button = QtWidgets.QPushButton(parent=self.textColoursGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.ircColor4Button.sizePolicy().hasHeightForWidth())
+        self.ircColor4Button.setSizePolicy(sizePolicy)
+        self.ircColor4Button.setObjectName("ircColor4Button")
+        self.gridLayout_4.addWidget(self.ircColor4Button, 0, 3, 1, 1)
+        self.label_23 = QtWidgets.QLabel(parent=self.textColoursGroup)
+        self.label_23.setText("8:")
+        self.label_23.setObjectName("label_23")
+        self.gridLayout_4.addWidget(self.label_23, 0, 4, 1, 1)
+        self.ircColor8Button = QtWidgets.QPushButton(parent=self.textColoursGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.ircColor8Button.sizePolicy().hasHeightForWidth())
+        self.ircColor8Button.setSizePolicy(sizePolicy)
+        self.ircColor8Button.setObjectName("ircColor8Button")
+        self.gridLayout_4.addWidget(self.ircColor8Button, 0, 5, 1, 1)
+        self.label_27 = QtWidgets.QLabel(parent=self.textColoursGroup)
+        self.label_27.setText("12:")
+        self.label_27.setObjectName("label_27")
+        self.gridLayout_4.addWidget(self.label_27, 0, 6, 1, 1)
+        self.ircColor12Button = QtWidgets.QPushButton(parent=self.textColoursGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.ircColor12Button.sizePolicy().hasHeightForWidth())
+        self.ircColor12Button.setSizePolicy(sizePolicy)
+        self.ircColor12Button.setObjectName("ircColor12Button")
+        self.gridLayout_4.addWidget(self.ircColor12Button, 0, 7, 1, 1)
+        self.label_16 = QtWidgets.QLabel(parent=self.textColoursGroup)
+        self.label_16.setText("1:")
+        self.label_16.setObjectName("label_16")
+        self.gridLayout_4.addWidget(self.label_16, 1, 0, 1, 1)
+        self.ircColor1Button = QtWidgets.QPushButton(parent=self.textColoursGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.ircColor1Button.sizePolicy().hasHeightForWidth())
+        self.ircColor1Button.setSizePolicy(sizePolicy)
+        self.ircColor1Button.setObjectName("ircColor1Button")
+        self.gridLayout_4.addWidget(self.ircColor1Button, 1, 1, 1, 1)
+        self.label_20 = QtWidgets.QLabel(parent=self.textColoursGroup)
+        self.label_20.setText("5:")
+        self.label_20.setObjectName("label_20")
+        self.gridLayout_4.addWidget(self.label_20, 1, 2, 1, 1)
+        self.ircColor5Button = QtWidgets.QPushButton(parent=self.textColoursGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.ircColor5Button.sizePolicy().hasHeightForWidth())
+        self.ircColor5Button.setSizePolicy(sizePolicy)
+        self.ircColor5Button.setObjectName("ircColor5Button")
+        self.gridLayout_4.addWidget(self.ircColor5Button, 1, 3, 1, 1)
+        self.label_24 = QtWidgets.QLabel(parent=self.textColoursGroup)
+        self.label_24.setText("9:")
+        self.label_24.setObjectName("label_24")
+        self.gridLayout_4.addWidget(self.label_24, 1, 4, 1, 1)
+        self.ircColor9Button = QtWidgets.QPushButton(parent=self.textColoursGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.ircColor9Button.sizePolicy().hasHeightForWidth())
+        self.ircColor9Button.setSizePolicy(sizePolicy)
+        self.ircColor9Button.setObjectName("ircColor9Button")
+        self.gridLayout_4.addWidget(self.ircColor9Button, 1, 5, 1, 1)
+        self.label_28 = QtWidgets.QLabel(parent=self.textColoursGroup)
+        self.label_28.setText("13:")
+        self.label_28.setObjectName("label_28")
+        self.gridLayout_4.addWidget(self.label_28, 1, 6, 1, 1)
+        self.ircColor13Button = QtWidgets.QPushButton(parent=self.textColoursGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.ircColor13Button.sizePolicy().hasHeightForWidth())
+        self.ircColor13Button.setSizePolicy(sizePolicy)
+        self.ircColor13Button.setObjectName("ircColor13Button")
+        self.gridLayout_4.addWidget(self.ircColor13Button, 1, 7, 1, 1)
+        self.label_17 = QtWidgets.QLabel(parent=self.textColoursGroup)
+        self.label_17.setText("2:")
+        self.label_17.setObjectName("label_17")
+        self.gridLayout_4.addWidget(self.label_17, 2, 0, 1, 1)
+        self.ircColor2Button = QtWidgets.QPushButton(parent=self.textColoursGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.ircColor2Button.sizePolicy().hasHeightForWidth())
+        self.ircColor2Button.setSizePolicy(sizePolicy)
+        self.ircColor2Button.setObjectName("ircColor2Button")
+        self.gridLayout_4.addWidget(self.ircColor2Button, 2, 1, 1, 1)
+        self.label_21 = QtWidgets.QLabel(parent=self.textColoursGroup)
+        self.label_21.setText("6:")
+        self.label_21.setObjectName("label_21")
+        self.gridLayout_4.addWidget(self.label_21, 2, 2, 1, 1)
+        self.ircColor6Button = QtWidgets.QPushButton(parent=self.textColoursGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.ircColor6Button.sizePolicy().hasHeightForWidth())
+        self.ircColor6Button.setSizePolicy(sizePolicy)
+        self.ircColor6Button.setObjectName("ircColor6Button")
+        self.gridLayout_4.addWidget(self.ircColor6Button, 2, 3, 1, 1)
+        self.label_25 = QtWidgets.QLabel(parent=self.textColoursGroup)
+        self.label_25.setText("10:")
+        self.label_25.setObjectName("label_25")
+        self.gridLayout_4.addWidget(self.label_25, 2, 4, 1, 1)
+        self.ircColor10Button = QtWidgets.QPushButton(parent=self.textColoursGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.ircColor10Button.sizePolicy().hasHeightForWidth())
+        self.ircColor10Button.setSizePolicy(sizePolicy)
+        self.ircColor10Button.setObjectName("ircColor10Button")
+        self.gridLayout_4.addWidget(self.ircColor10Button, 2, 5, 1, 1)
+        self.label_29 = QtWidgets.QLabel(parent=self.textColoursGroup)
+        self.label_29.setText("14:")
+        self.label_29.setObjectName("label_29")
+        self.gridLayout_4.addWidget(self.label_29, 2, 6, 1, 1)
+        self.ircColor14Button = QtWidgets.QPushButton(parent=self.textColoursGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.ircColor14Button.sizePolicy().hasHeightForWidth())
+        self.ircColor14Button.setSizePolicy(sizePolicy)
+        self.ircColor14Button.setObjectName("ircColor14Button")
+        self.gridLayout_4.addWidget(self.ircColor14Button, 2, 7, 1, 1)
+        self.label_18 = QtWidgets.QLabel(parent=self.textColoursGroup)
+        self.label_18.setText("3:")
+        self.label_18.setObjectName("label_18")
+        self.gridLayout_4.addWidget(self.label_18, 3, 0, 1, 1)
+        self.ircColor3Button = QtWidgets.QPushButton(parent=self.textColoursGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.ircColor3Button.sizePolicy().hasHeightForWidth())
+        self.ircColor3Button.setSizePolicy(sizePolicy)
+        self.ircColor3Button.setObjectName("ircColor3Button")
+        self.gridLayout_4.addWidget(self.ircColor3Button, 3, 1, 1, 1)
+        self.label_22 = QtWidgets.QLabel(parent=self.textColoursGroup)
+        self.label_22.setText("7:")
+        self.label_22.setObjectName("label_22")
+        self.gridLayout_4.addWidget(self.label_22, 3, 2, 1, 1)
+        self.ircColor7Button = QtWidgets.QPushButton(parent=self.textColoursGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.ircColor7Button.sizePolicy().hasHeightForWidth())
+        self.ircColor7Button.setSizePolicy(sizePolicy)
+        self.ircColor7Button.setObjectName("ircColor7Button")
+        self.gridLayout_4.addWidget(self.ircColor7Button, 3, 3, 1, 1)
+        self.label_26 = QtWidgets.QLabel(parent=self.textColoursGroup)
+        self.label_26.setText("11:")
+        self.label_26.setObjectName("label_26")
+        self.gridLayout_4.addWidget(self.label_26, 3, 4, 1, 1)
+        self.ircColor11Button = QtWidgets.QPushButton(parent=self.textColoursGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.ircColor11Button.sizePolicy().hasHeightForWidth())
+        self.ircColor11Button.setSizePolicy(sizePolicy)
+        self.ircColor11Button.setObjectName("ircColor11Button")
+        self.gridLayout_4.addWidget(self.ircColor11Button, 3, 5, 1, 1)
+        self.label_30 = QtWidgets.QLabel(parent=self.textColoursGroup)
+        self.label_30.setText("15:")
+        self.label_30.setObjectName("label_30")
+        self.gridLayout_4.addWidget(self.label_30, 3, 6, 1, 1)
+        self.ircColor15Button = QtWidgets.QPushButton(parent=self.textColoursGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.ircColor15Button.sizePolicy().hasHeightForWidth())
+        self.ircColor15Button.setSizePolicy(sizePolicy)
+        self.ircColor15Button.setObjectName("ircColor15Button")
+        self.gridLayout_4.addWidget(self.ircColor15Button, 3, 7, 1, 1)
+        self.verticalLayout.addWidget(self.textColoursGroup)
+        self.notificationsGroup = QtWidgets.QGroupBox(parent=IrcPage)
+        self.notificationsGroup.setCheckable(True)
+        self.notificationsGroup.setObjectName("notificationsGroup")
+        self.gridLayout_3 = QtWidgets.QGridLayout(self.notificationsGroup)
+        self.gridLayout_3.setObjectName("gridLayout_3")
+        self.joinLeaveCheckBox = QtWidgets.QCheckBox(parent=self.notificationsGroup)
+        self.joinLeaveCheckBox.setObjectName("joinLeaveCheckBox")
+        self.gridLayout_3.addWidget(self.joinLeaveCheckBox, 0, 0, 1, 1)
+        self.messageCheckBox = QtWidgets.QCheckBox(parent=self.notificationsGroup)
+        self.messageCheckBox.setObjectName("messageCheckBox")
+        self.gridLayout_3.addWidget(self.messageCheckBox, 1, 0, 1, 1)
+        self.ownNickCheckBox = QtWidgets.QCheckBox(parent=self.notificationsGroup)
+        self.ownNickCheckBox.setObjectName("ownNickCheckBox")
+        self.gridLayout_3.addWidget(self.ownNickCheckBox, 0, 1, 1, 1)
+        self.verticalLayout.addWidget(self.notificationsGroup)
+        self.whoGroup = QtWidgets.QGroupBox(parent=IrcPage)
+        self.whoGroup.setCheckable(True)
+        self.whoGroup.setChecked(False)
+        self.whoGroup.setObjectName("whoGroup")
+        self.gridLayout_5 = QtWidgets.QGridLayout(self.whoGroup)
+        self.gridLayout_5.setObjectName("gridLayout_5")
+        self.label_31 = QtWidgets.QLabel(parent=self.whoGroup)
+        self.label_31.setObjectName("label_31")
+        self.gridLayout_5.addWidget(self.label_31, 0, 0, 1, 1)
+        self.whoUsersSpinBox = QtWidgets.QSpinBox(parent=self.whoGroup)
+        self.whoUsersSpinBox.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
+        self.whoUsersSpinBox.setMaximum(999)
+        self.whoUsersSpinBox.setObjectName("whoUsersSpinBox")
+        self.gridLayout_5.addWidget(self.whoUsersSpinBox, 0, 1, 1, 1)
+        spacerItem = QtWidgets.QSpacerItem(174, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+        self.gridLayout_5.addItem(spacerItem, 0, 2, 1, 1)
+        self.label_32 = QtWidgets.QLabel(parent=self.whoGroup)
+        self.label_32.setObjectName("label_32")
+        self.gridLayout_5.addWidget(self.label_32, 1, 0, 1, 1)
+        self.whoIntervalSpinBox = QtWidgets.QSpinBox(parent=self.whoGroup)
+        self.whoIntervalSpinBox.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
+        self.whoIntervalSpinBox.setMinimum(30)
+        self.whoIntervalSpinBox.setMaximum(600)
+        self.whoIntervalSpinBox.setSingleStep(10)
+        self.whoIntervalSpinBox.setObjectName("whoIntervalSpinBox")
+        self.gridLayout_5.addWidget(self.whoIntervalSpinBox, 1, 1, 1, 1)
+        self.verticalLayout.addWidget(self.whoGroup)
+        self.markerGroup = QtWidgets.QGroupBox(parent=IrcPage)
+        self.markerGroup.setObjectName("markerGroup")
+        self.gridLayout_6 = QtWidgets.QGridLayout(self.markerGroup)
+        self.gridLayout_6.setObjectName("gridLayout_6")
+        self.markWhenHiddenCheckBox = QtWidgets.QCheckBox(parent=self.markerGroup)
+        self.markWhenHiddenCheckBox.setObjectName("markWhenHiddenCheckBox")
+        self.gridLayout_6.addWidget(self.markWhenHiddenCheckBox, 0, 0, 1, 3)
+        self.label_33 = QtWidgets.QLabel(parent=self.markerGroup)
+        self.label_33.setObjectName("label_33")
+        self.gridLayout_6.addWidget(self.label_33, 1, 0, 1, 1)
+        self.markerForegroundButton = QtWidgets.QPushButton(parent=self.markerGroup)
+        self.markerForegroundButton.setMinimumSize(QtCore.QSize(100, 0))
+        self.markerForegroundButton.setText("")
+        self.markerForegroundButton.setObjectName("markerForegroundButton")
+        self.gridLayout_6.addWidget(self.markerForegroundButton, 1, 1, 1, 1)
+        spacerItem1 = QtWidgets.QSpacerItem(240, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+        self.gridLayout_6.addItem(spacerItem1, 1, 2, 2, 1)
+        self.markerBackgroundButton = QtWidgets.QPushButton(parent=self.markerGroup)
+        self.markerBackgroundButton.setMinimumSize(QtCore.QSize(100, 0))
+        self.markerBackgroundButton.setText("")
+        self.markerBackgroundButton.setObjectName("markerBackgroundButton")
+        self.gridLayout_6.addWidget(self.markerBackgroundButton, 2, 1, 2, 1)
+        self.label_34 = QtWidgets.QLabel(parent=self.markerGroup)
+        self.label_34.setObjectName("label_34")
+        self.gridLayout_6.addWidget(self.label_34, 3, 0, 1, 1)
+        self.verticalLayout.addWidget(self.markerGroup)
+        spacerItem2 = QtWidgets.QSpacerItem(20, 79, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+        self.verticalLayout.addItem(spacerItem2)
+
+        self.retranslateUi(IrcPage)
+        QtCore.QMetaObject.connectSlotsByName(IrcPage)
+        IrcPage.setTabOrder(self.timestampGroup, self.timeFormatCombo)
+        IrcPage.setTabOrder(self.timeFormatCombo, self.dateFormatCombo)
+        IrcPage.setTabOrder(self.dateFormatCombo, self.showDateCheckBox)
+        IrcPage.setTabOrder(self.showDateCheckBox, self.networkButton)
+        IrcPage.setTabOrder(self.networkButton, self.serverButton)
+        IrcPage.setTabOrder(self.serverButton, self.channelButton)
+        IrcPage.setTabOrder(self.channelButton, self.errorButton)
+        IrcPage.setTabOrder(self.errorButton, self.timestampButton)
+        IrcPage.setTabOrder(self.timestampButton, self.hyperlinkButton)
+        IrcPage.setTabOrder(self.hyperlinkButton, self.nickButton)
+        IrcPage.setTabOrder(self.nickButton, self.ownNickButton)
+        IrcPage.setTabOrder(self.ownNickButton, self.joinButton)
+        IrcPage.setTabOrder(self.joinButton, self.leaveButton)
+        IrcPage.setTabOrder(self.leaveButton, self.infoButton)
+        IrcPage.setTabOrder(self.infoButton, self.textColoursGroup)
+        IrcPage.setTabOrder(self.textColoursGroup, self.ircColor0Button)
+        IrcPage.setTabOrder(self.ircColor0Button, self.ircColor1Button)
+        IrcPage.setTabOrder(self.ircColor1Button, self.ircColor2Button)
+        IrcPage.setTabOrder(self.ircColor2Button, self.ircColor3Button)
+        IrcPage.setTabOrder(self.ircColor3Button, self.ircColor4Button)
+        IrcPage.setTabOrder(self.ircColor4Button, self.ircColor5Button)
+        IrcPage.setTabOrder(self.ircColor5Button, self.ircColor6Button)
+        IrcPage.setTabOrder(self.ircColor6Button, self.ircColor7Button)
+        IrcPage.setTabOrder(self.ircColor7Button, self.ircColor8Button)
+        IrcPage.setTabOrder(self.ircColor8Button, self.ircColor9Button)
+        IrcPage.setTabOrder(self.ircColor9Button, self.ircColor10Button)
+        IrcPage.setTabOrder(self.ircColor10Button, self.ircColor11Button)
+        IrcPage.setTabOrder(self.ircColor11Button, self.ircColor12Button)
+        IrcPage.setTabOrder(self.ircColor12Button, self.ircColor13Button)
+        IrcPage.setTabOrder(self.ircColor13Button, self.ircColor14Button)
+        IrcPage.setTabOrder(self.ircColor14Button, self.ircColor15Button)
+        IrcPage.setTabOrder(self.ircColor15Button, self.notificationsGroup)
+        IrcPage.setTabOrder(self.notificationsGroup, self.joinLeaveCheckBox)
+        IrcPage.setTabOrder(self.joinLeaveCheckBox, self.messageCheckBox)
+        IrcPage.setTabOrder(self.messageCheckBox, self.ownNickCheckBox)
+        IrcPage.setTabOrder(self.ownNickCheckBox, self.whoGroup)
+        IrcPage.setTabOrder(self.whoGroup, self.whoUsersSpinBox)
+        IrcPage.setTabOrder(self.whoUsersSpinBox, self.whoIntervalSpinBox)
+        IrcPage.setTabOrder(self.whoIntervalSpinBox, self.markWhenHiddenCheckBox)
+        IrcPage.setTabOrder(self.markWhenHiddenCheckBox, self.markerForegroundButton)
+        IrcPage.setTabOrder(self.markerForegroundButton, self.markerBackgroundButton)
+
+    def retranslateUi(self, IrcPage):
+        _translate = QtCore.QCoreApplication.translate
+        self.headerLabel.setText(_translate("IrcPage", "<b>Configure IRC</b>"))
+        self.timestampGroup.setToolTip(_translate("IrcPage", "Enable to show timestamps"))
+        self.timestampGroup.setTitle(_translate("IrcPage", "Show Timestamps"))
+        self.label.setText(_translate("IrcPage", "Time Format:"))
+        self.timeFormatCombo.setToolTip(_translate("IrcPage", "Select the time format to use"))
+        self.label_2.setText(_translate("IrcPage", "Date Format"))
+        self.dateFormatCombo.setToolTip(_translate("IrcPage", "Select the date format to use"))
+        self.showDateCheckBox.setToolTip(_translate("IrcPage", "Select to show the date in timestamps"))
+        self.showDateCheckBox.setText(_translate("IrcPage", "Show Date"))
+        self.coloursGroup.setTitle(_translate("IrcPage", "Colors"))
+        self.label_3.setText(_translate("IrcPage", "Network Messages:"))
+        self.networkButton.setToolTip(_translate("IrcPage", "Select the color for network messages"))
+        self.label_9.setText(_translate("IrcPage", "Nick Names:"))
+        self.nickButton.setToolTip(_translate("IrcPage", "Select the color for nick names"))
+        self.label_4.setText(_translate("IrcPage", "Server Messages:"))
+        self.serverButton.setToolTip(_translate("IrcPage", "Select the color for server messages"))
+        self.label_10.setText(_translate("IrcPage", "Own Nick Name:"))
+        self.ownNickButton.setToolTip(_translate("IrcPage", "Select the color for own nick name"))
+        self.label_5.setText(_translate("IrcPage", "Channel Messages:"))
+        self.channelButton.setToolTip(_translate("IrcPage", "Select the color for channel messages"))
+        self.label_11.setText(_translate("IrcPage", "Join Channel:"))
+        self.joinButton.setToolTip(_translate("IrcPage", "Select the color for join channel messages"))
+        self.label_6.setText(_translate("IrcPage", "Error Messages:"))
+        self.errorButton.setToolTip(_translate("IrcPage", "Select the color for error messages"))
+        self.label_12.setText(_translate("IrcPage", "Leave Channel:"))
+        self.leaveButton.setToolTip(_translate("IrcPage", "Select the color for leave channel messages"))
+        self.label_7.setText(_translate("IrcPage", "Timestamp:"))
+        self.timestampButton.setToolTip(_translate("IrcPage", "Select the color for timestamps"))
+        self.label_13.setText(_translate("IrcPage", "Channel Info:"))
+        self.infoButton.setToolTip(_translate("IrcPage", "Select the color for channel info messages"))
+        self.label_8.setText(_translate("IrcPage", "Hyperlink:"))
+        self.hyperlinkButton.setToolTip(_translate("IrcPage", "Select the color for hyperlinks"))
+        self.textColoursGroup.setToolTip(_translate("IrcPage", "Enable to allow colored text in IRC messages"))
+        self.textColoursGroup.setTitle(_translate("IrcPage", "Allow Colored Text in IRC Messages"))
+        self.notificationsGroup.setToolTip(_translate("IrcPage", "Enable to show notifications"))
+        self.notificationsGroup.setTitle(_translate("IrcPage", "Show Notifications"))
+        self.joinLeaveCheckBox.setToolTip(_translate("IrcPage", "Select to show a notification for join and leave events"))
+        self.joinLeaveCheckBox.setText(_translate("IrcPage", "Join/Leave Event"))
+        self.messageCheckBox.setToolTip(_translate("IrcPage", "Select to show a notification for every message"))
+        self.messageCheckBox.setText(_translate("IrcPage", "Every Message"))
+        self.ownNickCheckBox.setToolTip(_translate("IrcPage", "Select to show a notification for every mentioning of your nick"))
+        self.ownNickCheckBox.setText(_translate("IrcPage", "Mentioning of Own Nick"))
+        self.whoGroup.setToolTip(_translate("IrcPage", "Select this to enable the automatic lookup of user information for joined channels"))
+        self.whoGroup.setTitle(_translate("IrcPage", "Enable Automatic User Information Lookup (/WHO)"))
+        self.label_31.setText(_translate("IrcPage", "Max. Number of Users in Channel:"))
+        self.whoUsersSpinBox.setToolTip(_translate("IrcPage", "Enter the maximum numbers of users in a channel allowed for this function"))
+        self.label_32.setText(_translate("IrcPage", "Update Interval:"))
+        self.whoIntervalSpinBox.setToolTip(_translate("IrcPage", "Enter the user information update interval"))
+        self.whoIntervalSpinBox.setSuffix(_translate("IrcPage", " s"))
+        self.markerGroup.setTitle(_translate("IrcPage", "Marker"))
+        self.markWhenHiddenCheckBox.setToolTip(_translate("IrcPage", "Select to mark the current position, when the chat window is hidden"))
+        self.markWhenHiddenCheckBox.setText(_translate("IrcPage", "Mark Current Position When Hidden"))
+        self.label_33.setText(_translate("IrcPage", "Marker Foreground:"))
+        self.markerForegroundButton.setToolTip(_translate("IrcPage", "Select the foreground color for the marker"))
+        self.markerBackgroundButton.setToolTip(_translate("IrcPage", "Select the background color for the marker"))
+        self.label_34.setText(_translate("IrcPage", "Marker Background:"))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/ConfigurationPage/__init__.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package implementing the configuration page for the IRC UI extension.
+"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/IrcChannelEditDialog.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to edit channel data.
+"""
+
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox
+
+from .Ui_IrcChannelEditDialog import Ui_IrcChannelEditDialog
+
+
+class IrcChannelEditDialog(QDialog, Ui_IrcChannelEditDialog):
+    """
+    Class implementing a dialog to edit channel data.
+    """
+
+    def __init__(self, name, key, autoJoin, edit, parent=None):
+        """
+        Constructor
+
+        @param name channel name
+        @type str
+        @param key channel key
+        @type str
+        @param autoJoin flag indicating, that the channel should
+            be joined automatically
+        @type bool
+        @param edit flag indicating an edit of an existing
+            channel
+        @type bool
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        self.nameEdit.setText(name)
+        self.keyEdit.setText(key)
+        self.autoJoinCheckBox.setChecked(autoJoin)
+
+        self.nameEdit.setReadOnly(edit)
+
+        self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(name != "")
+
+        msh = self.minimumSizeHint()
+        self.resize(max(self.width(), msh.width()), msh.height())
+
+    @pyqtSlot(str)
+    def on_nameEdit_textChanged(self, txt):
+        """
+        Private slot to handle changes of the given name.
+
+        @param txt text of the edit
+        @type str
+        """
+        self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(txt != "")
+
+    def getData(self):
+        """
+        Public method to get the channel data.
+
+        @return tuple giving the channel name, channel key and a flag
+            indicating, that the channel should be joined automatically
+        @rtype tuple of (str, str, bool)
+        """
+        return (
+            self.nameEdit.text(),
+            self.keyEdit.text(),
+            self.autoJoinCheckBox.isChecked(),
+        )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/IrcChannelEditDialog.ui	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IrcChannelEditDialog</class>
+ <widget class="QDialog" name="IrcChannelEditDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>303</width>
+    <height>128</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>IRC Channel</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Name:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QLineEdit" name="nameEdit">
+     <property name="toolTip">
+      <string>Enter the channel name</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="label_2">
+     <property name="text">
+      <string>Key:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <widget class="QLineEdit" name="keyEdit">
+     <property name="toolTip">
+      <string>Enter the channel key/password</string>
+     </property>
+     <property name="echoMode">
+      <enum>QLineEdit::Password</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <widget class="QCheckBox" name="autoJoinCheckBox">
+     <property name="toolTip">
+      <string>Select to join this channel automatically</string>
+     </property>
+     <property name="text">
+      <string>Join channel automatically</string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="0" colspan="2">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>nameEdit</tabstop>
+  <tabstop>keyEdit</tabstop>
+  <tabstop>autoJoinCheckBox</tabstop>
+  <tabstop>buttonBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>IrcChannelEditDialog</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>IrcChannelEditDialog</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/ExtensionIrc/IrcChannelWidget.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,2257 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the IRC channel widget.
+"""
+
+import pathlib
+import re
+from itertools import zip_longest
+
+from PyQt6.QtCore import (
+    QCoreApplication,
+    QDateTime,
+    QPoint,
+    QTimer,
+    QUrl,
+    pyqtSignal,
+    pyqtSlot,
+)
+from PyQt6.QtGui import QDesktopServices, QIcon, QPainter, QTextCursor
+from PyQt6.QtWidgets import (
+    QApplication,
+    QInputDialog,
+    QLineEdit,
+    QListWidgetItem,
+    QMenu,
+    QWidget,
+)
+
+from eric7 import EricUtilities
+from eric7.__version__ import Version
+from eric7.EricGui import EricPixmapCache
+from eric7.EricWidgets import EricFileDialog, EricMessageBox
+from eric7.EricWidgets.EricApplication import ericApp
+from eric7.SystemUtilities import OSUtilities
+from eric7.UI.Info import Copyright
+from PluginExtensionIrc import ircExtensionPluginObject
+
+from .IrcUtilities import getChannelModesDict, ircFilter, ircTimestamp
+from .Ui_IrcChannelWidget import Ui_IrcChannelWidget
+
+
+class IrcUserItem(QListWidgetItem):
+    """
+    Class implementing a list widget item containing an IRC channel user.
+    """
+
+    Normal = 0x00  # no privileges
+    Operator = 0x01  # channel operator
+    Voice = 0x02  # voice operator
+    Admin = 0x04  # administrator
+    Halfop = 0x08  # half operator
+    Owner = 0x10  # channel owner
+    Away = 0x80  # user away
+
+    PrivilegeMapping = {
+        "a": Away,
+        "o": Operator,
+        "O": Owner,
+        "v": Voice,
+    }
+
+    def __init__(self, name, parent=None):
+        """
+        Constructor
+
+        @param name string with user name and privilege prefix
+        @type str
+        @param parent reference to the parent widget
+        @type QListWidget or QListWidgetItem
+        """
+        super().__init__(name, parent)
+
+        self.__privilege = IrcUserItem.Normal
+        self.__name = name
+        self.__ignored = False
+
+        self.__setText()
+        self.__setIcon()
+
+    def name(self):
+        """
+        Public method to get the user name.
+
+        @return user name
+        @rtype str
+        """
+        return self.__name
+
+    def setName(self, name):
+        """
+        Public method to set a new nick name.
+
+        @param name new nick name for the user
+        @type str
+        """
+        self.__name = name
+        self.__setText()
+
+    def changePrivilege(self, privilege):
+        """
+        Public method to set or unset a user privilege.
+
+        @param privilege privilege to set or unset
+        @type str
+        """
+        oper = privilege[0]
+        priv = privilege[1]
+        if priv in IrcUserItem.PrivilegeMapping:
+            if oper == "+":
+                self.__privilege |= IrcUserItem.PrivilegeMapping[priv]
+            elif oper == "-":
+                self.__privilege &= ~IrcUserItem.PrivilegeMapping[priv]
+        self.__setIcon()
+
+    def clearPrivileges(self):
+        """
+        Public method to clear the user privileges.
+        """
+        self.__privilege = IrcUserItem.Normal
+        self.__setIcon()
+
+    def __setText(self):
+        """
+        Private method to set the user item text.
+        """
+        if self.__ignored:
+            self.setText(
+                QCoreApplication.translate("IrcUserItem", "{0} (ignored)").format(
+                    self.__name
+                )
+            )
+        else:
+            self.setText(self.__name)
+
+    def __setIcon(self):
+        """
+        Private method to set the icon dependent on user privileges.
+        """
+        # step 1: determine the icon
+        if self.__privilege & IrcUserItem.Voice:
+            icon = ircExtensionPluginObject.getIcon("ircVoice")
+        elif self.__privilege & IrcUserItem.Owner:
+            icon = ircExtensionPluginObject.getIcon("ircOwner")
+        elif self.__privilege & IrcUserItem.Operator:
+            icon = ircExtensionPluginObject.getIcon("ircOp")
+        elif self.__privilege & IrcUserItem.Halfop:
+            icon = ircExtensionPluginObject.getIcon("ircHalfop")
+        elif self.__privilege & IrcUserItem.Admin:
+            icon = ircExtensionPluginObject.getIcon("ircAdmin")
+        else:
+            icon = ircExtensionPluginObject.getIcon("ircNormal")
+        if self.__privilege & IrcUserItem.Away:
+            icon = self.__awayIcon(icon)
+
+        # step 2: set the icon
+        self.setIcon(icon)
+
+    def __awayIcon(self, icon):
+        """
+        Private method to convert an icon to an away icon.
+
+        @param icon icon to be converted
+        @type QIcon
+        @return away icon
+        @rtype QIcon
+        """
+        pix1 = icon.pixmap(16, 16)
+        pix2 = ircExtensionPluginObject.getPixmap("ircAway")
+        painter = QPainter(pix1)
+        painter.drawPixmap(0, 0, pix2)
+        painter.end()
+        return QIcon(pix1)
+
+    def parseWhoFlags(self, flags):
+        """
+        Public method to parse the user flags reported by a WHO command.
+
+        @param flags user flags as reported by WHO
+        @type str
+        """
+        # H The user is not away.
+        # G The user is set away.
+        # * The user is an IRC operator.
+        # @ The user is a channel op in the channel listed in the first field.
+        # + The user is voiced in the channel listed.
+        if flags.endswith("@"):
+            privilege = IrcUserItem.Operator
+        elif flags.endswith("+"):
+            privilege = IrcUserItem.Voice
+        else:
+            privilege = IrcUserItem.Normal
+        if "*" in flags:
+            privilege = IrcUserItem.Admin
+        if flags.startswith("G"):
+            privilege |= IrcUserItem.Away
+        self.__privilege = privilege
+        self.__setIcon()
+
+    def canChangeTopic(self):
+        """
+        Public method to check, if the user is allowed to change the topic.
+
+        @return flag indicating that the topic can be changed
+        @rtype bool
+        """
+        return (
+            bool(self.__privilege & IrcUserItem.Operator)
+            or bool(self.__privilege & IrcUserItem.Admin)
+            or bool(self.__privilege & IrcUserItem.Owner)
+        )
+
+    def setIgnored(self, ignored):
+        """
+        Public method to set the user status to ignored.
+
+        @param ignored flag indicating the new ignored status
+        @type bool
+        """
+        self.__ignored = ignored
+        self.__setText()
+
+    def isIgnored(self):
+        """
+        Public method to check, if this user is ignored.
+
+        @return flag indicating the ignored status
+        @rtype bool
+        """
+        return self.__ignored
+
+
+class IrcChannelWidget(QWidget, Ui_IrcChannelWidget):
+    """
+    Class implementing the IRC channel widget.
+
+    @signal sendData(str) emitted to send a message to the channel
+    @signal sendCtcpRequest(str, str, str) emitted to send a CTCP request
+    @signal sendCtcpReply(str, str) emitted to send a CTCP reply
+    @signal channelClosed(str) emitted after the user has left the channel
+    @signal openPrivateChat(str) emitted to open a "channel" for private
+        messages
+    @signal awayCommand(str) emitted to set the away status via the /away
+        command
+    @signal leaveChannels(list) emitted to leave a list of channels
+    @signal leaveAllChannels() emitted to leave all channels
+    """
+
+    sendData = pyqtSignal(str)
+    sendCtcpRequest = pyqtSignal(str, str, str)
+    sendCtcpReply = pyqtSignal(str, str)
+    channelClosed = pyqtSignal(str)
+    openPrivateChat = pyqtSignal(str)
+    awayCommand = pyqtSignal(str)
+    leaveChannels = pyqtSignal(list)
+    leaveAllChannels = pyqtSignal()
+
+    UrlRe = re.compile(
+        r"""((?:http|ftp|https):\/\/[\w\-_]+(?:\.[\w\-_]+)+"""
+        r"""(?:[\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?)"""
+    )
+
+    JoinIndicator = "--&gt;"
+    LeaveIndicator = "&lt;--"
+    MessageIndicator = "***"
+
+    def __init__(self, parent=None):
+        """
+        Constructor
+
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        self.__ui = ericApp().getObject("UserInterface")
+        self.__ircWidget = parent
+
+        self.editTopicButton.setIcon(ircExtensionPluginObject.getIcon("ircEditTopic"))
+        self.editTopicButton.hide()
+
+        height = self.usersList.height() + self.messages.height()
+        self.splitter.setSizes([int(height * 0.3), int(height * 0.7)])
+
+        self.__initMessagesMenu()
+        self.__initUsersMenu()
+
+        self.__name = ""
+        self.__userName = ""
+        self.__partMessage = ""
+        self.__prefixToPrivilege = {}
+        self.__private = False
+        self.__privatePartner = ""
+        self.__whoIsNick = ""
+
+        self.__markerLine = ""
+        self.__hidden = True
+
+        self.__serviceNamesLower = ["nickserv", "chanserv", "memoserv"]
+
+        self.__patterns = [
+            # :foo_!n=foo@foohost.bar.net PRIVMSG #eric-ide :some long message
+            # :foo_!n=foo@foohost.bar.net PRIVMSG bar_ :some long message
+            (re.compile(r":([^!]+)!([^ ]+)\sPRIVMSG\s([^ ]+)\s:(.*)"), self.__message),
+            # :foo_!n=foo@foohost.bar.net JOIN :#eric-ide
+            (re.compile(r":([^!]+)!([^ ]+)\sJOIN\s:?([^ ]+)"), self.__userJoin),
+            # :foo_!n=foo@foohost.bar.net PART #eric-ide :part message
+            (re.compile(r":([^!]+).*\sPART\s([^ ]+)\s:(.*)"), self.__userPart),
+            # :foo_!n=foo@foohost.bar.net PART #eric-ide
+            (re.compile(r":([^!]+).*\sPART\s([^ ]+)\s*"), self.__userPart),
+            # :foo_!n=foo@foohost.bar.net QUIT :quit message
+            (re.compile(r":([^!]+).*\sQUIT\s:(.*)"), self.__userQuit),
+            # :foo_!n=foo@foohost.bar.net QUIT
+            (re.compile(r":([^!]+).*\sQUIT\s*"), self.__userQuit),
+            # :foo_!n=foo@foohost.bar.net NICK :newnick
+            (re.compile(r":([^!]+).*\sNICK\s:(.*)"), self.__userNickChange),
+            # :foo_!n=foo@foohost.bar.net MODE #eric-ide +o foo_
+            (
+                re.compile(r":([^!]+).*\sMODE\s([^ ]+)\s([+-][ovO]+)\s([^ ]+).*"),
+                self.__setUserPrivilege,
+            ),
+            # :cameron.libera.chat MODE #eric-ide +ns
+            (re.compile(r":([^ ]+)\sMODE\s([^ ]+)\s(.+)"), self.__updateChannelModes),
+            # :foo_!n=foo@foohost.bar.net TOPIC #eric-ide :eric - Python IDE
+            (re.compile(r":.*\sTOPIC\s([^ ]+)\s:(.*)"), self.__setTopic),
+            # :sturgeon.libera.chat 301 foo_ bar :Gone away for now
+            (re.compile(r":.*\s301\s([^ ]+)\s([^ ]+)\s:(.+)"), self.__userAway),
+            # :sturgeon.libera.chat 315 foo_ #eric-ide :End of /WHO list.
+            (re.compile(r":.*\s315\s[^ ]+\s([^ ]+)\s:(.*)"), self.__whoEnd),
+            # :zelazny.libera.chat 324 foo_ #eric-ide +cnt
+            (re.compile(r":.*\s324\s.*\s([^ ]+)\s(.+)"), self.__channelModes),
+            # :zelazny.libera.chat 328 foo_ #eric-ide :http://www.bugger.com/
+            (re.compile(r":.*\s328\s.*\s([^ ]+)\s:(.+)"), self.__channelUrl),
+            # :zelazny.libera.chat 329 foo_ #eric-ide 1353001005
+            (re.compile(r":.*\s329\s.*\s([^ ]+)\s(.+)"), self.__channelCreated),
+            # :zelazny.libera.chat 332 foo_ #eric-ide :eric support channel
+            (re.compile(r":.*\s332\s.*\s([^ ]+)\s:(.*)"), self.__setTopic),
+            # :zelazny.libera.chat foo_ 333 #eric-ide foo 1353089020
+            (re.compile(r":.*\s333\s.*\s([^ ]+)\s([^ ]+)\s(\d+)"), self.__topicCreated),
+            # :cameron.libera.chat 352 detlev_ #eric-ide ~foo foohost.bar.net
+            # cameron.libera.chat foo_ H :0 Foo Bar
+            (
+                re.compile(
+                    r":.*\s352\s[^ ]+\s([^ ]+)\s([^ ]+)\s([^ ]+)\s[^ ]+\s([^ ]+)"
+                    r"\s([^ ]+)\s:\d+\s(.*)"
+                ),
+                self.__whoEntry,
+            ),
+            # :zelazny.libera.chat 353 foo_ @ #eric-ide :@user1 +user2 user3
+            (re.compile(r":.*\s353\s.*\s.\s([^ ]+)\s:(.*)"), self.__userList),
+            # :sturgeon.libera.chat 354 foo_ 42 ChanServ H@
+            (re.compile(r":.*\s354\s[^ ]+\s42\s([^ ]+)\s(.*)"), self.__autoWhoEntry),
+            # :zelazny.libera.chat 366 foo_ #eric-ide :End of /NAMES list.
+            (re.compile(r":.*\s366\s.*\s([^ ]+)\s:(.*)"), self.__ignore),
+            # :sturgeon.libera.chat 704 foo_ index :Help topics available:
+            (re.compile(r":.*\s70[456]\s[^ ]+\s([^ ]+)\s:(.*)"), self.__help),
+            # WHOIS replies
+            # :sturgeon.libera.chat 311 foo_ bar ~bar barhost.foo.net * :Bar
+            (
+                re.compile(r":.*\s311\s[^ ]+\s([^ ]+)\s([^ ]+)\s([^ ]+)\s\*\s:(.*)"),
+                self.__whoIsUser,
+            ),
+            # :sturgeon.libera.chat 319 foo_ bar :@#eric-ide
+            (re.compile(r":.*\s319\s[^ ]+\s([^ ]+)\s:(.*)"), self.__whoIsChannels),
+            # :sturgeon.libera.chat 312 foo_ bar sturgeon.libera.chat :London
+            (
+                re.compile(r":.*\s312\s[^ ]+\s([^ ]+)\s([^ ]+)\s:(.*)"),
+                self.__whoIsServer,
+            ),
+            # :sturgeon.libera.chat 671 foo_ bar :is using a secure connection
+            (re.compile(r":.*\s671\s[^ ]+\s([^ ]+)\s:.*"), self.__whoIsSecure),
+            # :sturgeon.libera.chat 317 foo_ bar 3758 1355046912 :seconds
+            # idle, signon time
+            (
+                re.compile(r":.*\s317\s[^ ]+\s([^ ]+)\s(\d+)\s(\d+)\s:.*"),
+                self.__whoIsIdle,
+            ),
+            # :sturgeon.libera.chat 330 foo_ bar bar :is logged in as
+            (
+                re.compile(r":.*\s330\s[^ ]+\s([^ ]+)\s([^ ]+)\s:.*"),
+                self.__whoIsAccount,
+            ),
+            # :sturgeon.libera.chat 318 foo_ bar :End of /WHOIS list.
+            (re.compile(r":.*\s318\s[^ ]+\s([^ ]+)\s:(.*)"), self.__whoIsEnd),
+            # :sturgeon.libera.chat 307 foo_ bar :is an identified user
+            (re.compile(r":.*\s307\s[^ ]+\s([^ ]+)\s:(.*)"), self.__whoIsIdentify),
+            # :sturgeon.libera.chat 320 foo_ bar :is an identified user
+            (re.compile(r":.*\s320\s[^ ]+\s([^ ]+)\s:(.*)"), self.__whoIsIdentify),
+            # :sturgeon.libera.chat 310 foo_ bar :is available for help
+            (re.compile(r":.*\s310\s[^ ]+\s([^ ]+)\s:(.*)"), self.__whoIsHelper),
+            # :sturgeon.libera.chat 338 foo_ bar real.ident@real.host
+            # 12.34.56.78 :Actual user@host, Actual IP
+            (
+                re.compile(r":.*\s338\s[^ ]+\s([^ ]+)\s([^ ]+)\s([^ ]+)\s:.*"),
+                self.__whoIsActually,
+            ),
+            # :sturgeon.libera.chat 313 foo_ bar :is an IRC Operator
+            (re.compile(r":.*\s313\s[^ ]+\s([^ ]+)\s:(.*)"), self.__whoIsOperator),
+            # :sturgeon.libera.chat 378 foo_ bar :is connecting from
+            # *@mnch-4d044d5a.pool.mediaWays.net 77.4.77.90
+            (
+                re.compile(r":.*\s378\s[^ ]+\s([^ ]+)\s:.*\s([^ ]+)\s([^ ]+)"),
+                self.__whoIsConnection,
+            ),
+        ]
+
+        self.__autoWhoTemplate = "WHO {0} %tnf,42"
+        self.__autoWhoTimer = QTimer()
+        self.__autoWhoTimer.setSingleShot(True)
+        self.__autoWhoTimer.timeout.connect(self.__sendAutoWhoCommand)
+        self.__autoWhoRequested = False
+
+    @pyqtSlot()
+    def on_messageEdit_returnPressed(self):
+        """
+        Private slot to send a message to the channel.
+        """
+        msg = self.messageEdit.text()
+        if msg:
+            self.__processUserMessage(msg)
+
+    def __processUserMessage(self, msg):
+        """
+        Private method to process a message entered by the user or via the
+        user list context menu.
+
+        @param msg message to be processed
+        @type str
+        """
+        self.messages.append(
+            '<font color="{0}">{2} <b>&lt;</b><font color="{1}">{3}</font>'
+            "<b>&gt;</b> {4}</font>".format(
+                ircExtensionPluginObject.getPreferences("ChannelMessageColour"),
+                ircExtensionPluginObject.getPreferences("OwnNickColour"),
+                ircTimestamp(),
+                self.__userName,
+                EricUtilities.html_encode(msg),
+            )
+        )
+
+        if msg.startswith("/"):
+            if self.__private:
+                EricMessageBox.information(
+                    self,
+                    self.tr("Send Message"),
+                    self.tr(
+                        """Messages starting with a '/' are not allowed"""
+                        """ in private chats."""
+                    ),
+                )
+            else:
+                sendData = True
+                # flag set to False, if command was handled
+
+                msgList = msg.split()
+                cmd = msgList[0][1:].upper()
+                if cmd in ["MSG", "QUERY"]:
+                    cmd = "PRIVMSG"
+                    if len(msgList) > 1:
+                        if msgList[1].strip().lower() in self.__serviceNamesLower:
+                            msg = (
+                                "PRIVMSG "
+                                + msgList[1].strip().lower()
+                                + " :"
+                                + " ".join(msgList[2:])
+                            )
+                        else:
+                            msg = "PRIVMSG {0} :{1}".format(
+                                msgList[1], " ".join(msgList[2:])
+                            )
+                    else:
+                        msgList[0] = cmd
+                        msg = " ".join(msgList)
+                elif cmd == "NOTICE":
+                    if len(msgList) > 2:
+                        msg = "NOTICE {0} :{1}".format(
+                            msgList[1], " ".join(msgList[2:])
+                        )
+                    else:
+                        msg = "NOTICE {0}".format(" ".join(msgList[1:]))
+                elif cmd == "PING":
+                    receiver = msgList[1]
+                    msg = "PING {0} "
+                    self.sendCtcpRequest.emit(receiver, "PING", "")
+                    sendData = False
+                elif cmd == "IGNORE":
+                    sendData = False
+                    if len(msgList) > 1:
+                        if msgList[1] == "-r":
+                            ignored = False
+                            userNamesList = msgList[2:]
+                        else:
+                            ignored = True
+                            userNamesList = msgList[1:]
+                    else:
+                        userNamesList = []
+                    userNames = ",".join(u.rstrip(",") for u in userNamesList).split(
+                        ","
+                    )
+                    for userName in userNames:
+                        itm = self.__findUser(userName)
+                        if itm:
+                            itm.setIgnored(ignored)
+                elif cmd == "UNIGNORE":
+                    sendData = False
+                    if len(msgList) > 1:
+                        userNamesList = msgList[1:]
+                    else:
+                        userNamesList = []
+                    userNames = ",".join(u.rstrip(",") for u in userNamesList).split(
+                        ","
+                    )
+                    for userName in userNames:
+                        itm = self.__findUser(userName)
+                        if itm:
+                            itm.setIgnored(False)
+                elif cmd == "AWAY":
+                    sendData = False
+                    if len(msgList) > 1:
+                        msg = " ".join(msgList[1:])
+                    else:
+                        msg = ""
+                    self.awayCommand.emit(msg)
+                elif cmd == "JOIN":
+                    sendData = False
+                    if len(msgList) > 1:
+                        channels = msgList[1].split(",")
+                        if len(msgList) > 2:
+                            keys = msgList[2].split(",")
+                        else:
+                            keys = []
+                        for channel, key in zip_longest(channels, keys, fillvalue=""):
+                            self.__ircWidget.joinChannel(channel, key)
+                elif cmd == "PART":
+                    sendData = False
+                    if len(msgList) == 1:
+                        self.leaveChannel()
+                    else:
+                        self.leaveChannels.emit(msgList[1:])
+                elif cmd == "PARTALL":
+                    sendData = False
+                    self.leaveAllChannels.emit()
+                else:
+                    msg = msg[1:]
+                if sendData:
+                    self.sendData.emit(msg)
+        else:
+            if self.__private:
+                self.sendData.emit("PRIVMSG " + self.__privatePartner + " :" + msg)
+            else:
+                self.sendData.emit("PRIVMSG " + self.__name + " :" + msg)
+
+        self.messageEdit.clear()
+        self.unsetMarkerLine()
+
+    def requestLeave(self):
+        """
+        Public method to leave the channel.
+        """
+        ok = EricMessageBox.yesNo(
+            self,
+            self.tr("Leave IRC channel"),
+            self.tr(
+                """Do you really want to leave the IRC channel <b>{0}</b>?"""
+            ).format(self.__name),
+        )
+        if ok:
+            self.leaveChannel()
+
+    def leaveChannel(self):
+        """
+        Public slot to leave the channel.
+        """
+        if not self.__private:
+            self.sendData.emit("PART " + self.__name + " :" + self.__partMessage)
+        self.channelClosed.emit(self.__name)
+
+    def name(self):
+        """
+        Public method to get the name of the channel.
+
+        @return name of the channel
+        @rtype str
+        """
+        return self.__name
+
+    def setName(self, name):
+        """
+        Public method to set the name of the channel.
+
+        @param name of the channel
+        @type str
+        """
+        self.__name = name
+
+    def getUsersCount(self):
+        """
+        Public method to get the users count of the channel.
+
+        @return users count of the channel
+        @rtype int
+        """
+        return self.usersList.count()
+
+    def userName(self):
+        """
+        Public method to get the nick name of the user.
+
+        @return nick name of the user
+        @rtype str
+        """
+        return self.__userName
+
+    def setUserName(self, name):
+        """
+        Public method to set the user name for the channel.
+
+        @param name user name for the channel
+        @type str
+        """
+        self.__userName = name
+
+    def partMessage(self):
+        """
+        Public method to get the part message.
+
+        @return part message
+        @rtype str
+        """
+        return self.__partMessage
+
+    def setPartMessage(self, message):
+        """
+        Public method to set the part message.
+
+        @param message message to be used for PART messages
+        @type str
+        """
+        self.__partMessage = message
+
+    def setPrivate(self, private, partner=""):
+        """
+        Public method to set the private chat mode.
+
+        @param private flag indicating private chat mode
+        @type bool
+        @param partner name of the partner user
+        @type str
+        """
+        self.__private = private
+        self.__privatePartner = partner
+        self.editTopicButton.setEnabled(private)
+
+    def setPrivateInfo(self, infoText):
+        """
+        Public method to set some info text for private chat mode.
+
+        @param infoText info text to be shown
+        @type str
+        """
+        if self.__private:
+            self.topicLabel.setText(infoText)
+
+    def handleMessage(self, line):
+        """
+        Public method to handle the message sent by the server.
+
+        @param line server message
+        @type str
+        @return flag indicating, if the message was handled
+        @rtype bool
+        """
+        for patternRe, patternFunc in self.__patterns:
+            match = patternRe.match(line)
+            if match is not None and patternFunc(match):
+                return True
+
+        return False
+
+    def __message(self, match):
+        """
+        Private method to handle messages to the channel.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        # group(1)   sender user name
+        # group(2)   sender user@host
+        # group(3)   target nick
+        # group(4)   message
+        if match.group(3).lower() == self.__name.lower():
+            senderName = match.group(1)
+            itm = self.__findUser(senderName)
+            if itm and itm.isIgnored():
+                # user should be ignored
+                return True
+
+            if match.group(4).startswith("\x01"):
+                return self.__handleCtcp(match)
+
+            self.addMessage(senderName, match.group(4))
+            if self.__private and not self.topicLabel.text():
+                self.setPrivateInfo("{0} - {1}".format(match.group(1), match.group(2)))
+            return True
+
+        return False
+
+    def addMessage(self, sender, msg):
+        """
+        Public method to add a message from external.
+
+        @param sender nick name of the sender
+        @type str
+        @param msg message received from sender
+        @type str
+        """
+        self.__appendMessage(
+            '<font color="{0}">{2} <b>&lt;</b><font color="{1}">{3}</font>'
+            "<b>&gt;</b> {4}</font>".format(
+                ircExtensionPluginObject.getPreferences("ChannelMessageColour"),
+                ircExtensionPluginObject.getPreferences("NickColour"),
+                ircTimestamp(),
+                sender,
+                ircFilter(msg),
+            )
+        )
+        if ircExtensionPluginObject.getPreferences("ShowNotifications"):
+            if ircExtensionPluginObject.getPreferences("NotifyMessage"):
+                self.__ui.showNotification(
+                    ircExtensionPluginObject.getPixmap("irc48"),
+                    self.tr("Channel Message"),
+                    msg,
+                )
+            elif (
+                ircExtensionPluginObject.getPreferences("NotifyNick")
+                and self.__userName.lower() in msg.lower()
+            ):
+                self.__ui.showNotification(
+                    ircExtensionPluginObject.getPixmap("irc48"),
+                    self.tr("Nick mentioned"),
+                    msg,
+                )
+
+    def addUsers(self, users):
+        """
+        Public method to add users to the channel.
+
+        @param users list of user names to add
+        @type list of str
+        """
+        for user in users:
+            itm = self.__findUser(user)
+            if itm is None:
+                IrcUserItem(name=user, parent=self.usersList)
+
+    def __userJoin(self, match):
+        """
+        Private method to handle a user joining the channel.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        if match.group(3).lower() == self.__name.lower():
+            if self.__userName != match.group(1):
+                IrcUserItem(name=match.group(1), parent=self.usersList)
+                msg = self.tr("{0} has joined the channel {1} ({2}).").format(
+                    match.group(1), self.__name, match.group(2)
+                )
+                self.__addManagementMessage(IrcChannelWidget.JoinIndicator, msg)
+            else:
+                msg = self.tr("You have joined the channel {0} ({1}).").format(
+                    self.__name, match.group(2)
+                )
+                self.__addManagementMessage(IrcChannelWidget.JoinIndicator, msg)
+            if ircExtensionPluginObject.getPreferences(
+                "ShowNotifications"
+            ) and ircExtensionPluginObject.getPreferences("NotifyJoinPart"):
+                self.__ui.showNotification(
+                    ircExtensionPluginObject.getPixmap("irc48"),
+                    self.tr("Join Channel"),
+                    msg,
+                )
+            return True
+
+        return False
+
+    def __userPart(self, match):
+        """
+        Private method to handle a user leaving the channel.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        if match.group(2).lower() == self.__name.lower():
+            itm = self.__findUser(match.group(1))
+            self.usersList.takeItem(self.usersList.row(itm))
+            del itm
+            if match.lastindex == 2:
+                msg = self.tr("{0} has left {1}.").format(match.group(1), self.__name)
+                nmsg = msg
+                self.__addManagementMessage(IrcChannelWidget.LeaveIndicator, msg)
+            else:
+                msg = self.tr("{0} has left {1}: {2}.").format(
+                    match.group(1), self.__name, ircFilter(match.group(3))
+                )
+                nmsg = self.tr("{0} has left {1}: {2}.").format(
+                    match.group(1), self.__name, match.group(3)
+                )
+                self.__addManagementMessage(IrcChannelWidget.LeaveIndicator, msg)
+            if ircExtensionPluginObject.getPreferences(
+                "ShowNotifications"
+            ) and ircExtensionPluginObject.getPreferences("NotifyJoinPart"):
+                self.__ui.showNotification(
+                    ircExtensionPluginObject.getPixmap("irc48"),
+                    self.tr("Leave Channel"),
+                    nmsg,
+                )
+            return True
+
+        return False
+
+    def __userQuit(self, match):
+        """
+        Private method to handle a user logging off the server.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        itm = self.__findUser(match.group(1))
+        if itm:
+            self.usersList.takeItem(self.usersList.row(itm))
+            del itm
+            if match.lastindex == 1:
+                msg = self.tr("{0} has quit {1}.").format(match.group(1), self.__name)
+                self.__addManagementMessage(IrcChannelWidget.MessageIndicator, msg)
+            else:
+                msg = self.tr("{0} has quit {1}: {2}.").format(
+                    match.group(1), self.__name, ircFilter(match.group(2))
+                )
+                self.__addManagementMessage(IrcChannelWidget.MessageIndicator, msg)
+            if ircExtensionPluginObject.getPreferences(
+                "ShowNotifications"
+            ) and ircExtensionPluginObject.getPreferences("NotifyJoinPart"):
+                self.__ui.showNotification(
+                    ircExtensionPluginObject.getPixmap("irc48"), self.tr("Quit"), msg
+                )
+
+        # always return False for other channels and server to process
+        return False
+
+    def __userNickChange(self, match):
+        """
+        Private method to handle a nickname change of a user.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        itm = self.__findUser(match.group(1))
+        if itm:
+            itm.setName(match.group(2))
+            if match.group(1) == self.__userName:
+                self.__addManagementMessage(
+                    IrcChannelWidget.MessageIndicator,
+                    self.tr("You are now known as {0}.").format(match.group(2)),
+                )
+                self.__userName = match.group(2)
+            else:
+                self.__addManagementMessage(
+                    IrcChannelWidget.MessageIndicator,
+                    self.tr("User {0} is now known as {1}.").format(
+                        match.group(1), match.group(2)
+                    ),
+                )
+
+        # always return False for other channels and server to process
+        return False
+
+    def __userList(self, match):
+        """
+        Private method to handle the receipt of a list of users of the channel.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        if match.group(1).lower() == self.__name.lower():
+            users = match.group(2).split()
+            for user in users:
+                userPrivileges, userName = self.__extractPrivilege(user)
+                itm = self.__findUser(userName)
+                if itm is None:
+                    itm = IrcUserItem(name=userName, parent=self.usersList)
+                for privilege in userPrivileges:
+                    itm.changePrivilege(privilege)
+
+            self.__setEditTopicButton()
+            return True
+
+        return False
+
+    def __userAway(self, match):
+        """
+        Private method to handle a topic change of the channel.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        if match.group(1).lower() == self.__name.lower():
+            self.__addManagementMessage(
+                self.tr("Away"),
+                self.tr("{0} is away: {1}").format(match.group(2), match.group(3)),
+            )
+            return True
+
+        return False
+
+    def __setTopic(self, match):
+        """
+        Private method to handle a topic change of the channel.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        if match.group(1).lower() == self.__name.lower():
+            self.topicLabel.setText(match.group(2))
+            self.__addManagementMessage(
+                IrcChannelWidget.MessageIndicator,
+                ircFilter(
+                    self.tr('The channel topic is: "{0}".').format(match.group(2))
+                ),
+            )
+            return True
+
+        return False
+
+    def __topicCreated(self, match):
+        """
+        Private method to handle a topic created message.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        if match.group(1).lower() == self.__name.lower():
+            self.__addManagementMessage(
+                IrcChannelWidget.MessageIndicator,
+                self.tr("The topic was set by {0} on {1}.").format(
+                    match.group(2),
+                    QDateTime.fromSecsSinceEpoch(int(match.group(3))).toString(
+                        "yyyy-MM-dd hh:mm"
+                    ),
+                ),
+            )
+            return True
+
+        return False
+
+    def __channelUrl(self, match):
+        """
+        Private method to handle a channel URL message.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        if match.group(1).lower() == self.__name.lower():
+            self.__addManagementMessage(
+                IrcChannelWidget.MessageIndicator,
+                ircFilter(self.tr("Channel URL: {0}").format(match.group(2))),
+            )
+            return True
+
+        return False
+
+    def __channelModes(self, match):
+        """
+        Private method to handle a message reporting the channel modes.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        if match.group(1).lower() == self.__name.lower():
+            modesDict = getChannelModesDict()
+            modesParameters = match.group(2).split()
+            modeString = modesParameters.pop(0)
+            modes = []
+            for modeChar in modeString:
+                if modeChar == "+":
+                    continue
+                elif modeChar == "k":
+                    parameter = modesParameters.pop(0)
+                    modes.append(self.tr("password protected ({0})").format(parameter))
+                elif modeChar == "l":
+                    parameter = modesParameters.pop(0)
+                    modes.append(self.tr("limited to %n user(s)", "", int(parameter)))
+                elif modeChar in modesDict:
+                    modes.append(modesDict[modeChar])
+                else:
+                    modes.append(modeChar)
+
+            self.__addManagementMessage(
+                IrcChannelWidget.MessageIndicator,
+                self.tr("Channel modes: {0}.").format(", ".join(modes)),
+            )
+
+            return True
+
+        return False
+
+    def __channelCreated(self, match):
+        """
+        Private method to handle a channel created message.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        if match.group(1).lower() == self.__name.lower():
+            self.__addManagementMessage(
+                IrcChannelWidget.MessageIndicator,
+                self.tr("This channel was created on {0}.").format(
+                    QDateTime.fromSecsSinceEpoch(int(match.group(2))).toString(
+                        "yyyy-MM-dd hh:mm"
+                    )
+                ),
+            )
+            return True
+
+        return False
+
+    def __updateChannelModes(self, match):
+        """
+        Private method to handle a message reporting the channel modes.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        # group(1)  user or server
+        # group(2)  channel
+        # group(3)  modes and parameter list
+        if match.group(2).lower() == self.__name.lower():
+            nick = match.group(1)
+            modesParameters = match.group(3).split()
+            modeString = modesParameters.pop(0)
+            isPlus = True
+            message = ""
+            for mode in modeString:
+                if mode == "+":
+                    isPlus = True
+                    continue
+                elif mode == "-":
+                    isPlus = False
+                    continue
+                elif mode == "a":
+                    if isPlus:
+                        message = self.tr(
+                            "{0} sets the channel mode to 'anonymous'."
+                        ).format(nick)
+                    else:
+                        message = self.tr(
+                            "{0} removes the 'anonymous' mode from the channel."
+                        ).format(nick)
+                elif mode == "b":
+                    if isPlus:
+                        message = self.tr("{0} sets a ban on {1}.").format(
+                            nick, modesParameters.pop(0)
+                        )
+                    else:
+                        message = self.tr("{0} removes the ban on {1}.").format(
+                            nick, modesParameters.pop(0)
+                        )
+                elif mode == "c":
+                    if isPlus:
+                        message = self.tr(
+                            "{0} sets the channel mode to 'no colors allowed'."
+                        ).format(nick)
+                    else:
+                        message = self.tr(
+                            "{0} sets the channel mode to 'allow color codes'."
+                        ).format(nick)
+                elif mode == "e":
+                    if isPlus:
+                        message = self.tr("{0} sets a ban exception on {1}.").format(
+                            nick, modesParameters.pop(0)
+                        )
+                    else:
+                        message = self.tr(
+                            "{0} removes the ban exception on {1}."
+                        ).format(nick, modesParameters.pop(0))
+                elif mode == "i":
+                    if isPlus:
+                        message = self.tr(
+                            "{0} sets the channel mode to 'invite only'."
+                        ).format(nick)
+                    else:
+                        message = self.tr(
+                            "{0} removes the 'invite only' mode from the channel."
+                        ).format(nick)
+                elif mode == "k":
+                    if isPlus:
+                        message = self.tr("{0} sets the channel key to '{1}'.").format(
+                            nick, modesParameters.pop(0)
+                        )
+                    else:
+                        message = self.tr("{0} removes the channel key.").format(nick)
+                elif mode == "l":
+                    if isPlus:
+                        message = self.tr(
+                            "{0} sets the channel limit to %n nick(s).",
+                            "",
+                            int(modesParameters.pop(0)),
+                        ).format(nick)
+                    else:
+                        message = self.tr("{0} removes the channel limit.").format(nick)
+                elif mode == "m":
+                    if isPlus:
+                        message = self.tr(
+                            "{0} sets the channel mode to 'moderated'."
+                        ).format(nick)
+                    else:
+                        message = self.tr(
+                            "{0} sets the channel mode to 'unmoderated'."
+                        ).format(nick)
+                elif mode == "n":
+                    if isPlus:
+                        message = self.tr(
+                            "{0} sets the channel mode to 'no messages from"
+                            " outside'."
+                        ).format(nick)
+                    else:
+                        message = self.tr(
+                            "{0} sets the channel mode to 'allow messages"
+                            " from outside'."
+                        ).format(nick)
+                elif mode == "p":
+                    if isPlus:
+                        message = self.tr(
+                            "{0} sets the channel mode to 'private'."
+                        ).format(nick)
+                    else:
+                        message = self.tr(
+                            "{0} sets the channel mode to 'public'."
+                        ).format(nick)
+                elif mode == "q":
+                    if isPlus:
+                        message = self.tr(
+                            "{0} sets the channel mode to 'quiet'."
+                        ).format(nick)
+                    else:
+                        message = self.tr(
+                            "{0} removes the 'quiet' mode from the channel."
+                        ).format(nick)
+                elif mode == "r":
+                    continue
+                elif mode == "s":
+                    if isPlus:
+                        message = self.tr(
+                            "{0} sets the channel mode to 'secret'."
+                        ).format(nick)
+                    else:
+                        message = self.tr(
+                            "{0} sets the channel mode to 'visible'."
+                        ).format(nick)
+                elif mode == "t":
+                    if isPlus:
+                        message = self.tr("{0} switches on 'topic protection'.").format(
+                            nick
+                        )
+                    else:
+                        message = self.tr(
+                            "{0} switches off 'topic protection'."
+                        ).format(nick)
+                elif mode == "I":
+                    if isPlus:
+                        message = self.tr("{0} sets invitation mask {1}.").format(
+                            nick, modesParameters.pop(0)
+                        )
+                    else:
+                        message = self.tr(
+                            "{0} removes the invitation mask {1}."
+                        ).format(nick, modesParameters.pop(0))
+
+                self.__addManagementMessage(self.tr("Mode"), message)
+
+            return True
+
+        return False
+
+    def __setUserPrivilege(self, match):
+        """
+        Private method to handle a change of user privileges for the channel.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        if match.group(2).lower() == self.__name.lower():
+            itm = self.__findUser(match.group(4))
+            if itm:
+                itm.changePrivilege(match.group(3))
+                self.__setEditTopicButton()
+            self.__addManagementMessage(
+                IrcChannelWidget.MessageIndicator,
+                self.tr("{0} sets mode for {1}: {2}.").format(
+                    match.group(1), match.group(4), match.group(3)
+                ),
+            )
+            return True
+
+        return False
+
+    def __ignore(self, match):
+        """
+        Private method to handle a channel message we are not interested in.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        if match.group(1).lower() == self.__name.lower():
+            return True
+
+        return False
+
+    def __help(self, match):
+        """
+        Private method to handle a help message.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        self.__addManagementMessage(
+            self.tr("Help"), "{0} {1}".format(match.group(1), ircFilter(match.group(2)))
+        )
+        return True
+
+    def __handleCtcp(self, match):
+        """
+        Private method to handle a CTCP channel command.
+
+        @param match reference to the match object
+        @type re.Match
+        @return flag indicating, if the message was handled
+        @rtype bool
+        """
+        # group(1)   sender user name
+        # group(2)   sender user@host
+        # group(3)   target nick
+        # group(4)   message
+        if match.group(4).startswith("\x01"):
+            ctcpCommand = match.group(4)[1:].split("\x01", 1)[0]
+            if " " in ctcpCommand:
+                ctcpRequest, ctcpArg = ctcpCommand.split(" ", 1)
+            else:
+                ctcpRequest, ctcpArg = ctcpCommand, ""
+            ctcpRequest = ctcpRequest.lower()
+            if ctcpRequest == "version":
+                msg = "Eric IRC client {0}, {1}".format(Version, Copyright)
+                self.__addManagementMessage(
+                    self.tr("CTCP"),
+                    self.tr("Received Version request from {0}.").format(
+                        match.group(1)
+                    ),
+                )
+                self.sendCtcpReply.emit(match.group(1), "VERSION " + msg)
+            elif ctcpRequest == "ping":
+                self.__addManagementMessage(
+                    self.tr("CTCP"),
+                    self.tr(
+                        "Received CTCP-PING request from {0}, sending answer."
+                    ).format(match.group(1)),
+                )
+                self.sendCtcpReply.emit(match.group(1), "PING {0}".format(ctcpArg))
+            elif ctcpRequest == "clientinfo":
+                self.__addManagementMessage(
+                    self.tr("CTCP"),
+                    self.tr(
+                        "Received CTCP-CLIENTINFO request from {0}, sending answer."
+                    ).format(match.group(1)),
+                )
+                self.sendCtcpReply.emit(
+                    match.group(1), "CLIENTINFO CLIENTINFO PING VERSION"
+                )
+            else:
+                self.__addManagementMessage(
+                    self.tr("CTCP"),
+                    self.tr("Received unknown CTCP-{0} request from {1}.").format(
+                        ctcpRequest, match.group(1)
+                    ),
+                )
+            return True
+
+        return False
+
+    def setUserPrivilegePrefix(self, prefixes):
+        """
+        Public method to set the user privilege to prefix mapping.
+
+        @param prefixes dictionary with privilege as key and prefix as value
+        @type dict
+        """
+        self.__prefixToPrivilege = {}
+        for privilege, prefix in prefixes.items():
+            if prefix:
+                self.__prefixToPrivilege[prefix] = privilege
+
+    def __findUser(self, name):
+        """
+        Private method to find the user in the list of users.
+
+        @param name user name to search for
+        @type str
+        @return reference to the list entry
+        @rtype QListWidgetItem
+        """
+        for row in range(self.usersList.count()):
+            itm = self.usersList.item(row)
+            if itm.name() == name:
+                return itm
+
+        return None
+
+    def __extractPrivilege(self, name):
+        """
+        Private method to extract the user privileges out of the name.
+
+        @param name user name and prefixes
+        @type str
+        @return tuple containing a list of privileges and user name
+        @rtype tuple of (list of str, str)
+        """
+        privileges = []
+        while name[0] in self.__prefixToPrivilege:
+            prefix = name[0]
+            privileges.append(self.__prefixToPrivilege[prefix])
+            name = name[1:]
+            if name[0] == ",":
+                name = name[1:]
+
+        return privileges, name
+
+    def __addManagementMessage(self, indicator, message):
+        """
+        Private method to add a channel management message to the list.
+
+        @param indicator indicator to be shown
+        @type str
+        @param message message to be shown
+        @type str
+        """
+        if indicator == self.JoinIndicator:
+            color = ircExtensionPluginObject.getPreferences("JoinChannelColour")
+        elif indicator == self.LeaveIndicator:
+            color = ircExtensionPluginObject.getPreferences("LeaveChannelColour")
+        else:
+            color = ircExtensionPluginObject.getPreferences("ChannelInfoColour")
+        self.__appendMessage(
+            '<font color="{0}">{1} <b>[</b>{2}<b>]</b> {3}</font>'.format(
+                color, ircTimestamp(), indicator, message
+            )
+        )
+
+    def __appendMessage(self, message):
+        """
+        Private slot to append a message.
+
+        @param message message to be appended
+        @type str
+        """
+        if (
+            self.__hidden
+            and self.__markerLine == ""
+            and ircExtensionPluginObject.getPreferences("MarkPositionWhenHidden")
+        ):
+            self.setMarkerLine()
+        self.messages.append(message)
+
+    def setMarkerLine(self):
+        """
+        Public method to draw a line to mark the current position.
+        """
+        self.unsetMarkerLine()
+        self.__markerLine = (
+            '<span style=" color:{0}; background-color:{1};">{2}</span>'.format(
+                ircExtensionPluginObject.getPreferences("MarkerLineForegroundColour"),
+                ircExtensionPluginObject.getPreferences("MarkerLineBackgroundColour"),
+                self.tr("--- New From Here ---"),
+            )
+        )
+        self.messages.append(self.__markerLine)
+
+    def unsetMarkerLine(self):
+        """
+        Public method to remove the marker line.
+        """
+        if self.__markerLine:
+            txt = self.messages.toHtml()
+            if txt.endswith(self.__markerLine + "</p></body></html>"):
+                # remove empty last paragraph
+                pos = txt.rfind("<p")
+                txt = txt[:pos] + "</body></html>"
+            else:
+                txt = txt.replace(self.__markerLine, "")
+            self.messages.setHtml(txt)
+            self.__markerLine = ""
+            self.messages.moveCursor(QTextCursor.MoveOperation.End)
+
+    def __clearMessages(self):
+        """
+        Private slot to clear the contents of the messages display.
+        """
+        self.messages.clear()
+
+    def __copyMessages(self):
+        """
+        Private slot to copy the selection of the messages display to the
+        clipboard.
+        """
+        self.messages.copy()
+
+    def __copyAllMessages(self):
+        """
+        Private slot to copy the contents of the messages display to the
+        clipboard.
+        """
+        txt = self.messages.toPlainText()
+        if txt:
+            cb = QApplication.clipboard()
+            cb.setText(txt)
+
+    def __cutAllMessages(self):
+        """
+        Private slot to cut the contents of the messages display to the
+        clipboard.
+        """
+        txt = self.messages.toPlainText()
+        if txt:
+            cb = QApplication.clipboard()
+            cb.setText(txt)
+        self.messages.clear()
+
+    def __saveMessages(self):
+        """
+        Private slot to save the contents of the messages display.
+        """
+        hasText = not self.messages.document().isEmpty()
+        if hasText:
+            if OSUtilities.isWindowsPlatform():
+                htmlExtension = "htm"
+            else:
+                htmlExtension = "html"
+            fname, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
+                self,
+                self.tr("Save Messages"),
+                "",
+                self.tr("HTML Files (*.{0});;Text Files (*.txt);;All Files (*)").format(
+                    htmlExtension
+                ),
+                None,
+                EricFileDialog.DontConfirmOverwrite,
+            )
+            if fname:
+                fpath = pathlib.Path(fname)
+                if not fpath.suffix:
+                    ex = selectedFilter.split("(*")[1].split(")")[0]
+                    if ex:
+                        fpath = fpath.with_suffix(ex)
+                if fpath.exists():
+                    res = EricMessageBox.yesNo(
+                        self,
+                        self.tr("Save Messages"),
+                        self.tr(
+                            "<p>The file <b>{0}</b> already exists."
+                            " Overwrite it?</p>"
+                        ).format(fpath),
+                        icon=EricMessageBox.Warning,
+                    )
+                    if not res:
+                        return
+
+                try:
+                    txt = (
+                        self.messages.toHtml()
+                        if fpath.suffix.lower() in [".htm", ".html"]
+                        else self.messages.toPlainText()
+                    )
+                    with fpath.open("w", encoding="utf-8") as f:
+                        f.write(txt)
+                except OSError as err:
+                    EricMessageBox.critical(
+                        self,
+                        self.tr("Error saving Messages"),
+                        self.tr(
+                            """<p>The messages contents could not be written"""
+                            """ to <b>{0}</b></p><p>Reason: {1}</p>"""
+                        ).format(fpath, str(err)),
+                    )
+
+    def __initMessagesMenu(self):
+        """
+        Private slot to initialize the context menu of the messages pane.
+        """
+        self.__messagesMenu = QMenu(self)
+        self.__copyMessagesAct = self.__messagesMenu.addAction(
+            EricPixmapCache.getIcon("editCopy"), self.tr("Copy"), self.__copyMessages
+        )
+        self.__messagesMenu.addSeparator()
+        self.__cutAllMessagesAct = self.__messagesMenu.addAction(
+            EricPixmapCache.getIcon("editCut"),
+            self.tr("Cut all"),
+            self.__cutAllMessages,
+        )
+        self.__copyAllMessagesAct = self.__messagesMenu.addAction(
+            EricPixmapCache.getIcon("editCopy"),
+            self.tr("Copy all"),
+            self.__copyAllMessages,
+        )
+        self.__messagesMenu.addSeparator()
+        self.__clearMessagesAct = self.__messagesMenu.addAction(
+            EricPixmapCache.getIcon("editDelete"),
+            self.tr("Clear"),
+            self.__clearMessages,
+        )
+        self.__messagesMenu.addSeparator()
+        self.__saveMessagesAct = self.__messagesMenu.addAction(
+            EricPixmapCache.getIcon("fileSave"), self.tr("Save"), self.__saveMessages
+        )
+        self.__messagesMenu.addSeparator()
+        self.__setMarkerMessagesAct = self.__messagesMenu.addAction(
+            self.tr("Mark Current Position"), self.setMarkerLine
+        )
+        self.__unsetMarkerMessagesAct = self.__messagesMenu.addAction(
+            self.tr("Remove Position Marker"), self.unsetMarkerLine
+        )
+
+        self.on_messages_copyAvailable(False)
+
+    @pyqtSlot(bool)
+    def on_messages_copyAvailable(self, yes):
+        """
+        Private slot to react to text selection/deselection of the messages
+        edit.
+
+        @param yes flag signaling the availability of selected text
+        @type bool
+        """
+        self.__copyMessagesAct.setEnabled(yes)
+
+    @pyqtSlot(QPoint)
+    def on_messages_customContextMenuRequested(self, pos):
+        """
+        Private slot to show the context menu of the messages pane.
+
+        @param pos the position of the mouse pointer
+        @type QPoint
+        """
+        enable = not self.messages.document().isEmpty()
+        self.__cutAllMessagesAct.setEnabled(enable)
+        self.__copyAllMessagesAct.setEnabled(enable)
+        self.__saveMessagesAct.setEnabled(enable)
+        self.__setMarkerMessagesAct.setEnabled(self.__markerLine == "")
+        self.__unsetMarkerMessagesAct.setEnabled(self.__markerLine != "")
+        self.__messagesMenu.popup(self.messages.mapToGlobal(pos))
+
+    def __whoIs(self):
+        """
+        Private slot to get information about the selected user.
+        """
+        self.__whoIsNick = self.usersList.selectedItems()[0].text()
+        self.sendData.emit("WHOIS " + self.__whoIsNick)
+
+    def __openPrivateChat(self):
+        """
+        Private slot to open a chat with the selected user.
+        """
+        user = self.usersList.selectedItems()[0].text()
+        self.openPrivateChat.emit(user)
+
+    def __sendUserMessage(self):
+        """
+        Private slot to send a private message to a specific user.
+        """
+        from eric7.EricWidgets import EricTextInputDialog
+
+        user = self.usersList.selectedItems()[0].text()
+        ok, message = EricTextInputDialog.getText(
+            self,
+            self.tr("Send Message"),
+            self.tr("Enter the message to be sent:"),
+            minimumWidth=400,
+        )
+        if ok and message:
+            self.__processUserMessage("/MSG {0} {1}".format(user, message))
+
+    def __sendUserQuery(self):
+        """
+        Private slot to send a query message to a specific user.
+        """
+        from eric7.EricWidgets import EricTextInputDialog
+
+        user = self.usersList.selectedItems()[0].text()
+        ok, message = EricTextInputDialog.getText(
+            self,
+            self.tr("Send Query"),
+            self.tr("Enter the message to be sent:"),
+            minimumWidth=400,
+        )
+        if ok and message:
+            self.__processUserMessage("/QUERY {0} {1}".format(user, message))
+
+    def __sendUserNotice(self):
+        """
+        Private slot to send a notice message to a specific user.
+        """
+        from eric7.EricWidgets import EricTextInputDialog
+
+        user = self.usersList.selectedItems()[0].text()
+        ok, message = EricTextInputDialog.getText(
+            self,
+            self.tr("Send Notice"),
+            self.tr("Enter the message to be sent:"),
+            minimumWidth=400,
+        )
+        if ok and message:
+            self.__processUserMessage("/NOTICE {0} {1}".format(user, message))
+
+    def __pingUser(self):
+        """
+        Private slot to send a ping to a specific user.
+        """
+        user = self.usersList.selectedItems()[0].text()
+        self.__processUserMessage("/PING {0}".format(user))
+
+    def __ignoreUser(self):
+        """
+        Private slot to ignore a specific user.
+        """
+        user = self.usersList.selectedItems()[0].text()
+        self.__processUserMessage("/IGNORE {0}".format(user))
+
+    def __initUsersMenu(self):
+        """
+        Private slot to initialize the users list context menu.
+        """
+        self.__usersMenu = QMenu(self)
+        self.__whoIsAct = self.__usersMenu.addAction(self.tr("Who Is"), self.__whoIs)
+        self.__usersMenu.addSeparator()
+        self.__privateChatAct = self.__usersMenu.addAction(
+            self.tr("Private Chat"), self.__openPrivateChat
+        )
+        self.__usersMenu.addSeparator()
+        self.__sendUserMessageAct = self.__usersMenu.addAction(
+            self.tr("Send Message"), self.__sendUserMessage
+        )
+        self.__sendUserQueryAct = self.__usersMenu.addAction(
+            self.tr("Send Query"), self.__sendUserQuery
+        )
+        self.__sendUserNoticeAct = self.__usersMenu.addAction(
+            self.tr("Send Notice"), self.__sendUserNotice
+        )
+        self.__usersMenu.addSeparator()
+        self.__pingUserAct = self.__usersMenu.addAction(
+            self.tr("Send Ping"), self.__pingUser
+        )
+        self.__ignoreUserAct = self.__usersMenu.addAction(
+            self.tr("Ignore User"), self.__ignoreUser
+        )
+        self.__usersMenu.addSeparator()
+        self.__usersListRefreshAct = self.__usersMenu.addAction(
+            self.tr("Refresh"), self.__sendAutoWhoCommand
+        )
+
+    @pyqtSlot(QPoint)
+    def on_usersList_customContextMenuRequested(self, pos):
+        """
+        Private slot to show the context menu of the users list.
+
+        @param pos the position of the mouse pointer
+        @type QPoint
+        """
+        enable = len(self.usersList.selectedItems()) > 0
+        enablePrivate = enable and not self.__private
+        itm = self.usersList.itemAt(pos)
+        if itm and enablePrivate:
+            enablePrivate = itm.text().lower() not in [
+                "chanserv",
+                self.__userName.lower(),
+            ]
+        self.__whoIsAct.setEnabled(enable)
+        self.__privateChatAct.setEnabled(enablePrivate)
+        self.__usersListRefreshAct.setEnabled(
+            self.usersList.count()
+            <= ircExtensionPluginObject.getPreferences("AutoUserInfoMax")
+        )
+        self.__usersMenu.popup(self.usersList.mapToGlobal(pos))
+
+    def hideEvent(self, _evt):
+        """
+        Protected method handling hide events.
+
+        @param _evt reference to the hide event (unused)
+        @type QHideEvent
+        """
+        self.__hidden = True
+
+    def showEvent(self, _evt):
+        """
+        Protected method handling show events.
+
+        @param _evt reference to the show event (unused)
+        @type QShowEvent
+        """
+        self.__hidden = False
+
+    def initAutoWho(self):
+        """
+        Public method to initialize the Auto Who system.
+        """
+        if ircExtensionPluginObject.getPreferences("AutoUserInfoLookup"):
+            self.__autoWhoTimer.setInterval(
+                ircExtensionPluginObject.getPreferences("AutoUserInfoInterval") * 1000
+            )
+            self.__autoWhoTimer.start()
+
+    @pyqtSlot()
+    def __sendAutoWhoCommand(self):
+        """
+        Private slot to send the WHO command to update the users list.
+        """
+        if self.usersList.count() <= ircExtensionPluginObject.getPreferences(
+            "AutoUserInfoMax"
+        ):
+            self.__autoWhoRequested = True
+            self.sendData.emit(self.__autoWhoTemplate.format(self.__name))
+
+    def __autoWhoEntry(self, match):
+        """
+        Private method to handle a WHO entry returned by the server as
+        requested automatically.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        # group(1)  nick
+        # group(2)  user flags
+        if self.__autoWhoRequested:
+            itm = self.__findUser(match.group(1))
+            if itm:
+                itm.parseWhoFlags(match.group(2))
+            return True
+
+        return False
+
+    def __whoEnd(self, match):
+        """
+        Private method to handle the end of the WHO list.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        if match.group(1).lower() == self.__name.lower():
+            if self.__autoWhoRequested:
+                self.__autoWhoRequested = False
+                self.initAutoWho()
+            else:
+                self.__addManagementMessage(
+                    self.tr("Who"),
+                    self.tr("End of WHO list for {0}.").format(match.group(1)),
+                )
+            return True
+
+        return False
+
+    def __whoEntry(self, match):
+        """
+        Private method to handle a WHO entry returned by the server as
+        requested manually.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        # group(1)  channel
+        # group(2)  user
+        # group(3)  host
+        # group(4)  nick
+        # group(5)  user flags
+        # group(6)  real name
+        if match.group(1).lower() == self.__name.lower():
+            away = self.tr(" (Away)") if match.group(5).startswith("G") else ""
+            self.__addManagementMessage(
+                self.tr("Who"),
+                self.tr("{0} is {1}@{2} ({3}){4}").format(
+                    match.group(4), match.group(2), match.group(3), match.group(6), away
+                ),
+            )
+            return True
+
+        return False
+
+    def __whoIsUser(self, match):
+        """
+        Private method to handle the WHOIS user reply.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        # group(1)   nick
+        # group(2)   user
+        # group(3)   host
+        # group(4)   real name
+        if match.group(1) == self.__whoIsNick:
+            realName = match.group(4).replace("<", "&lt;").replace(">", "&gt;")
+            self.__addManagementMessage(
+                self.tr("Whois"),
+                self.tr("{0} is {1}@{2} ({3}).").format(
+                    match.group(1), match.group(2), match.group(3), realName
+                ),
+            )
+            return True
+
+        return False
+
+    def __whoIsChannels(self, match):
+        """
+        Private method to handle the WHOIS channels reply.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        # group(1)   nick
+        # group(2)   channels
+        if match.group(1) == self.__whoIsNick:
+            userChannels = []
+            voiceChannels = []
+            opChannels = []
+            halfopChannels = []
+            ownerChannels = []
+            adminChannels = []
+
+            # generate the list of channels the user is in
+            channelList = match.group(2).split()
+            for channel in channelList:
+                if channel.startswith(("*", "&")):
+                    adminChannels.append(channel[1:])
+                elif channel.startswith(("!", "~")) and self.__ircWidget.isChannelName(
+                    channel[1:]
+                ):
+                    ownerChannels.append(channel[1:])
+                elif channel.startswith("@+"):
+                    opChannels.append(channel[2:])
+                elif channel.startswith("@"):
+                    opChannels.append(channel[1:])
+                elif channel.startswith("%"):
+                    halfopChannels.append(channel[1:])
+                elif channel.startswith("+"):
+                    voiceChannels.append(channel[1:])
+                else:
+                    userChannels.append(channel)
+
+            # show messages
+            if userChannels:
+                self.__addManagementMessage(
+                    self.tr("Whois"),
+                    self.tr("{0} is a user on channels: {1}").format(
+                        match.group(1), " ".join(userChannels)
+                    ),
+                )
+            if voiceChannels:
+                self.__addManagementMessage(
+                    self.tr("Whois"),
+                    self.tr("{0} has voice on channels: {1}").format(
+                        match.group(1), " ".join(voiceChannels)
+                    ),
+                )
+            if halfopChannels:
+                self.__addManagementMessage(
+                    self.tr("Whois"),
+                    self.tr("{0} is a halfop on channels: {1}").format(
+                        match.group(1), " ".join(halfopChannels)
+                    ),
+                )
+            if opChannels:
+                self.__addManagementMessage(
+                    self.tr("Whois"),
+                    self.tr("{0} is an operator on channels: {1}").format(
+                        match.group(1), " ".join(opChannels)
+                    ),
+                )
+            if ownerChannels:
+                self.__addManagementMessage(
+                    self.tr("Whois"),
+                    self.tr("{0} is owner of channels: {1}").format(
+                        match.group(1), " ".join(ownerChannels)
+                    ),
+                )
+            if adminChannels:
+                self.__addManagementMessage(
+                    self.tr("Whois"),
+                    self.tr("{0} is admin on channels: {1}").format(
+                        match.group(1), " ".join(adminChannels)
+                    ),
+                )
+            return True
+
+        return False
+
+    def __whoIsServer(self, match):
+        """
+        Private method to handle the WHOIS server reply.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        # group(1)   nick
+        # group(2)   server
+        # group(3)   server info
+        if match.group(1) == self.__whoIsNick:
+            self.__addManagementMessage(
+                self.tr("Whois"),
+                self.tr("{0} is online via {1} ({2}).").format(
+                    match.group(1), match.group(2), match.group(3)
+                ),
+            )
+            return True
+
+        return False
+
+    def __whoIsOperator(self, match):
+        """
+        Private method to handle the WHOIS operator reply.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        # group(1)   nick
+        # group(2)   message
+        if match.group(1) == self.__whoIsNick:
+            if match.group(2).lower().startswith("is an irc operator"):
+                self.__addManagementMessage(
+                    self.tr("Whois"),
+                    self.tr("{0} is an IRC Operator.").format(match.group(1)),
+                )
+            else:
+                self.__addManagementMessage(
+                    self.tr("Whois"), "{0} {1}".format(match.group(1), match.group(2))
+                )
+            return True
+
+        return False
+
+    def __whoIsIdle(self, match):
+        """
+        Private method to handle the WHOIS idle reply.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        # group(1)   nick
+        # group(2)   idle seconds
+        # group(3)   signon time
+        if match.group(1) == self.__whoIsNick:
+            seconds = int(match.group(2))
+            minutes = seconds // 60
+            hours = minutes // 60
+            days = hours // 24
+
+            signonTimestamp = int(match.group(3))
+            signonTime = QDateTime()
+            signonTime.setTime_t(signonTimestamp)
+
+            if days:
+                daysString = self.tr("%n day(s)", "", days)
+                hoursString = self.tr("%n hour(s)", "", hours)
+                minutesString = self.tr("%n minute(s)", "", minutes)
+                secondsString = self.tr("%n second(s)", "", seconds)
+                self.__addManagementMessage(
+                    self.tr("Whois"),
+                    self.tr(
+                        "{0} has been idle for {1}, {2}, {3}, and {4}.",
+                        "{0} = name of person, {1} = (x days),"
+                        " {2} = (x hours), {3} = (x minutes),"
+                        " {4} = (x seconds)",
+                    ).format(
+                        match.group(1),
+                        daysString,
+                        hoursString,
+                        minutesString,
+                        secondsString,
+                    ),
+                )
+            elif hours:
+                hoursString = self.tr("%n hour(s)", "", hours)
+                minutesString = self.tr("%n minute(s)", "", minutes)
+                secondsString = self.tr("%n second(s)", "", seconds)
+                self.__addManagementMessage(
+                    self.tr("Whois"),
+                    self.tr(
+                        "{0} has been idle for {1}, {2}, and {3}.",
+                        "{0} = name of person, {1} = (x hours), "
+                        "{2} = (x minutes), {3} = (x seconds)",
+                    ).format(match.group(1), hoursString, minutesString, secondsString),
+                )
+            elif minutes:
+                minutesString = self.tr("%n minute(s)", "", minutes)
+                secondsString = self.tr("%n second(s)", "", seconds)
+                self.__addManagementMessage(
+                    self.tr("Whois"),
+                    self.tr(
+                        "{0} has been idle for {1} and {2}.",
+                        "{0} = name of person, {1} = (x minutes), {3} = (x seconds)",
+                    ).format(match.group(1), minutesString, secondsString),
+                )
+            else:
+                self.__addManagementMessage(
+                    self.tr("Whois"),
+                    self.tr("{0} has been idle for %n second(s).", "", seconds).format(
+                        match.group(1)
+                    ),
+                )
+
+            if not signonTime.isNull():
+                self.__addManagementMessage(
+                    self.tr("Whois"),
+                    self.tr("{0} has been online since {1}.").format(
+                        match.group(1), signonTime.toString("yyyy-MM-dd, hh:mm:ss")
+                    ),
+                )
+            return True
+
+        return False
+
+    def __whoIsEnd(self, match):
+        """
+        Private method to handle the end of WHOIS reply.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        # group(1)   nick
+        # group(2)   end message
+        if match.group(1) == self.__whoIsNick:
+            self.__whoIsNick = ""
+            self.__addManagementMessage(
+                self.tr("Whois"),
+                self.tr("End of WHOIS list for {0}.").format(match.group(1)),
+            )
+            return True
+
+        return False
+
+    def __whoIsIdentify(self, match):
+        """
+        Private method to handle the WHOIS identify and identified replies.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        # group(1)   nick
+        # group(2)   identified message
+        if match.group(1) == self.__whoIsNick:
+            self.__addManagementMessage(
+                self.tr("Whois"),
+                self.tr("{0} is an identified user.").format(match.group(1)),
+            )
+            return True
+
+        return False
+
+    def __whoIsHelper(self, match):
+        """
+        Private method to handle the WHOIS helper reply.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        # group(1)   nick
+        # group(2)   helper message
+        if match.group(1) == self.__whoIsNick:
+            self.__addManagementMessage(
+                self.tr("Whois"),
+                self.tr("{0} is available for help.").format(match.group(1)),
+            )
+            return True
+
+        return False
+
+    def __whoIsAccount(self, match):
+        """
+        Private method to handle the WHOIS account reply.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        # group(1)   nick
+        # group(2)   login name
+        if match.group(1) == self.__whoIsNick:
+            self.__addManagementMessage(
+                self.tr("Whois"),
+                self.tr("{0} is logged in as {1}.").format(
+                    match.group(1), match.group(2)
+                ),
+            )
+            return True
+
+        return False
+
+    def __whoIsActually(self, match):
+        """
+        Private method to handle the WHOIS actually reply.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        # group(1)   nick
+        # group(2)   actual user@host
+        # group(3)   actual IP
+        if match.group(1) == self.__whoIsNick:
+            self.__addManagementMessage(
+                self.tr("Whois"),
+                self.tr("{0} is actually using the host {1} (IP: {2}).").format(
+                    match.group(1), match.group(2), match.group(3)
+                ),
+            )
+            return True
+
+        return False
+
+    def __whoIsSecure(self, match):
+        """
+        Private method to handle the WHOIS secure reply.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        # group(1)   nick
+        if match.group(1) == self.__whoIsNick:
+            self.__addManagementMessage(
+                self.tr("Whois"),
+                self.tr("{0} is using a secure connection.").format(match.group(1)),
+            )
+            return True
+
+        return False
+
+    def __whoIsConnection(self, match):
+        """
+        Private method to handle the WHOIS connection reply.
+
+        @param match match object that matched the pattern
+        @type re.Match
+        @return flag indicating whether the message was handled
+        @rtype bool
+        """
+        # group(1)   nick
+        # group(2)   host name
+        # group(3)   IP
+        if match.group(1) == self.__whoIsNick:
+            self.__addManagementMessage(
+                self.tr("Whois"),
+                self.tr("{0} is connecting from {1} (IP: {2}).").format(
+                    match.group(1), match.group(2), match.group(3)
+                ),
+            )
+            return True
+
+        return False
+
+    def __setEditTopicButton(self):
+        """
+        Private method to set the visibility of the Edit Topic button.
+        """
+        itm = self.__findUser(self.__userName)
+        if itm:
+            self.editTopicButton.setVisible(itm.canChangeTopic())
+
+    @pyqtSlot()
+    def on_editTopicButton_clicked(self):
+        """
+        Private slot to change the topic of the channel.
+        """
+        topic, ok = QInputDialog.getText(
+            self,
+            self.tr("Edit Channel Topic"),
+            self.tr("Enter the topic for this channel:"),
+            QLineEdit.EchoMode.Normal,
+            self.topicLabel.text(),
+        )
+        if ok and topic != "":
+            self.sendData.emit("TOPIC {0} :{1}".format(self.__name, topic))
+
+    @pyqtSlot(QUrl)
+    def on_messages_anchorClicked(self, url):
+        """
+        Private slot to open links in the default browser.
+
+        @param url URL to be opened
+        @type QUrl
+        """
+        QDesktopServices.openUrl(url)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/IrcChannelWidget.ui	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IrcChannelWidget</class>
+ <widget class="QWidget" name="IrcChannelWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>685</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string/>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="spacing">
+    <number>3</number>
+   </property>
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLabel" name="topicLabel">
+       <property name="text">
+        <string/>
+       </property>
+       <property name="wordWrap">
+        <bool>true</bool>
+       </property>
+       <property name="openExternalLinks">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="editTopicButton">
+       <property name="toolTip">
+        <string>Press to change the topic</string>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QSplitter" name="splitter">
+     <property name="orientation">
+      <enum>Qt::Orientation::Vertical</enum>
+     </property>
+     <widget class="QListWidget" name="usersList">
+      <property name="contextMenuPolicy">
+       <enum>Qt::ContextMenuPolicy::CustomContextMenu</enum>
+      </property>
+      <property name="toolTip">
+       <string>Shows the list of users</string>
+      </property>
+      <property name="alternatingRowColors">
+       <bool>true</bool>
+      </property>
+      <property name="sortingEnabled">
+       <bool>true</bool>
+      </property>
+     </widget>
+     <widget class="QTextBrowser" name="messages">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+        <horstretch>0</horstretch>
+        <verstretch>1</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="contextMenuPolicy">
+       <enum>Qt::ContextMenuPolicy::CustomContextMenu</enum>
+      </property>
+      <property name="toolTip">
+       <string>Shows the channel messages</string>
+      </property>
+      <property name="tabChangesFocus">
+       <bool>true</bool>
+      </property>
+      <property name="openLinks">
+       <bool>false</bool>
+      </property>
+     </widget>
+    </widget>
+   </item>
+   <item>
+    <widget class="IrcMessageEdit" name="messageEdit">
+     <property name="toolTip">
+      <string>Enter a message, send by pressing Return or Enter</string>
+     </property>
+     <property name="placeholderText">
+      <string>Enter a message, send by pressing Return or Enter</string>
+     </property>
+     <property name="clearButtonEnabled">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>IrcMessageEdit</class>
+   <extends>QLineEdit</extends>
+   <header>ExtensionIrc/IrcMessageEdit.h</header>
+  </customwidget>
+ </customwidgets>
+ <tabstops>
+  <tabstop>messageEdit</tabstop>
+  <tabstop>messages</tabstop>
+  <tabstop>usersList</tabstop>
+  <tabstop>editTopicButton</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/IrcIdentitiesEditDialog.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,518 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the identities management dialog.
+"""
+
+import copy
+
+from PyQt6.QtCore import QEvent, QItemSelectionModel, Qt, pyqtSlot
+from PyQt6.QtWidgets import QDialog, QInputDialog, QLineEdit
+
+from eric7.EricGui import EricPixmapCache
+from eric7.EricWidgets import EricMessageBox
+from eric7.SystemUtilities import OSUtilities
+
+from .IrcNetworkManager import IrcIdentity
+from .Ui_IrcIdentitiesEditDialog import Ui_IrcIdentitiesEditDialog
+
+
+class IrcIdentitiesEditDialog(QDialog, Ui_IrcIdentitiesEditDialog):
+    """
+    Class implementing the identities management dialog.
+    """
+
+    def __init__(self, manager, identityName, parent=None):
+        """
+        Constructor
+
+        @param manager reference to the IRC network manager object
+        @type IrcNetworkManager
+        @param identityName name of the identity to be selected
+        @type str
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        self.addButton.setIcon(EricPixmapCache.getIcon("plus"))
+        self.copyButton.setIcon(EricPixmapCache.getIcon("editCopy"))
+        self.renameButton.setIcon(EricPixmapCache.getIcon("editRename"))
+        self.deleteButton.setIcon(EricPixmapCache.getIcon("minus"))
+        self.nicknameAddButton.setIcon(EricPixmapCache.getIcon("plus"))
+        self.nicknameDeleteButton.setIcon(EricPixmapCache.getIcon("minus"))
+        self.nicknameUpButton.setIcon(EricPixmapCache.getIcon("1uparrow"))
+        self.nicknameDownButton.setIcon(EricPixmapCache.getIcon("1downarrow"))
+        self.showPasswordButton.setIcon(EricPixmapCache.getIcon("showPassword"))
+
+        self.__manager = manager
+
+        self.__identities = self.__manager.getIdentities()
+        self.__currentIdentity = None
+
+        identities = sorted(self.__manager.getIdentityNames())
+        identities[identities.index(IrcIdentity.DefaultIdentityName)] = (
+            IrcIdentity.DefaultIdentityDisplay
+        )
+        self.identitiesCombo.addItems(identities)
+        if identityName == IrcIdentity.DefaultIdentityName:
+            identityName = IrcIdentity.DefaultIdentityDisplay
+        index = self.identitiesCombo.findText(identityName)
+        if index == -1:
+            index = 0
+            identityName = self.identitiesCombo.itemText(0)
+        self.identitiesCombo.setCurrentIndex(index)
+
+        self.on_identitiesCombo_currentIndexChanged(index)
+
+        self.nicknameEdit.installEventFilter(self)
+
+    def eventFilter(self, obj, evt):
+        """
+        Public method to handle events for other objects.
+
+        @param obj reference to the object
+        @type QObject
+        @param evt reference to the event
+        @type QEvent
+        @return flag indicating that the event should be filtered out
+        @rtype bool
+        """
+        if (
+            obj == self.nicknameEdit
+            and evt.type() == QEvent.Type.KeyPress
+            and evt.key() in [Qt.Key.Key_Enter, Qt.Key.Key_Return]
+        ):
+            self.on_nicknameAddButton_clicked()
+            return True
+
+        return super().eventFilter(obj, evt)
+
+    def __updateIdentitiesButtons(self):
+        """
+        Private slot to update the status of the identity related buttons.
+        """
+        enable = (
+            self.identitiesCombo.currentText() != IrcIdentity.DefaultIdentityDisplay
+        )
+        self.renameButton.setEnabled(enable)
+        self.deleteButton.setEnabled(enable)
+
+    @pyqtSlot(int)
+    def on_identitiesCombo_currentIndexChanged(self, index):
+        """
+        Private slot to handle the selection of an identity.
+
+        @param index index of the selected entry
+        @type int
+        """
+        identity = self.identitiesCombo.itemText(index)
+        if identity == IrcIdentity.DefaultIdentityDisplay:
+            identity = IrcIdentity.DefaultIdentityName
+        self.__updateIdentitiesButtons()
+
+        if self.__currentIdentity and not self.__checkCurrentIdentity():
+            return
+
+        self.__refreshCurrentIdentity()
+
+        self.__currentIdentity = self.__identities[identity]
+
+        # General Tab
+        self.realnameEdit.setText(self.__currentIdentity.getRealName())
+        self.nicknamesList.clear()
+        self.nicknamesList.addItems(self.__currentIdentity.getNickNames())
+        self.serviceEdit.setText(self.__currentIdentity.getServiceName())
+        self.passwordEdit.setText(self.__currentIdentity.getPassword())
+
+        # Away Tab
+        self.rememberPosOnAwayCheckBox.setChecked(
+            self.__currentIdentity.rememberAwayPosition()
+        )
+        self.awayEdit.setText(self.__currentIdentity.getAwayMessage())
+
+        # Advanced Tab
+        self.identEdit.setText(self.__currentIdentity.getIdent())
+        self.quitEdit.setText(self.__currentIdentity.getQuitMessage())
+        self.partEdit.setText(self.__currentIdentity.getPartMessage())
+
+        self.__updateIdentitiesButtons()
+        self.__updateNicknameUpDownButtons()
+        self.__updateNicknameButtons()
+
+        self.identityTabWidget.setCurrentIndex(0)
+
+    def __refreshCurrentIdentity(self):
+        """
+        Private method to read back the data for the current identity.
+        """
+        if self.__currentIdentity is None:
+            return
+
+        # General Tab
+        self.__currentIdentity.setRealName(self.realnameEdit.text())
+        self.__currentIdentity.setNickNames(
+            [
+                self.nicknamesList.item(row).text()
+                for row in range(self.nicknamesList.count())
+            ]
+        )
+        self.__currentIdentity.setServiceName(self.serviceEdit.text())
+        self.__currentIdentity.setPassword(self.passwordEdit.text())
+
+        # Away Tab
+        self.__currentIdentity.setRememberAwayPosition(
+            self.rememberPosOnAwayCheckBox.isChecked()
+        )
+        self.__currentIdentity.setAwayMessage(self.awayEdit.text())
+
+        # Advanced Tab
+        self.__currentIdentity.setIdent(self.identEdit.text())
+        self.__currentIdentity.setQuitMessage(self.quitEdit.text())
+        self.__currentIdentity.setPartMessage(self.partEdit.text())
+
+    def __checkCurrentIdentity(self):
+        """
+        Private method to check the data for the current identity.
+
+        @return flag indicating a successful check
+        @rtype bool
+        """
+        if self.nicknamesList.count() == 0:
+            EricMessageBox.critical(
+                self,
+                self.tr("Edit Identity"),
+                self.tr("""The identity must contain at least one nick name."""),
+            )
+            block = self.identitiesCombo.blockSignals(True)
+            identity = self.__currentIdentity.getName()
+            if identity == IrcIdentity.DefaultIdentityName:
+                identity = IrcIdentity.DefaultIdentityDisplay
+            self.identitiesCombo.setCurrentIndex(
+                self.identitiesCombo.findText(identity)
+            )
+            self.identitiesCombo.blockSignals(block)
+            self.identityTabWidget.setCurrentIndex(0)
+            self.nicknameEdit.setFocus()
+            return False
+
+        if not self.realnameEdit.text():
+            EricMessageBox.critical(
+                self,
+                self.tr("Edit Identity"),
+                self.tr("""The identity must have a real name."""),
+            )
+            block = self.identitiesCombo.blockSignals(True)
+            identity = self.__currentIdentity.getName()
+            if identity == IrcIdentity.DefaultIdentityName:
+                identity = IrcIdentity.DefaultIdentityDisplay
+            self.identitiesCombo.setCurrentIndex(
+                self.identitiesCombo.findText(identity)
+            )
+            self.identitiesCombo.blockSignals(block)
+            self.identityTabWidget.setCurrentIndex(0)
+            self.realnameEdit.setFocus()
+            return False
+
+        return True
+
+    @pyqtSlot()
+    def on_addButton_clicked(self):
+        """
+        Private slot to add a new idntity.
+        """
+        name, ok = QInputDialog.getText(
+            self,
+            self.tr("Add Identity"),
+            self.tr("Identity Name:"),
+            QLineEdit.EchoMode.Normal,
+        )
+
+        if ok:
+            if name:
+                if name in self.__identities:
+                    EricMessageBox.critical(
+                        self,
+                        self.tr("Add Identity"),
+                        self.tr(
+                            """An identity named <b>{0}</b> already exists."""
+                            """ You must provide a different name."""
+                        ).format(name),
+                    )
+                    self.on_addButton_clicked()
+                else:
+                    identity = IrcIdentity(name)
+                    identity.setIdent(OSUtilities.getUserName())
+                    identity.setRealName(OSUtilities.getRealName())
+                    self.__identities[name] = identity
+                    self.identitiesCombo.addItem(name)
+                    self.identitiesCombo.setCurrentIndex(
+                        self.identitiesCombo.count() - 1
+                    )
+            else:
+                EricMessageBox.critical(
+                    self,
+                    self.tr("Add Identity"),
+                    self.tr("""The identity has to have a name."""),
+                )
+                self.on_addButton_clicked()
+
+    @pyqtSlot()
+    def on_copyButton_clicked(self):
+        """
+        Private slot to copy the selected identity.
+        """
+        currentIdentity = self.identitiesCombo.currentText()
+        name, ok = QInputDialog.getText(
+            self,
+            self.tr("Copy Identity"),
+            self.tr("Identity Name:"),
+            QLineEdit.EchoMode.Normal,
+            currentIdentity,
+        )
+
+        if ok:
+            if name:
+                if name in self.__identities:
+                    EricMessageBox.critical(
+                        self,
+                        self.tr("Copy Identity"),
+                        self.tr(
+                            """An identity named <b>{0}</b> already exists."""
+                            """ You must provide a different name."""
+                        ).format(name),
+                    )
+                    self.on_copyButton_clicked()
+                else:
+                    identity = copy.deepcopy(self.__currentIdentity)
+                    identity.setName(name)
+                    self.__identities[name] = identity
+                    self.identitiesCombo.addItem(name)
+                    self.identitiesCombo.setCurrentIndex(
+                        self.identitiesCombo.count() - 1
+                    )
+            else:
+                EricMessageBox.critical(
+                    self,
+                    self.tr("Copy Identity"),
+                    self.tr("""The identity has to have a name."""),
+                )
+                self.on_copyButton_clicked()
+
+    @pyqtSlot()
+    def on_renameButton_clicked(self):
+        """
+        Private slot to rename the selected identity.
+        """
+        currentIdentity = self.identitiesCombo.currentText()
+        name, ok = QInputDialog.getText(
+            self,
+            self.tr("Rename Identity"),
+            self.tr("Identity Name:"),
+            QLineEdit.EchoMode.Normal,
+            currentIdentity,
+        )
+
+        if ok and name != currentIdentity:
+            if name:
+                if name in self.__identities:
+                    EricMessageBox.critical(
+                        self,
+                        self.tr("Rename Identity"),
+                        self.tr(
+                            """An identity named <b>{0}</b> already exists."""
+                            """ You must provide a different name."""
+                        ).format(name),
+                    )
+                    self.on_renameButton_clicked()
+                else:
+                    del self.__identities[currentIdentity]
+                    self.__currentIdentity.setName(name)
+                    self.__identities[name] = self.__currentIdentity
+                    self.identitiesCombo.setItemText(
+                        self.identitiesCombo.currentIndex(), name
+                    )
+            else:
+                EricMessageBox.critical(
+                    self,
+                    self.tr("Copy Identity"),
+                    self.tr("""The identity has to have a name."""),
+                )
+                self.on_renameButton_clicked()
+
+    @pyqtSlot()
+    def on_deleteButton_clicked(self):
+        """
+        Private slot to rename the selected identity.
+        """
+        currentIdentity = self.identitiesCombo.currentText()
+        if currentIdentity == IrcIdentity.DefaultIdentityDisplay:
+            return
+
+        inUse = False
+        for networkName in self.__manager.getNetworkNames():
+            inUse = (
+                self.__manager.getNetwork(networkName).getIdentityName()
+                == currentIdentity
+            )
+            if inUse:
+                break
+
+        msg = (
+            self.tr(
+                "This identity is in use. If you remove it, the network"
+                " settings using it will fall back to the default"
+                " identity. Should it be deleted anyway?"
+            )
+            if inUse
+            else self.tr(
+                "Do you really want to delete all information for this identity?"
+            )
+        )
+        res = EricMessageBox.yesNo(
+            self, self.tr("Delete Identity"), msg, icon=EricMessageBox.Warning
+        )
+        if res:
+            del self.__identities[currentIdentity]
+            self.identitiesCombo.removeItem(
+                self.identitiesCombo.findText(currentIdentity)
+            )
+
+    def __updateNicknameUpDownButtons(self):
+        """
+        Private method to set the enabled state of the nick name up and
+        down buttons.
+        """
+        if len(self.nicknamesList.selectedItems()) == 0:
+            self.nicknameUpButton.setEnabled(False)
+            self.nicknameDownButton.setEnabled(False)
+        else:
+            if self.nicknamesList.currentRow() == 0:
+                self.nicknameUpButton.setEnabled(False)
+                self.nicknameDownButton.setEnabled(True)
+            elif self.nicknamesList.currentRow() == self.nicknamesList.count() - 1:
+                self.nicknameUpButton.setEnabled(True)
+                self.nicknameDownButton.setEnabled(False)
+            else:
+                self.nicknameUpButton.setEnabled(True)
+                self.nicknameDownButton.setEnabled(True)
+
+    def __updateNicknameButtons(self):
+        """
+        Private slot to update the nick name buttons except the up and
+        down buttons.
+        """
+        self.nicknameDeleteButton.setEnabled(
+            len(self.nicknamesList.selectedItems()) != 0
+        )
+
+        self.nicknameAddButton.setEnabled(self.nicknameEdit.text() != "")
+
+    @pyqtSlot(str)
+    def on_nicknameEdit_textEdited(self, nick):
+        """
+        Private slot handling a change of the nick name.
+
+        @param nick new nick name
+        @type str
+        """
+        sel = self.nicknamesList.selectedItems()
+        if sel:
+            sel[0].setText(nick)
+
+        self.__updateNicknameButtons()
+
+    @pyqtSlot()
+    def on_nicknamesList_itemSelectionChanged(self):
+        """
+        Private slot handling the selection of a nick name.
+        """
+        items = self.nicknamesList.selectedItems()
+        if items:
+            self.nicknameEdit.setText(items[0].text())
+
+        self.__updateNicknameUpDownButtons()
+        self.__updateNicknameButtons()
+
+        self.nicknameEdit.setFocus()
+
+    @pyqtSlot()
+    def on_nicknameAddButton_clicked(self):
+        """
+        Private slot to add a new nickname.
+        """
+        nick = self.nicknameEdit.text()
+        if nick not in [
+            self.nicknamesList.item(row).text()
+            for row in range(self.nicknamesList.count())
+        ]:
+            self.nicknamesList.insertItem(0, nick)
+        self.nicknamesList.setCurrentRow(0, QItemSelectionModel.SelectionFlag.Clear)
+        self.nicknameEdit.clear()
+        self.__updateNicknameButtons()
+
+    @pyqtSlot()
+    def on_nicknameDeleteButton_clicked(self):
+        """
+        Private slot to delete a nick name.
+        """
+        itm = self.nicknamesList.takeItem(self.nicknamesList.currentRow())
+        del itm
+        self.__updateNicknameButtons()
+
+    @pyqtSlot()
+    def on_nicknameUpButton_clicked(self):
+        """
+        Private slot to move the selected entry up one row.
+        """
+        row = self.nicknamesList.currentRow()
+        if row > 0:
+            itm = self.nicknamesList.takeItem(row)
+            row -= 1
+            self.nicknamesList.insertItem(row, itm)
+            self.nicknamesList.setCurrentItem(itm)
+
+    @pyqtSlot()
+    def on_nicknameDownButton_clicked(self):
+        """
+        Private slot to move the selected entry down one row.
+        """
+        row = self.nicknamesList.currentRow()
+        if row < self.nicknamesList.count() - 1:
+            itm = self.nicknamesList.takeItem(row)
+            row += 1
+            self.nicknamesList.insertItem(row, itm)
+            self.nicknamesList.setCurrentItem(itm)
+
+    @pyqtSlot(bool)
+    def on_showPasswordButton_clicked(self, checked):
+        """
+        Private slot to show or hide the password.
+
+        @param checked state of the button
+        @type bool
+        """
+        if checked:
+            self.passwordEdit.setEchoMode(QLineEdit.EchoMode.Normal)
+            self.showPasswordButton.setIcon(EricPixmapCache.getIcon("hidePassword"))
+            self.showPasswordButton.setToolTip(self.tr("Press to hide the password"))
+        else:
+            self.passwordEdit.setEchoMode(QLineEdit.EchoMode.Password)
+            self.showPasswordButton.setIcon(EricPixmapCache.getIcon("showPassword"))
+            self.showPasswordButton.setToolTip(self.tr("Press to show the password"))
+
+    def accept(self):
+        """
+        Public slot handling the acceptance of the dialog.
+        """
+        if not self.__checkCurrentIdentity():
+            return
+
+        self.__refreshCurrentIdentity()
+        self.__manager.setIdentities(self.__identities)
+
+        super().accept()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/IrcIdentitiesEditDialog.ui	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,399 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IrcIdentitiesEditDialog</class>
+ <widget class="QDialog" name="IrcIdentitiesEditDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>650</width>
+    <height>510</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>IRC Identities</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>Identity:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QComboBox" name="identitiesCombo">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="toolTip">
+        <string>Select the identity to work on</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="addButton">
+       <property name="toolTip">
+        <string>Press to add a new identity</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="copyButton">
+       <property name="toolTip">
+        <string>Press to copy the selected identity</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="renameButton">
+       <property name="toolTip">
+        <string>Press to rename the selected identity</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="deleteButton">
+       <property name="toolTip">
+        <string>Press to delete the selected identity</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QTabWidget" name="identityTabWidget">
+     <property name="currentIndex">
+      <number>0</number>
+     </property>
+     <widget class="QWidget" name="generalTab">
+      <attribute name="title">
+       <string>General</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_2">
+       <item row="0" column="0">
+        <widget class="QLabel" name="label_2">
+         <property name="text">
+          <string>Real Name:</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QLineEdit" name="realnameEdit">
+         <property name="toolTip">
+          <string>Enter the real name</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0" colspan="2">
+        <widget class="QGroupBox" name="nickNameGroup">
+         <property name="title">
+          <string>Nick Names</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout">
+          <item row="0" column="0" colspan="2">
+           <widget class="QLineEdit" name="nicknameEdit">
+            <property name="toolTip">
+             <string>Enter a nick name to add</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0" rowspan="5">
+           <widget class="QListWidget" name="nicknamesList">
+            <property name="alternatingRowColors">
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="1">
+           <widget class="QToolButton" name="nicknameAddButton">
+            <property name="toolTip">
+             <string>Press to add the entered nick name</string>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="1">
+           <widget class="QToolButton" name="nicknameDeleteButton">
+            <property name="toolTip">
+             <string>Press to delete the selected nick name</string>
+            </property>
+            <property name="text">
+             <string/>
+            </property>
+           </widget>
+          </item>
+          <item row="3" column="1">
+           <widget class="QToolButton" name="nicknameUpButton">
+            <property name="toolTip">
+             <string>Press to move the selected nick name up</string>
+            </property>
+           </widget>
+          </item>
+          <item row="4" column="1">
+           <widget class="QToolButton" name="nicknameDownButton">
+            <property name="toolTip">
+             <string>Press to move the selected nick name down</string>
+            </property>
+           </widget>
+          </item>
+          <item row="5" column="1">
+           <spacer name="verticalSpacer">
+            <property name="orientation">
+             <enum>Qt::Vertical</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>20</width>
+              <height>87</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item row="2" column="0" colspan="2">
+        <widget class="QGroupBox" name="autoIdentifyGroup">
+         <property name="title">
+          <string>Auto Identify</string>
+         </property>
+         <layout class="QHBoxLayout" name="horizontalLayout_2">
+          <item>
+           <widget class="QLabel" name="label_3">
+            <property name="text">
+             <string>Service:</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QLineEdit" name="serviceEdit">
+            <property name="toolTip">
+             <string>Enter the name of the service to identify against</string>
+            </property>
+            <property name="whatsThis">
+             <string>Service name can be &lt;b&gt;&lt;i&gt;nickserv&lt;/i&gt;&lt;/b&gt; or a network-dependent name such as &lt;b&gt;&lt;i&gt;nickserv@services.dal.net&lt;/i&gt;&lt;/b&gt;</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QLabel" name="label_4">
+            <property name="text">
+             <string>Password:</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QLineEdit" name="passwordEdit">
+            <property name="toolTip">
+             <string>Enter the password</string>
+            </property>
+            <property name="echoMode">
+             <enum>QLineEdit::Password</enum>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QToolButton" name="showPasswordButton">
+            <property name="toolTip">
+             <string>Press to show the password</string>
+            </property>
+            <property name="checkable">
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="awayTab">
+      <attribute name="title">
+       <string>Away</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_5">
+       <item row="0" column="0" colspan="2">
+        <widget class="QCheckBox" name="rememberPosOnAwayCheckBox">
+         <property name="toolTip">
+          <string>Select to mark the current position in the chat, when you send an AWAY command.</string>
+         </property>
+         <property name="whatsThis">
+          <string/>
+         </property>
+         <property name="text">
+          <string>Mark the current position in chat windows when going away</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QLabel" name="label_8">
+         <property name="text">
+          <string>Away Message:</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1">
+        <widget class="QLineEdit" name="awayEdit">
+         <property name="toolTip">
+          <string>Enter the message to be sent when going away</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="1">
+        <spacer name="verticalSpacer_3">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>219</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="advancedTab">
+      <attribute name="title">
+       <string>Advanced</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_3">
+       <item row="0" column="0">
+        <widget class="QLabel" name="label_5">
+         <property name="text">
+          <string>Ident:</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QLineEdit" name="identEdit">
+         <property name="toolTip">
+          <string>Enter the identity to be used to log-on to the server</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QLabel" name="label_6">
+         <property name="text">
+          <string>Reason for Quit:</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1">
+        <widget class="QLineEdit" name="quitEdit">
+         <property name="toolTip">
+          <string>Enter a message to be sent when quitting</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0">
+        <widget class="QLabel" name="label_7">
+         <property name="text">
+          <string>Reason for Part:</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="1">
+        <widget class="QLineEdit" name="partEdit">
+         <property name="toolTip">
+          <string>Enter message to be sent when leaving a channel</string>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="1">
+        <spacer name="verticalSpacer_2">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>291</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>identitiesCombo</tabstop>
+  <tabstop>addButton</tabstop>
+  <tabstop>copyButton</tabstop>
+  <tabstop>renameButton</tabstop>
+  <tabstop>deleteButton</tabstop>
+  <tabstop>identityTabWidget</tabstop>
+  <tabstop>realnameEdit</tabstop>
+  <tabstop>nicknameEdit</tabstop>
+  <tabstop>nicknamesList</tabstop>
+  <tabstop>nicknameAddButton</tabstop>
+  <tabstop>nicknameDeleteButton</tabstop>
+  <tabstop>nicknameUpButton</tabstop>
+  <tabstop>nicknameDownButton</tabstop>
+  <tabstop>serviceEdit</tabstop>
+  <tabstop>passwordEdit</tabstop>
+  <tabstop>showPasswordButton</tabstop>
+  <tabstop>rememberPosOnAwayCheckBox</tabstop>
+  <tabstop>awayEdit</tabstop>
+  <tabstop>identEdit</tabstop>
+  <tabstop>quitEdit</tabstop>
+  <tabstop>partEdit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>IrcIdentitiesEditDialog</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>IrcIdentitiesEditDialog</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/ExtensionIrc/IrcMessageEdit.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,134 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a specialized line edit for entering IRC messages.
+"""
+
+from PyQt6.QtCore import Qt
+from PyQt6.QtWidgets import QLineEdit
+
+
+class IrcMessageEdit(QLineEdit):
+    """
+    Class implementing a specialized line edit for entering IRC messages.
+    """
+
+    MaxHistory = 100
+
+    def __init__(self, parent=None):
+        """
+        Constructor
+
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+
+        self.__historyList = [""]  # initialize with one empty line
+        self.__historyLine = 0
+
+    def setText(self, text):
+        """
+        Public method to set the text.
+
+        Note: This reimplementation ensures, that the cursor is at the end of
+        the text.
+
+        @param text text to be set
+        @type str
+        """
+        super().setText(text)
+        self.setCursorPosition(len(text))
+
+    def keyPressEvent(self, evt):
+        """
+        Protected method implementing special key handling.
+
+        @param evt reference to the event
+        @type QKeyEvent
+        """
+        key = evt.key()
+        if key == Qt.Key.Key_Up:
+            self.__getHistory(True)
+            return
+        elif key == Qt.Key.Key_Down:
+            self.__getHistory(False)
+            return
+        elif key in [Qt.Key.Key_Return, Qt.Key.Key_Enter]:
+            if self.text():
+                self.__addHistory(self.text())
+        elif evt.text() == chr(21):
+            # ^U: clear the text
+            self.setText("")
+
+        super().keyPressEvent(evt)
+
+    def wheelEvent(self, evt):
+        """
+        Protected slot to support wheel events.
+
+        @param evt reference to the wheel event
+        @type QWheelEvent
+        """
+        delta = evt.angleDelta().y()
+        if delta > 0:
+            self.__getHistory(True)
+        elif delta < 0:
+            self.__getHistory(False)
+
+        super().wheelEvent(evt)
+
+    def __addHistory(self, txt):
+        """
+        Private method to add an entry to the history.
+
+        @param txt text to be added to the history
+        @type str
+        """
+        # Only add the entry, if it is not the same as last time
+        if len(self.__historyList) == 1 or (
+            len(self.__historyList) > 1 and self.__historyList[1] != txt
+        ):
+            # Replace empty first entry and add new empty first entry
+            self.__historyList[0] = txt
+            self.__historyList.insert(0, "")
+            # Keep history below the defined limit
+            del self.__historyList[IrcMessageEdit.MaxHistory :]
+
+        self.__historyLine = 0
+
+    def __getHistory(self, up):
+        """
+        Private method to move in the history.
+
+        @param up flag indicating the direction
+        @type bool
+        """
+        # preserve the current text, if it is not empty
+        if self.text():
+            self.__historyList[self.__historyLine] = self.text()
+
+        if up:
+            self.__historyLine += 1
+            # If the position was moved past the end of the history,
+            # go to the last entry
+            if self.__historyLine == len(self.__historyList):
+                self.__historyLine -= 1
+                return
+        else:
+            # If the position is at the top of the history, arrow-down shall
+            # add the text to the history and clear the line edit for new input
+            if self.__historyLine == 0:
+                if self.text():
+                    self.__addHistory(self.text())
+                self.setText("")
+            else:
+                # If the position is not at the top of the history,
+                # decrement it
+                self.__historyLine -= 1
+
+        # replace the text of the line edit with the selected history entry
+        self.setText(self.__historyList[self.__historyLine])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/IrcNetworkEditDialog.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,276 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog for editing IRC network definitions.
+"""
+
+import copy
+
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QTreeWidgetItem
+
+from eric7.EricGui import EricPixmapCache
+from eric7.EricWidgets import EricMessageBox
+from PluginExtensionIrc import ircExtensionPluginObject
+
+from .IrcNetworkManager import IrcNetwork
+from .Ui_IrcNetworkEditDialog import Ui_IrcNetworkEditDialog
+
+
+class IrcNetworkEditDialog(QDialog, Ui_IrcNetworkEditDialog):
+    """
+    Class implementing a dialog for editing IRC network definitions.
+    """
+
+    def __init__(self, manager, networkName, parent=None):
+        """
+        Constructor
+
+        @param manager reference to the IRC network manager object
+        @type IrcNetworkManager
+        @param networkName name of the network to work on
+        @type str
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        self.__manager = manager
+
+        self.editIdentitiesButton.setIcon(
+            ircExtensionPluginObject.getIcon("ircConfigure")
+        )
+        self.editServerButton.setIcon(ircExtensionPluginObject.getIcon("ircConfigure"))
+        self.editChannelButton.setIcon(ircExtensionPluginObject.getIcon("ircConfigure"))
+        self.addChannelButton.setIcon(EricPixmapCache.getIcon("plus"))
+        self.deleteChannelButton.setIcon(EricPixmapCache.getIcon("minus"))
+
+        self.__okButton = self.buttonBox.button(QDialogButtonBox.StandardButton.Ok)
+
+        if networkName:
+            self.__network = copy.deepcopy(self.__manager.getNetwork(networkName))
+        else:
+            self.__network = IrcNetwork("")
+
+        # network name
+        self.networkEdit.setText(networkName)
+
+        # identities
+        self.__refreshIdentityCombo(self.__network.getIdentityName())
+
+        # server
+        self.serverEdit.setText(self.__network.getServerName())
+
+        # channels
+        for channelName in sorted(self.__network.getChannelNames()):
+            channel = self.__network.getChannel(channelName)
+            autoJoin = self.tr("Yes") if channel.autoJoin() else self.tr("No")
+            QTreeWidgetItem(self.channelList, [channelName, autoJoin])
+
+        self.__updateOkButton()
+        self.on_channelList_itemSelectionChanged()
+
+    def __updateOkButton(self):
+        """
+        Private method to update the OK button state.
+        """
+        enable = True
+        enable &= self.networkEdit.text() != ""
+        enable &= self.serverEdit.text() != ""
+
+        self.__okButton.setEnabled(enable)
+
+    @pyqtSlot(str)
+    def on_networkEdit_textChanged(self, _txt):
+        """
+        Private slot to handle changes of the network name.
+
+        @param _txt text entered into the network name edit (unused)
+        @type str
+        """
+        self.__updateOkButton()
+
+    def __refreshIdentityCombo(self, currentIdentity):
+        """
+        Private method to refresh the identity combo.
+
+        @param currentIdentity name of the identity to select
+        @type str
+        """
+        from .IrcNetworkManager import IrcIdentity
+
+        self.identityCombo.clear()
+
+        identities = sorted(self.__manager.getIdentityNames())
+        identities[identities.index(IrcIdentity.DefaultIdentityName)] = (
+            IrcIdentity.DefaultIdentityDisplay
+        )
+        self.identityCombo.addItems(identities)
+        if currentIdentity == IrcIdentity.DefaultIdentityName:
+            currentIdentity = IrcIdentity.DefaultIdentityDisplay
+        index = self.identityCombo.findText(currentIdentity)
+        if index == -1:
+            index = 0
+        self.identityCombo.setCurrentIndex(index)
+
+    @pyqtSlot(str)
+    def on_identityCombo_currentTextChanged(self, identity):
+        """
+        Private slot to handle the selection of an identity.
+
+        @param identity selected identity
+        @type str
+        """
+        from .IrcNetworkManager import IrcIdentity
+
+        if identity == IrcIdentity.DefaultIdentityDisplay:
+            identity = IrcIdentity.DefaultIdentityName
+        self.__network.setIdentityName(identity)
+
+    @pyqtSlot()
+    def on_editIdentitiesButton_clicked(self):
+        """
+        Private slot to edit the identities.
+        """
+        from .IrcIdentitiesEditDialog import IrcIdentitiesEditDialog
+
+        currentIdentity = self.identityCombo.currentText()
+        dlg = IrcIdentitiesEditDialog(self.__manager, currentIdentity, parent=self)
+        dlg.exec()
+        self.__refreshIdentityCombo(currentIdentity)
+
+    @pyqtSlot(str)
+    def on_serverEdit_textChanged(self, _txt):
+        """
+        Private slot to handle changes of the server name.
+
+        @param _txt text entered into the server name edit (unused)
+        @type str
+        """
+        self.__updateOkButton()
+
+    @pyqtSlot()
+    def on_editServerButton_clicked(self):
+        """
+        Private slot to edit the server configuration.
+        """
+        from .IrcServerEditDialog import IrcServerEditDialog
+
+        dlg = IrcServerEditDialog(self.__network.getServer(), parent=self)
+        if dlg.exec() == QDialog.DialogCode.Accepted:
+            self.__network.setServer(dlg.getServer())
+            self.serverEdit.setText(self.__network.getServerName())
+
+    @pyqtSlot()
+    def on_addChannelButton_clicked(self):
+        """
+        Private slot to add a channel.
+        """
+        self.__editChannel(None)
+
+    @pyqtSlot()
+    def on_editChannelButton_clicked(self):
+        """
+        Private slot to edit the selected channel.
+        """
+        itm = self.channelList.selectedItems()[0]
+        if itm:
+            self.__editChannel(itm)
+
+    @pyqtSlot()
+    def on_deleteChannelButton_clicked(self):
+        """
+        Private slot to delete the selected channel.
+        """
+        itm = self.channelList.selectedItems()[0]
+        if itm:
+            res = EricMessageBox.yesNo(
+                self,
+                self.tr("Delete Channel"),
+                self.tr("""Do you really want to delete channel <b>{0}</b>?""").format(
+                    itm.text(0)
+                ),
+            )
+            if res:
+                self.__network.deleteChannel(itm.text(0))
+
+                index = self.channelList.indexOfTopLevelItem(itm)
+                self.channelList.takeTopLevelItem(index)
+                del itm
+
+    @pyqtSlot(QTreeWidgetItem, int)
+    def on_channelList_itemActivated(self, item, _column):
+        """
+        Private slot to handle the activation of a channel entry.
+
+        @param item reference to the activated item
+        @type QTreeWidgetItem
+        @param _column column the activation occurred in (unused)
+        @type int
+        """
+        self.__editChannel(item)
+
+    @pyqtSlot()
+    def on_channelList_itemSelectionChanged(self):
+        """
+        Private slot to handle changes of the selection of channels.
+        """
+        selectedItems = self.channelList.selectedItems()
+        enable = bool(selectedItems)
+        self.editChannelButton.setEnabled(enable)
+        self.deleteChannelButton.setEnabled(enable)
+
+    def __editChannel(self, itm):
+        """
+        Private method to edit a channel.
+
+        @param itm reference to the item to be edited
+        @type QTreeWidgetItem
+        """
+        from .IrcChannelEditDialog import IrcChannelEditDialog
+        from .IrcNetworkManager import IrcChannel
+
+        if itm:
+            channel = self.__network.getChannel(itm.text(0))
+            name = channel.getName()
+            key = channel.getKey()
+            autoJoin = channel.autoJoin()
+        else:
+            # add a new channel
+            name = ""
+            key = ""
+            autoJoin = False
+
+        dlg = IrcChannelEditDialog(name, key, autoJoin, itm is not None, parent=self)
+        if dlg.exec() == QDialog.DialogCode.Accepted:
+            name, key, autoJoin = dlg.getData()
+            channel = IrcChannel(name)
+            channel.setKey(key)
+            channel.setAutoJoin(autoJoin)
+            if itm:
+                if autoJoin:
+                    itm.setText(1, self.tr("Yes"))
+                else:
+                    itm.setText(1, self.tr("No"))
+                self.__network.setChannel(channel)
+            else:
+                if autoJoin:
+                    autoJoinTxt = self.tr("Yes")
+                else:
+                    autoJoinTxt = self.tr("No")
+                QTreeWidgetItem(self.channelList, [name, autoJoinTxt])
+                self.__network.addChannel(channel)
+
+    def getNetwork(self):
+        """
+        Public method to get the network object.
+
+        @return edited network object
+        @rtype IrcNetwork
+        """
+        self.__network.setName(self.networkEdit.text())
+        return self.__network
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/IrcNetworkEditDialog.ui	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IrcNetworkEditDialog</class>
+ <widget class="QDialog" name="IrcNetworkEditDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>321</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>IRC Network</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Network Name:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1" colspan="2">
+    <widget class="QLineEdit" name="networkEdit">
+     <property name="toolTip">
+      <string>Enter the name of the IRC network</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="label_2">
+     <property name="text">
+      <string>Identity:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <widget class="QComboBox" name="identityCombo">
+     <property name="toolTip">
+      <string>Select the identity to be used for the IRC network</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="2">
+    <widget class="QToolButton" name="editIdentitiesButton">
+     <property name="toolTip">
+      <string>Press to edit the identities</string>
+     </property>
+     <property name="text">
+      <string/>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0">
+    <widget class="QLabel" name="label_3">
+     <property name="text">
+      <string>Server:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="2">
+    <widget class="QToolButton" name="editServerButton">
+     <property name="toolTip">
+      <string>Press to edit the server configuration</string>
+     </property>
+     <property name="text">
+      <string/>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="0">
+    <widget class="QLabel" name="label_4">
+     <property name="text">
+      <string>Channels:</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1">
+    <widget class="QTreeWidget" name="channelList">
+     <property name="alternatingRowColors">
+      <bool>true</bool>
+     </property>
+     <property name="rootIsDecorated">
+      <bool>false</bool>
+     </property>
+     <property name="itemsExpandable">
+      <bool>false</bool>
+     </property>
+     <property name="expandsOnDoubleClick">
+      <bool>false</bool>
+     </property>
+     <column>
+      <property name="text">
+       <string>Channel</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>Join Automatically</string>
+      </property>
+     </column>
+    </widget>
+   </item>
+   <item row="3" column="2">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <widget class="QToolButton" name="addChannelButton">
+       <property name="toolTip">
+        <string>Press to add a new channel</string>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="editChannelButton">
+       <property name="toolTip">
+        <string>Press to edit the selected channel</string>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="deleteChannelButton">
+       <property name="toolTip">
+        <string>Press to delete the selected channel</string>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="verticalSpacer">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>98</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item row="4" column="0" colspan="3">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1">
+    <widget class="QLineEdit" name="serverEdit">
+     <property name="toolTip">
+      <string>Shows the name of the server</string>
+     </property>
+     <property name="readOnly">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>networkEdit</tabstop>
+  <tabstop>identityCombo</tabstop>
+  <tabstop>editIdentitiesButton</tabstop>
+  <tabstop>serverEdit</tabstop>
+  <tabstop>editServerButton</tabstop>
+  <tabstop>channelList</tabstop>
+  <tabstop>addChannelButton</tabstop>
+  <tabstop>editChannelButton</tabstop>
+  <tabstop>deleteChannelButton</tabstop>
+  <tabstop>buttonBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>IrcNetworkEditDialog</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>IrcNetworkEditDialog</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/ExtensionIrc/IrcNetworkListDialog.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,271 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to list the configured IRC networks.
+"""
+
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtWidgets import QDialog, QTreeWidgetItem
+
+from eric7.EricWidgets import EricMessageBox
+
+from .Ui_IrcNetworkListDialog import Ui_IrcNetworkListDialog
+
+
+class IrcNetworkListDialog(QDialog, Ui_IrcNetworkListDialog):
+    """
+    Class implementing a dialog to list the configured IRC networks.
+    """
+
+    def __init__(self, manager, parent=None):
+        """
+        Constructor
+
+        @param manager reference to the IRC network manager
+        @type IrcNetworkManager
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        self.__manager = manager
+        self.__ircWidget = parent
+
+        self.__refreshNetworksList()
+
+    def __resizeColumns(self):
+        """
+        Private slot to resize all columns to their contents.
+        """
+        for col in range(self.networksList.columnCount()):
+            self.networksList.resizeColumnToContents(col)
+
+    def __checkButtons(self):
+        """
+        Private slot to set the enabled state of the buttons.
+        """
+        enable = True
+        selectedItems = self.networksList.selectedItems()
+        if len(selectedItems) == 0:
+            enable = False
+        else:
+            for itm in selectedItems:
+                enable &= itm.parent() is None
+
+        self.editButton.setEnabled(enable)
+        self.deleteButton.setEnabled(enable)
+        self.autoConnectButton.setEnabled(enable)
+
+        if enable:
+            itm = self.networksList.selectedItems()[0]
+            check = self.__manager.getNetwork(itm.text(0)).autoConnect()
+            self.autoConnectButton.setChecked(check)
+
+    def __refreshNetworkEntry(self, itm):
+        """
+        Private method to (re-)set the data of a network entry.
+
+        @param itm reference to the network entry
+        @type QTreeWidgetItem
+        """
+        from .IrcNetworkManager import IrcIdentity
+
+        # step 1: delete all child entries
+        children = itm.takeChildren()
+        for child in children:
+            del child
+
+        # step 2: (re-)add the child entries
+        networkName = itm.text(0)
+        network = self.__manager.getNetwork(networkName)
+        server = network.getServer()
+        identityName = network.getIdentityName()
+        if identityName == IrcIdentity.DefaultIdentityName:
+            identityName = IrcIdentity.DefaultIdentityDisplay
+        autoConnect = self.tr("Yes") if network.autoConnect() else self.tr("No")
+
+        QTreeWidgetItem(itm, [self.tr("Identity"), identityName])
+        QTreeWidgetItem(
+            itm,
+            [self.tr("Server"), "{0}:{1}".format(server.getName(), server.getPort())],
+        )
+        QTreeWidgetItem(
+            itm, [self.tr("Channels"), ", ".join(network.getChannelNames())]
+        )
+        QTreeWidgetItem(itm, [self.tr("Auto-Connect"), autoConnect])
+
+        self.__resizeColumns()
+
+    def __refreshNetworksList(self):
+        """
+        Private method to refresh the complete networks list.
+        """
+        self.networksList.clear()
+
+        networkNames = self.__manager.getNetworkNames()
+        for networkName in networkNames:
+            topitm = QTreeWidgetItem(self.networksList, [networkName])
+            self.__refreshNetworkEntry(topitm)
+            topitm.setExpanded(True)
+        self.__resizeColumns()
+
+        self.__checkButtons()
+
+    @pyqtSlot()
+    def on_networksList_itemSelectionChanged(self):
+        """
+        Private slot to handle changes of the selection of networks.
+        """
+        self.__checkButtons()
+
+    @pyqtSlot()
+    def on_newButton_clicked(self):
+        """
+        Private slot to add a new network entry.
+        """
+        from .IrcNetworkEditDialog import IrcNetworkEditDialog
+
+        dlg = IrcNetworkEditDialog(manager=self.__manager, networkName="", parent=self)
+        if dlg.exec() == QDialog.DialogCode.Accepted:
+            network = dlg.getNetwork()
+            self.__manager.addNetwork(network)
+            self.__refreshNetworksList()
+
+    @pyqtSlot()
+    def on_editButton_clicked(self):
+        """
+        Private slot to edit the selected network.
+        """
+        from .IrcNetworkEditDialog import IrcNetworkEditDialog
+
+        itm = self.networksList.selectedItems()[0]
+        if itm:
+            networkName = itm.text(0)
+            dlg = IrcNetworkEditDialog(
+                manager=self.__manager, networkName=networkName, parent=self
+            )
+            if dlg.exec() == QDialog.DialogCode.Accepted:
+                network = dlg.getNetwork()
+                self.__manager.setNetwork(network, networkName)
+                if network.getName() != networkName:
+                    itm.setText(0, network.getName())
+                self.__refreshNetworkEntry(itm)
+
+    @pyqtSlot()
+    def on_deleteButton_clicked(self):
+        """
+        Private slot to delete the selected entry.
+        """
+        itm = self.networksList.selectedItems()[0]
+        if itm.parent() is None:
+            networkName = itm.text(0)
+            res = EricMessageBox.yesNo(
+                self,
+                self.tr("Delete Irc Network"),
+                self.tr(
+                    """Do you really want to delete IRC network <b>{0}</b>?"""
+                ).format(networkName),
+            )
+            if res:
+                index = self.networksList.indexOfTopLevelItem(itm)
+                self.networksList.takeTopLevelItem(index)
+                del itm
+
+                self.__manager.deleteNetwork(networkName)
+
+    @pyqtSlot(QTreeWidgetItem)
+    def on_networksList_itemExpanded(self, _item):
+        """
+        Private slot handling the expansion of a top level item.
+
+        @param _item reference to the expanded item (unused)
+        @type QTreeWidgetItem
+        """
+        self.__resizeColumns()
+
+    @pyqtSlot(QTreeWidgetItem)
+    def on_networksList_itemCollapsed(self, _item):
+        """
+        Private slot handling the collapse of a top level item.
+
+        @param _item reference to the collapsed item (unused)
+        @type QTreeWidgetItem
+        """
+        self.__resizeColumns()
+
+    @pyqtSlot(bool)
+    def on_autoConnectButton_clicked(self, checked):
+        """
+        Private slot handling the auto-connect selection.
+
+        @param checked flag indicating the state of the button
+        @type bool
+        """
+        itm = self.networksList.selectedItems()[0]
+        if itm.parent() is None:
+            networkName = itm.text(0)
+            if checked:
+                # enable the selected network, disable all others
+                # step 1: update network objects
+                for name in self.__manager.getNetworkNames():
+                    network = self.__manager.getNetwork(networkName)
+                    if name == networkName:
+                        network.setAutoConnect(True)
+                    else:
+                        network.setAutoConnect(False)
+                    self.__manager.networkChanged()
+
+                # step 2: update list entries
+                for index in range(self.networksList.topLevelItemCount()):
+                    titm = self.networksList.topLevelItem(index)
+                    if titm.text(0) == networkName:
+                        self.__setAutoConnectEntry(titm, True)
+                    else:
+                        self.__setAutoConnectEntry(titm, False)
+            else:
+                # step 1: update network object
+                network = self.__manager.getNetwork(networkName)
+                network.setAutoConnect(False)
+                self.__manager.networkChanged()
+
+                # step 2: update list entry
+                self.__setAutoConnectEntry(itm, False)
+
+    def __setAutoConnectEntry(self, itm, on):
+        """
+        Private method to set the auto-connect entry of a network item.
+
+        @param itm reference to the network item
+        @type QTreeWidgetItem
+        @param on flag indicating the auto-connect state
+        @type bool
+        """
+        autoConnect = self.tr("Yes") if on else self.tr("No")
+        for index in range(itm.childCount()):
+            citm = itm.child(index)
+            if citm.text(0) == self.tr("Auto-Connect"):
+                citm.setText(1, autoConnect)
+
+    @pyqtSlot()
+    def on_editIdentitiesButton_clicked(self):
+        """
+        Private slot to edit the identities.
+        """
+        from .IrcIdentitiesEditDialog import IrcIdentitiesEditDialog
+
+        dlg = IrcIdentitiesEditDialog(self.__manager, "", parent=self)
+        dlg.exec()
+
+        selectedNetwork = self.networksList.selectedItems()
+        selectedNetworkName = selectedNetwork[0].text(0) if selectedNetwork else ""
+        self.__refreshNetworksList()
+        if selectedNetworkName:
+            for index in range(self.networksList.topLevelItemCount()):
+                itm = self.networksList.topLevelItem(index)
+                if itm.text(0) == selectedNetworkName:
+                    itm.setSelected(True)
+                    break
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/IrcNetworkListDialog.ui	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IrcNetworkListDialog</class>
+ <widget class="QDialog" name="IrcNetworkListDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>500</width>
+    <height>350</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>IRC Networks</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QTreeWidget" name="networksList">
+     <property name="editTriggers">
+      <set>QAbstractItemView::NoEditTriggers</set>
+     </property>
+     <property name="alternatingRowColors">
+      <bool>true</bool>
+     </property>
+     <property name="columnCount">
+      <number>2</number>
+     </property>
+     <attribute name="headerVisible">
+      <bool>false</bool>
+     </attribute>
+     <column>
+      <property name="text">
+       <string notr="true">1</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string notr="true">2</string>
+      </property>
+     </column>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <widget class="QPushButton" name="newButton">
+       <property name="toolTip">
+        <string>Press to define a new network</string>
+       </property>
+       <property name="text">
+        <string>&amp;New...</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="editButton">
+       <property name="toolTip">
+        <string>Press to edit the selected network</string>
+       </property>
+       <property name="text">
+        <string>&amp;Edit...</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="deleteButton">
+       <property name="toolTip">
+        <string>Press to delete the selected network</string>
+       </property>
+       <property name="text">
+        <string>&amp;Delete</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="autoConnectButton">
+       <property name="toolTip">
+        <string>Press to  toggle the auto-connect flag of the selected network</string>
+       </property>
+       <property name="text">
+        <string>&amp;Auto-Connect</string>
+       </property>
+       <property name="checkable">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="Line" name="line">
+       <property name="lineWidth">
+        <number>2</number>
+       </property>
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="editIdentitiesButton">
+       <property name="toolTip">
+        <string>Press to edit the identities</string>
+       </property>
+       <property name="text">
+        <string>Edit &amp;Identities...</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="verticalSpacer">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>40</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0" colspan="2">
+    <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>networksList</tabstop>
+  <tabstop>newButton</tabstop>
+  <tabstop>editButton</tabstop>
+  <tabstop>deleteButton</tabstop>
+  <tabstop>autoConnectButton</tabstop>
+  <tabstop>editIdentitiesButton</tabstop>
+  <tabstop>buttonBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>IrcNetworkListDialog</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>IrcNetworkListDialog</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/ExtensionIrc/IrcNetworkManager.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,1103 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the IRC data structures and their manager.
+"""
+
+import copy
+
+from PyQt6.QtCore import QCoreApplication, QObject, pyqtSignal
+
+from eric7 import EricUtilities, Preferences
+from eric7.EricUtilities.crypto import pwConvert
+from eric7.SystemUtilities import OSUtilities
+from eric7.Utilities.AutoSaver import AutoSaver
+
+
+class IrcIdentity:
+    """
+    Class implementing the IRC identity object.
+    """
+
+    DefaultIdentityName = "0default"
+    DefaultIdentityDisplay = QCoreApplication.translate(
+        "IrcIdentity", "Default Identity"
+    )
+
+    DefaultAwayMessage = QCoreApplication.translate("IrcIdentity", "Gone away for now.")
+    DefaultQuitMessage = QCoreApplication.translate("IrcIdentity", "IRC for eric IDE")
+    DefaultPartMessage = QCoreApplication.translate("IrcIdentity", "IRC for eric IDE")
+
+    def __init__(self, name):
+        """
+        Constructor
+
+        @param name name of the identity
+        @type str
+        """
+        super().__init__()
+
+        self.__name = name
+        self.__realName = ""
+        self.__nickNames = []
+        self.__serviceName = ""
+        self.__password = ""
+        self.__ident = OSUtilities.getUserName()
+
+        self.__rememberPosOnAway = True
+        self.__awayMessage = IrcIdentity.DefaultAwayMessage
+
+        self.__quitMessage = IrcIdentity.DefaultQuitMessage
+        self.__partMessage = IrcIdentity.DefaultPartMessage
+
+    def save(self, settings):
+        """
+        Public method to save the identity data.
+
+        @param settings reference to the settings object
+        @type QSettings
+        """
+        # no need to save the name because that is the group key
+        settings.setValue("Ident", self.__ident)
+        settings.setValue("RealName", self.__realName)
+        settings.setValue("NickNames", self.__nickNames)
+        settings.setValue("ServiceName", self.__serviceName)
+        settings.setValue("Password", self.__password)
+        settings.setValue("QuitMessage", self.__quitMessage)
+        settings.setValue("PartMessage", self.__partMessage)
+        settings.setValue("RememberAwayPosition", self.__rememberPosOnAway)
+        settings.setValue("AwayMessage", self.__awayMessage)
+
+    def load(self, settings):
+        """
+        Public method to load the identity data.
+
+        @param settings reference to the settings object
+        @type QSettings
+        """
+        self.__ident = settings.value("Ident", OSUtilities.getUserName())
+        self.__realName = settings.value("RealName", "")
+        self.__nickNames = EricUtilities.toList(settings.value("NickNames", []))
+        self.__serviceName = settings.value("ServiceName", "")
+        self.__password = settings.value("Password", "")
+        self.__quitMessage = settings.value(
+            "QuitMessage", IrcIdentity.DefaultQuitMessage
+        )
+        self.__partMessage = settings.value(
+            "PartMessage", IrcIdentity.DefaultPartMessage
+        )
+        self.__rememberPosOnAway = EricUtilities.toBool(
+            settings.value("RememberAwayPosition", True)
+        )
+        self.__awayMessage = settings.value(
+            "AwayMessage", IrcIdentity.DefaultAwayMessage
+        )
+
+    def setName(self, name):
+        """
+        Public method to set the identity name.
+
+        @param name identity name
+        @type str
+        """
+        self.__name = name
+
+    def getName(self):
+        """
+        Public method to get the identity name.
+
+        @return identity name
+        @rtype str
+        """
+        return self.__name
+
+    def setIdent(self, name):
+        """
+        Public method to set the real identity name.
+
+        @param name real identity name
+        @type str
+        """
+        self.__ident = name
+
+    def getIdent(self):
+        """
+        Public method to get the real identity name.
+
+        @return real identity name
+        @rtype str
+        """
+        return self.__ident
+
+    def setRealName(self, name):
+        """
+        Public method to set the real name of the identity.
+
+        @param name real name
+        @type str
+        """
+        self.__realName = name
+
+    def getRealName(self):
+        """
+        Public method to get the real name.
+
+        @return real name
+        @rtype str
+        """
+        return self.__realName
+
+    def setNickNames(self, names):
+        """
+        Public method to set the nick names of the identity.
+
+        @param names nick names
+        @type list of str
+        """
+        self.__nickNames = names[:]
+
+    def getNickNames(self):
+        """
+        Public method to get the nick names.
+
+        @return nick names
+        @rtype list of str
+        """
+        return self.__nickNames
+
+    def setServiceName(self, name):
+        """
+        Public method to set the service name of the identity used for
+        identification.
+
+        @param name service name
+        @type str
+        """
+        self.__serviceName = name
+
+    def getServiceName(self):
+        """
+        Public method to get the service name of the identity used for
+        identification.
+
+        @return service name
+        @rtype str
+        """
+        return self.__serviceName
+
+    def setPassword(self, password):
+        """
+        Public method to set a new password.
+
+        @param password password to set
+        @type str
+        """
+        self.__password = pwConvert(password, encode=True)
+
+    def getPassword(self):
+        """
+        Public method to get the password.
+
+        @return password
+        @rtype str
+        """
+        return pwConvert(self.__password, encode=False)
+
+    def setQuitMessage(self, message):
+        """
+        Public method to set the QUIT message.
+
+        @param message QUIT message
+        @type str
+        """
+        if message:
+            self.__quitMessage = message
+        else:
+            self.__quitMessage = IrcIdentity.DefaultQuitMessage
+
+    def getQuitMessage(self):
+        """
+        Public method to get the QUIT message.
+
+        @return QUIT message
+        @rtype str
+        """
+        return self.__quitMessage
+
+    def setPartMessage(self, message):
+        """
+        Public method to set the PART message.
+
+        @param message PART message
+        @type str
+        """
+        if message:
+            self.__partMessage = message
+        else:
+            self.__partMessage = IrcIdentity.DefaultPartMessage
+
+    def getPartMessage(self):
+        """
+        Public method to get the PART message.
+
+        @return PART message
+        @rtype str
+        """
+        return self.__partMessage
+
+    def setRememberAwayPosition(self, remember):
+        """
+        Public method to set to remember the chat position upon AWAY.
+
+        @param remember flag indicating to remember the chat position
+        @type bool
+        """
+        self.__rememberPosOnAway = remember
+
+    def rememberAwayPosition(self):
+        """
+        Public method to get a flag indicating to remember the chat position
+        upon AWAY.
+
+        @return flag indicating to remember the chat position
+        @rtype bool
+        """
+        return self.__rememberPosOnAway
+
+    def setAwayMessage(self, message):
+        """
+        Public method to set the AWAY message.
+
+        @param message AWAY message
+        @type str
+        """
+        if message:
+            self.__awayMessage = message
+        else:
+            self.__awayMessage = IrcIdentity.DefaultAwayMessage
+
+    def getAwayMessage(self):
+        """
+        Public method to get the AWAY message.
+
+        @return AWAY message
+        @rtype str
+        """
+        return self.__awayMessage
+
+    @classmethod
+    def createDefaultIdentity(cls):
+        """
+        Class method to create the default identity.
+
+        @return default identity
+        @rtype IrcIdentity
+        """
+        userName = OSUtilities.getUserName()
+        realName = OSUtilities.getRealName()
+        if not realName:
+            realName = "eric IDE chat"
+        identity = IrcIdentity(IrcIdentity.DefaultIdentityName)
+        identity.setNickNames([userName, userName + "_", userName + "__"])
+        identity.setRealName(realName)
+        identity.setIdent(userName)
+        return identity
+
+
+class IrcServer:
+    """
+    Class implementing the IRC identity object.
+    """
+
+    DefaultPort = 6667
+    DefaultSslPort = 6697
+
+    def __init__(self, name):
+        """
+        Constructor
+
+        @param name name of the server
+        @type str
+        """
+        super().__init__()
+
+        self.__server = name
+        self.__port = IrcServer.DefaultPort
+        self.__ssl = False
+        self.__password = ""
+
+    def save(self, settings):
+        """
+        Public method to save the server data.
+
+        @param settings reference to the settings object
+        @type QSettings
+        """
+        settings.setValue("Name", self.__server)
+        settings.setValue("Port", self.__port)
+        settings.setValue("SSL", self.__ssl)
+        settings.setValue("Password", self.__password)
+
+    def load(self, settings):
+        """
+        Public method to load the server data.
+
+        @param settings reference to the settings object
+        @type QSettings
+        """
+        self.__server = settings.value("Name", "")
+        self.__port = int(settings.value("Port", IrcServer.DefaultPort))
+        self.__ssl = EricUtilities.toBool(settings.value("SSL", False))
+        self.__password = settings.value("Password", "")
+
+    def getName(self):
+        """
+        Public method to get the server name.
+
+        @return server name
+        @rtype str
+        """
+        return self.__server
+
+    def setName(self, name):
+        """
+        Public method to set the server name.
+
+        @param name server name
+        @type str
+        """
+        self.__server = name
+
+    def getPort(self):
+        """
+        Public method to get the server port number.
+
+        @return port number
+        @rtype int
+        """
+        return self.__port
+
+    def setPort(self, port):
+        """
+        Public method to set the server port number.
+
+        @param port server port number
+        @type int
+        """
+        self.__port = port
+
+    def useSSL(self):
+        """
+        Public method to check for SSL usage.
+
+        @return flag indicating SSL usage
+        @rtype bool
+        """
+        return self.__ssl
+
+    def setUseSSL(self, on):
+        """
+        Public method to set the SSL usage.
+
+        @param on flag indicating SSL usage
+        @type bool
+        """
+        self.__ssl = on
+
+    def setPassword(self, password):
+        """
+        Public method to set a new password.
+
+        @param password password to set
+        @type str
+        """
+        self.__password = pwConvert(password, encode=True)
+
+    def getPassword(self):
+        """
+        Public method to get the password.
+
+        @return password
+        @rtype str
+        """
+        return pwConvert(self.__password, encode=False)
+
+
+class IrcChannel:
+    """
+    Class implementing the IRC channel object.
+    """
+
+    def __init__(self, name):
+        """
+        Constructor
+
+        @param name name of the network
+        @type str
+        """
+        super().__init__()
+
+        self.__name = name
+        self.__key = ""
+        self.__autoJoin = False
+
+    def save(self, settings):
+        """
+        Public method to save the channel data.
+
+        @param settings reference to the settings object
+        @type QSettings
+        """
+        # no need to save the channel name because that is the group key
+        settings.setValue("Key", self.__key)
+        settings.setValue("AutoJoin", self.__autoJoin)
+
+    def load(self, settings):
+        """
+        Public method to load the network data.
+
+        @param settings reference to the settings object
+        @type QSettings
+        """
+        self.__key = settings.value("Key", "")
+        self.__autoJoin = EricUtilities.toBool(settings.value("AutoJoin", False))
+
+    def getName(self):
+        """
+        Public method to get the channel name.
+
+        @return channel name
+        @rtype str
+        """
+        return self.__name
+
+    def setKey(self, key):
+        """
+        Public method to set a new channel key.
+
+        @param key channel key to set
+        @type str
+        """
+        self.__key = pwConvert(key, encode=True)
+
+    def getKey(self):
+        """
+        Public method to get the channel key.
+
+        @return channel key
+        @rtype str
+        """
+        return pwConvert(self.__key, encode=False)
+
+    def autoJoin(self):
+        """
+        Public method to check the auto join status.
+
+        @return flag indicating if the channel should be
+            joined automatically
+        @rtype bool
+        """
+        return self.__autoJoin
+
+    def setAutoJoin(self, enable):
+        """
+        Public method to set the auto join status of the channel.
+
+        @param enable flag indicating if the channel should be
+            joined automatically
+        @type bool
+        """
+        self.__autoJoin = enable
+
+
+class IrcNetwork:
+    """
+    Class implementing the IRC network object.
+    """
+
+    def __init__(self, name):
+        """
+        Constructor
+
+        @param name name of the network
+        @type str
+        """
+        super().__init__()
+
+        self.__name = name
+        self.__identity = ""
+        self.__server = None
+        self.__channels = {}
+        self.__autoConnect = False
+
+    def save(self, settings):
+        """
+        Public method to save the network data.
+
+        @param settings reference to the settings object
+        @type QSettings
+        """
+        # no need to save the network name because that is the group key
+        settings.setValue("Identity", self.__identity)
+        settings.setValue("AutoConnect", self.__autoConnect)
+
+        settings.beginGroup("Server")
+        self.__server.save(settings)
+        settings.endGroup()
+
+        settings.beginGroup("Channels")
+        for key in self.__channels:
+            settings.beginGroup(key)
+            self.__channels[key].save(settings)
+            settings.endGroup()
+        settings.endGroup()
+
+    def load(self, settings):
+        """
+        Public method to load the network data.
+
+        @param settings reference to the settings object
+        @type QSettings
+        """
+        self.__identity = settings.value("Identity", "")
+        self.__autoConnect = EricUtilities.toBool(settings.value("AutoConnect", False))
+
+        settings.beginGroup("Server")
+        self.__server = IrcServer("")
+        self.__server.load(settings)
+        settings.endGroup()
+
+        settings.beginGroup("Channels")
+        for key in settings.childGroups():
+            self.__channels[key] = IrcChannel(key)
+            settings.beginGroup(key)
+            self.__channels[key].load(settings)
+            settings.endGroup()
+        settings.endGroup()
+
+    def setName(self, name):
+        """
+        Public method to set the network name.
+
+        @param name network name
+        @type str
+        """
+        self.__name = name
+
+    def getName(self):
+        """
+        Public method to get the network name.
+
+        @return network name
+        @rtype str
+        """
+        return self.__name
+
+    def setIdentityName(self, name):
+        """
+        Public method to set the name of the identity.
+
+        @param name identity name
+        @type str
+        """
+        self.__identity = name
+
+    def getIdentityName(self):
+        """
+        Public method to get the name of the identity.
+
+        @return identity name
+        @rtype str
+        """
+        return self.__identity
+
+    def getServerName(self):
+        """
+        Public method to get the server name.
+
+        @return server name
+        @rtype str
+        """
+        if self.__server:
+            return self.__server.getName()
+        else:
+            return ""
+
+    def getServer(self):
+        """
+        Public method to get the server object.
+
+        @return reference to the server
+        @rtype IrcServer
+        """
+        return self.__server
+
+    def setServer(self, server):
+        """
+        Public method to set the server.
+
+        @param server server object to set
+        @type IrcServer
+        """
+        self.__server = server
+
+    def setChannels(self, channels):
+        """
+        Public method to set the list of channels.
+
+        @param channels list of channels for the network
+        @type list of IrcChannel
+        """
+        self.__channels = {}
+        for channel in channels:
+            self.__channels[channel.getName()] = channel
+
+    def getChannels(self):
+        """
+        Public method to get the channels.
+
+        @return list of channels for the network
+        @rtype list of IrcChannel
+        """
+        return list(copy.deepcopy(self.__channels).values())
+
+    def getChannelNames(self):
+        """
+        Public method to get the list of channels.
+
+        @return list of channel names
+        @rtype list of str
+        """
+        return sorted(self.__channels)
+
+    def getChannel(self, channelName):
+        """
+        Public method to get a channel.
+
+        @param channelName name of the channel to retrieve
+        @type str
+        @return reference to the channel
+        @rtype IrcChannel
+        """
+        if channelName in self.__channels:
+            return self.__channels[channelName]
+        else:
+            return None
+
+    def setChannel(self, channel):
+        """
+        Public method to set a channel.
+
+        @param channel channel object to set
+        @type IrcChannel
+        """
+        channelName = channel.getName()
+        if channelName in self.__channels:
+            self.__channels[channelName] = channel
+
+    def addChannel(self, channel):
+        """
+        Public method to add a channel.
+
+        @param channel channel object to add
+        @type IrcChannel
+        """
+        channelName = channel.getName()
+        if channelName not in self.__channels:
+            self.__channels[channelName] = channel
+
+    def deleteChannel(self, channelName):
+        """
+        Public method to delete the given channel.
+
+        @param channelName name of the channel to be deleted
+        @type str
+        """
+        if channelName in self.__channels:
+            del self.__channels[channelName]
+
+    def setAutoConnect(self, enable):
+        """
+        Public method to set the auto connect flag.
+
+        @param enable flag indicate to connect to the network at start-up
+        @type bool
+        """
+        self.__autoConnect = enable
+
+    def autoConnect(self):
+        """
+        Public method to check, if the network should be connected to at
+        start-up.
+
+        @return flag indicating an auto connect
+        @rtype bool
+        """
+        return self.__autoConnect
+
+    @classmethod
+    def createDefaultNetwork(cls, ssl=False):
+        """
+        Class method to create the default network.
+
+        @param ssl flag indicating to create a SSL network configuration
+        @type bool
+        @return default network object
+        @rtype IrcNetwork
+        """
+        # network
+        networkName = "libera.chat (SSL)" if ssl else "libera.chat"
+        network = IrcNetwork(networkName)
+        network.setIdentityName(IrcIdentity.DefaultIdentityName)
+
+        # server
+        serverName = "irc.libera.chat"
+        server = IrcServer(serverName)
+        if ssl:
+            server.setPort(IrcServer.DefaultSslPort)
+            server.setUseSSL(True)
+        else:
+            server.setPort(IrcServer.DefaultPort)
+        network.setServer(server)
+
+        # channel
+        channel = IrcChannel("#eric-ide")
+        channel.setAutoJoin(False)
+        network.addChannel(channel)
+
+        # auto connect
+        network.setAutoConnect(False)
+
+        return network
+
+
+class IrcNetworkManager(QObject):
+    """
+    Class implementing the IRC identity object.
+
+    @signal dataChanged() emitted after some data has changed
+    @signal networksChanged() emitted after a network object has changed
+    @signal identitiesChanged() emitted after an identity object has changed
+    """
+
+    dataChanged = pyqtSignal()
+    networksChanged = pyqtSignal()
+    identitiesChanged = pyqtSignal()
+
+    def __init__(self, parent=None):
+        """
+        Constructor
+
+        @param parent reference to the parent object
+        @type QObject
+        """
+        super().__init__(parent)
+
+        self.__loaded = False
+        self.__saveTimer = AutoSaver(self, self.save)
+
+        self.__settings = Preferences.getSettings()
+
+        self.__networks = {}
+        self.__identities = {}
+
+        self.dataChanged.connect(self.__saveTimer.changeOccurred)
+
+    def close(self):
+        """
+        Public method to close the open search engines manager.
+        """
+        self.__saveTimer.saveIfNeccessary()
+
+    def save(self):
+        """
+        Public slot to save the IRC data.
+        """
+        if not self.__loaded:
+            return
+
+        # save IRC data
+        self.__settings.beginGroup("IRC")
+
+        # identities
+        self.__settings.remove("Identities")
+        self.__settings.beginGroup("Identities")
+        for key in self.__identities:
+            self.__settings.beginGroup(key)
+            self.__identities[key].save(self.__settings)
+            self.__settings.endGroup()
+        self.__settings.endGroup()
+
+        # networks
+        self.__settings.remove("Networks")
+        self.__settings.beginGroup("Networks")
+        for key in self.__networks:
+            self.__settings.beginGroup(key)
+            self.__networks[key].save(self.__settings)
+            self.__settings.endGroup()
+        self.__settings.endGroup()
+
+        self.__settings.endGroup()
+
+    def __load(self):
+        """
+        Private slot to load the IRC data.
+        """
+        if self.__loaded:
+            return
+
+        # load IRC data
+        self.__settings.beginGroup("IRC")
+
+        # identities
+        self.__settings.beginGroup("Identities")
+        for key in self.__settings.childGroups():
+            self.__identities[key] = IrcIdentity(key)
+            self.__settings.beginGroup(key)
+            self.__identities[key].load(self.__settings)
+            self.__settings.endGroup()
+        self.__settings.endGroup()
+
+        # networks
+        self.__settings.beginGroup("Networks")
+        for key in self.__settings.childGroups():
+            self.__networks[key] = IrcNetwork(key)
+            self.__settings.beginGroup(key)
+            self.__networks[key].load(self.__settings)
+            self.__settings.endGroup()
+        self.__settings.endGroup()
+
+        self.__settings.endGroup()
+
+        if not self.__identities or not self.__networks:
+            # data structures got corrupted; load defaults
+            self.__loadDefaults()
+
+        if IrcIdentity.DefaultIdentityName not in self.__identities:
+            self.__loadDefaults(identityOnly=True)
+
+        self.__loaded = True
+
+    def __loadDefaults(self, identityOnly=False):
+        """
+        Private method to load default values.
+
+        @param identityOnly flag indicating to just load the default
+            identity
+        @type bool
+        """
+        if not identityOnly:
+            self.__networks = {}
+            self.__identities = {}
+
+        # identity
+        identity = IrcIdentity.createDefaultIdentity()
+        self.__identities[identity.getName()] = identity
+
+        if not identityOnly:
+            network = IrcNetwork.createDefaultNetwork()
+            self.__networks[network.getName()] = network
+            network = IrcNetwork.createDefaultNetwork(True)
+            self.__networks[network.getName()] = network
+
+        self.dataChanged.emit()
+
+    ##################################################################
+    ## Identity related methods below
+    ##################################################################
+
+    def getIdentity(self, name, create=False):
+        """
+        Public method to get an identity object.
+
+        @param name name of the identity to get
+        @type str
+        @param create flag indicating to create a new object,
+            if none exists
+        @type bool
+        @return reference to the identity
+        @rtype IrcIdentity
+        """
+        if not name:
+            return None
+
+        if not self.__loaded:
+            self.__load()
+
+        if name in self.__identities:
+            return self.__identities[name]
+        elif create:
+            ircId = IrcIdentity(name)
+            self.__identities[name] = ircId
+
+            self.dataChanged.emit()
+
+            return ircId
+        else:
+            return None
+
+    def getIdentities(self):
+        """
+        Public method to get a copy of all identities.
+
+        @return dictionary of all identities
+        @rtype dict of IrcIdentity
+        """
+        return copy.deepcopy(self.__identities)
+
+    def setIdentities(self, identities):
+        """
+        Public method to set the identities.
+
+        @param identities dictionary of all identities
+        @type dict of IrcIdentity
+        """
+        self.__identities = copy.deepcopy(identities)
+        self.identityChanged()
+
+        # Check all networks, if the identity they use is still available.
+        # If it isn't, change them to use the default identity.
+        for network in self.__networks.values():
+            if network.getIdentityName() not in self.__identities:
+                network.setIdentityName(IrcIdentity.DefaultIdentityName)
+
+    def getIdentityNames(self):
+        """
+        Public method to get the names of all identities.
+
+        @return names of all identities
+        @rtype list of string)
+        """
+        return list(self.__identities)
+
+    def addIdentity(self, identity):
+        """
+        Public method to add a new identity.
+
+        @param identity reference to the identity to add
+        @type IrcIdentity
+        """
+        name = identity.getName()
+        self.__identities[name] = identity
+        self.identityChanged()
+
+    def deleteIdentity(self, name):
+        """
+        Public method to delete the given identity.
+
+        @param name name of the identity to delete
+        @type str
+        """
+        if name in self.__identities and name != IrcIdentity.DefaultIdentityName:
+            del self.__identities[name]
+            self.identityChanged()
+
+    def renameIdentity(self, oldName, newName):
+        """
+        Public method to rename an identity.
+
+        @param oldName old name of the identity
+        @type str
+        @param newName new name of the identity
+        @type str
+        """
+        if oldName in self.__identities:
+            self.__identities[newName] = self.__identities[oldName]
+            del self.__identities[oldName]
+
+            for network in self.__networks:
+                if network.getIdentityName() == oldName:
+                    network.setIdentityName(newName)
+
+            self.identityChanged()
+
+    def identityChanged(self):
+        """
+        Public method to indicate a change of an identity object.
+        """
+        self.dataChanged.emit()
+        self.identitiesChanged.emit()
+
+    ##################################################################
+    ## Network related methods below
+    ##################################################################
+
+    def getNetwork(self, name):
+        """
+        Public method to get a network object.
+
+        @param name name of the network
+        @type str
+        @return reference to the network object
+        @rtype IrcNetwork
+        """
+        if not self.__loaded:
+            self.__load()
+
+        if name in self.__networks:
+            return self.__networks[name]
+        else:
+            return None
+
+    def setNetwork(self, network, networkName=""):
+        """
+        Public method to set a network.
+
+        @param network network object to set
+        @type IrcNetwork
+        @param networkName name the network was known for
+        @type str
+        """
+        name = network.getName()
+        if networkName and name != networkName:
+            # the network name has changed
+            self.deleteNetwork(networkName)
+            self.addNetwork(network)
+        elif name in self.__networks:
+            self.__networks[name] = network
+            self.networkChanged()
+
+    def addNetwork(self, network):
+        """
+        Public method to add a network.
+
+        @param network network object to add
+        @type IrcNetwork
+        """
+        name = network.getName()
+        if name not in self.__networks:
+            self.__networks[name] = network
+            self.networkChanged()
+
+    def deleteNetwork(self, name):
+        """
+        Public method to delete the given network.
+
+        @param name name of the network to delete
+        @type str
+        """
+        if name in self.__networks:
+            del self.__networks[name]
+            self.networkChanged()
+
+    def networkChanged(self):
+        """
+        Public method to indicate a change of a network object.
+        """
+        self.dataChanged.emit()
+        self.networksChanged.emit()
+
+    def getNetworkNames(self):
+        """
+        Public method to get a list of all known network names.
+
+        @return list of network names
+        @rtype list of str
+        """
+        if not self.__loaded:
+            self.__load()
+
+        return sorted(self.__networks)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/IrcNetworkWidget.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,551 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the network part of the IRC widget.
+"""
+
+import pathlib
+
+from PyQt6.QtCore import QPoint, QThread, QUrl, pyqtSignal, pyqtSlot
+from PyQt6.QtGui import QDesktopServices
+from PyQt6.QtWidgets import QApplication, QMenu, QWidget
+
+from eric7.EricGui import EricPixmapCache
+from eric7.EricWidgets import EricFileDialog, EricMessageBox
+from eric7.EricWidgets.EricApplication import ericApp
+from eric7.SystemUtilities import OSUtilities
+from PluginExtensionIrc import ircExtensionPluginObject
+
+from .IrcUtilities import ircFilter, ircTimestamp
+from .Ui_IrcNetworkWidget import Ui_IrcNetworkWidget
+
+
+class IrcNetworkWidget(QWidget, Ui_IrcNetworkWidget):
+    """
+    Class implementing the network part of the IRC widget.
+
+    @signal connectNetwork(str,bool,bool) emitted to connect or disconnect from
+        a network
+    @signal editNetwork(str) emitted to edit a network configuration
+    @signal joinChannel(str) emitted to join a channel
+    @signal nickChanged(str) emitted to change the nick name
+    @signal sendData(str) emitted to send a message to the channel
+    @signal away(bool) emitted to indicate the away status
+    @signal autoConnected() emitted after an automatic connection was initiated
+    """
+
+    connectNetwork = pyqtSignal(str, bool, bool)
+    editNetwork = pyqtSignal(str)
+    joinChannel = pyqtSignal(str)
+    nickChanged = pyqtSignal(str)
+    sendData = pyqtSignal(str)
+    away = pyqtSignal(bool)
+    autoConnected = pyqtSignal()
+
+    def __init__(self, parent=None):
+        """
+        Constructor
+
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        self.joinButton.setEnabled(False)
+        self.nickCombo.setEnabled(False)
+        self.awayButton.setEnabled(False)
+
+        self.channelCombo.lineEdit().returnPressed.connect(self.on_joinButton_clicked)
+        self.nickCombo.lineEdit().returnPressed.connect(
+            self.on_nickCombo_currentIndexChanged
+        )
+
+        self.__manager = None
+        self.__connected = False
+        self.__registered = False
+        self.__away = False
+
+        self.setConnected(False)
+
+        self.__initMessagesMenu()
+
+        self.connectButton.setIcon(ircExtensionPluginObject.getIcon("ircConnect"))
+        self.editButton.setIcon(ircExtensionPluginObject.getIcon("ircConfigure"))
+        self.joinButton.setIcon(ircExtensionPluginObject.getIcon("ircJoinChannel"))
+        self.awayButton.setIcon(ircExtensionPluginObject.getIcon("ircUserPresent"))
+
+    def initialize(self, manager):
+        """
+        Public method to initialize the widget.
+
+        @param manager reference to the network manager
+        @type IrcNetworkManager
+        """
+        self.__manager = manager
+
+        self.networkCombo.addItems(self.__manager.getNetworkNames())
+
+        self.__manager.networksChanged.connect(self.__refreshNetworks)
+        self.__manager.identitiesChanged.connect(self.__refreshNetworks)
+
+    def autoConnect(self):
+        """
+        Public method to perform the IRC auto connection.
+        """
+        userInterface = ericApp().getObject("UserInterface")
+        online = userInterface.isOnline()
+        self.connectButton.setEnabled(online)
+        userInterface.onlineStateChanged.connect(self.__onlineStateChanged)
+        if online:
+            self.__autoConnect()
+
+    def __autoConnect(self):
+        """
+        Private method to perform the IRC auto connection.
+        """
+        for networkName in self.__manager.getNetworkNames():
+            if self.__manager.getNetwork(networkName).autoConnect():
+                row = self.networkCombo.findText(networkName)
+                self.networkCombo.setCurrentIndex(row)
+                self.on_connectButton_clicked()
+                self.autoConnected.emit()
+                break
+
+    @pyqtSlot(bool)
+    def __onlineStateChanged(self, online):
+        """
+        Private slot handling online state changes.
+
+        @param online online state
+        @type bool
+        """
+        self.connectButton.setEnabled(online)
+        if online:
+            # delay a bit because the signal seems to be sent before the
+            # network interface is fully up
+            QThread.msleep(200)
+            self.__autoConnect()
+        else:
+            network = self.networkCombo.currentText()
+            self.connectNetwork.emit(network, online, True)
+
+    @pyqtSlot()
+    def __refreshNetworks(self):
+        """
+        Private slot to refresh all network related widgets.
+        """
+        currentNetwork = self.networkCombo.currentText()
+        currentNick = self.nickCombo.currentText()
+        currentChannel = self.channelCombo.currentText()
+        blocked = self.networkCombo.blockSignals(True)
+        self.networkCombo.clear()
+        self.networkCombo.addItems(self.__manager.getNetworkNames())
+        self.networkCombo.blockSignals(blocked)
+        row = self.networkCombo.findText(currentNetwork)
+        if row == -1:
+            row = 0
+        blocked = self.nickCombo.blockSignals(True)
+        self.networkCombo.setCurrentIndex(row)
+        self.nickCombo.setEditText(currentNick)
+        self.nickCombo.blockSignals(blocked)
+        self.channelCombo.setEditText(currentChannel)
+
+    @pyqtSlot()
+    def on_connectButton_clicked(self):
+        """
+        Private slot to connect to a network.
+        """
+        network = self.networkCombo.currentText()
+        self.connectNetwork.emit(network, not self.__connected, False)
+
+    @pyqtSlot()
+    def on_awayButton_clicked(self):
+        """
+        Private slot to toggle the away status.
+        """
+        if self.__away:
+            self.handleAwayCommand("")
+        else:
+            networkName = self.networkCombo.currentText()
+            identityName = self.__manager.getNetwork(networkName).getIdentityName()
+            identity = self.__manager.getIdentity(identityName)
+            if identity:
+                awayMessage = identity.getAwayMessage()
+            else:
+                awayMessage = ""
+            self.handleAwayCommand(awayMessage)
+
+    @pyqtSlot(str)
+    def handleAwayCommand(self, awayMessage):
+        """
+        Public slot to process an away command.
+
+        @param awayMessage message to be set for being away
+        @type str
+        """
+        if awayMessage and not self.__away:
+            # set being away
+            # don't send away, if the status is already set
+            self.sendData.emit("AWAY :" + awayMessage)
+            self.awayButton.setIcon(ircExtensionPluginObject.getIcon("ircUserAway"))
+            self.__away = True
+            self.away.emit(self.__away)
+        elif not awayMessage and self.__away:
+            # cancel being away
+            self.sendData.emit("AWAY")
+            self.awayButton.setIcon(ircExtensionPluginObject.getIcon("ircUserPresent"))
+            self.__away = False
+            self.away.emit(self.__away)
+
+    @pyqtSlot()
+    def on_editButton_clicked(self):
+        """
+        Private slot to edit a network.
+        """
+        network = self.networkCombo.currentText()
+        self.editNetwork.emit(network)
+
+    @pyqtSlot(str)
+    def on_channelCombo_editTextChanged(self, txt):
+        """
+        Private slot to react upon changes of the channel.
+
+        @param txt current text of the channel combo
+        @type str
+        """
+        on = bool(txt) and self.__registered
+        self.joinButton.setEnabled(on)
+
+    @pyqtSlot()
+    def on_joinButton_clicked(self):
+        """
+        Private slot to join a channel.
+        """
+        channel = self.channelCombo.currentText()
+        self.joinChannel.emit(channel)
+
+    @pyqtSlot(int)
+    def on_networkCombo_currentIndexChanged(self, index):
+        """
+        Private slot to handle selections of a network.
+
+        @param index index of the selected entry
+        @type int
+        """
+        networkName = self.networkCombo.itemText(index)
+        network = self.__manager.getNetwork(networkName)
+        self.nickCombo.clear()
+        self.channelCombo.clear()
+        if network:
+            channels = network.getChannelNames()
+            self.channelCombo.addItems(channels)
+            self.channelCombo.setEnabled(True)
+            identity = self.__manager.getIdentity(network.getIdentityName())
+            if identity:
+                self.nickCombo.addItems(identity.getNickNames())
+        else:
+            self.channelCombo.setEnabled(False)
+
+    def getNetworkChannels(self):
+        """
+        Public method to get the list of channels associated with the
+        selected network.
+
+        @return associated channels
+        @rtype list of IrcChannel
+        """
+        networkName = self.networkCombo.currentText()
+        network = self.__manager.getNetwork(networkName)
+        return network.getChannels()
+
+    @pyqtSlot(int)
+    @pyqtSlot()
+    def on_nickCombo_currentIndexChanged(self, nick=0):
+        """
+        Private slot to use another nick name.
+
+        @param nick index of the selected nick name (unused)
+        @type int
+        """
+        if self.__connected:
+            self.nickChanged.emit(self.nickCombo.currentText())
+
+    def getNickname(self):
+        """
+        Public method to get the currently selected nick name.
+
+        @return selected nick name
+        @rtype str
+        """
+        return self.nickCombo.currentText()
+
+    def setNickName(self, nick):
+        """
+        Public slot to set the nick name in use.
+
+        @param nick nick name in use
+        @type str
+        """
+        self.nickCombo.blockSignals(True)
+        self.nickCombo.setEditText(nick)
+        self.nickCombo.blockSignals(False)
+
+    def addMessage(self, msg):
+        """
+        Public method to add a message.
+
+        @param msg message to be added
+        @type str
+        """
+        s = '<font color="{0}">{1} {2}</font>'.format(
+            ircExtensionPluginObject.getPreferences("NetworkMessageColour"),
+            ircTimestamp(),
+            msg,
+        )
+        self.messages.append(s)
+
+    def addServerMessage(self, msgType, msg, filterMsg=True):
+        """
+        Public method to add a server message.
+
+        @param msgType txpe of the message
+        @type str
+        @param msg message to be added
+        @type str
+        @param filterMsg flag indicating to filter the message
+        @type bool
+        """
+        if filterMsg:
+            msg = ircFilter(msg)
+        s = '<font color="{0}">{1} <b>[</b>{2}<b>]</b> {3}</font>'.format(
+            ircExtensionPluginObject.getPreferences("ServerMessageColour"),
+            ircTimestamp(),
+            msgType,
+            msg,
+        )
+        self.messages.append(s)
+
+    def addErrorMessage(self, msgType, msg):
+        """
+        Public method to add an error message.
+
+        @param msgType txpe of the message
+        @type str
+        @param msg message to be added
+        @type str
+        """
+        s = '<font color="{0}">{1} <b>[</b>{2}<b>]</b> {3}</font>'.format(
+            ircExtensionPluginObject.getPreferences("ErrorMessageColour"),
+            ircTimestamp(),
+            msgType,
+            msg,
+        )
+        self.messages.append(s)
+
+    def setConnected(self, connected):
+        """
+        Public slot to set the connection state.
+
+        @param connected flag indicating the connection state
+        @type bool
+        """
+        self.__connected = connected
+        if self.__connected:
+            self.connectButton.setIcon(
+                ircExtensionPluginObject.getIcon("ircDisconnect")
+            )
+            self.connectButton.setToolTip(
+                self.tr("Press to disconnect from the network")
+            )
+        else:
+            self.connectButton.setIcon(ircExtensionPluginObject.getIcon("ircConnect"))
+            self.connectButton.setToolTip(
+                self.tr("Press to connect to the selected network")
+            )
+
+    def isConnected(self):
+        """
+        Public method to check, if the network is connected.
+
+        @return flag indicating a connected network
+        @rtype bool
+        """
+        return self.__connected
+
+    def setRegistered(self, registered):
+        """
+        Public slot to set the registered state.
+
+        @param registered flag indicating the registration state
+        @type bool
+        """
+        self.__registered = registered
+        on = bool(self.channelCombo.currentText()) and self.__registered
+        self.joinButton.setEnabled(on)
+        self.nickCombo.setEnabled(registered)
+        self.awayButton.setEnabled(registered)
+        if registered:
+            self.awayButton.setIcon(ircExtensionPluginObject.getIcon("ircUserPresent"))
+            self.__away = False
+
+    def __clearMessages(self):
+        """
+        Private slot to clear the contents of the messages display.
+        """
+        self.messages.clear()
+
+    def __copyMessages(self):
+        """
+        Private slot to copy the selection of the messages display to
+        the clipboard.
+        """
+        self.messages.copy()
+
+    def __copyAllMessages(self):
+        """
+        Private slot to copy the contents of the messages display to
+        the clipboard.
+        """
+        txt = self.messages.toPlainText()
+        if txt:
+            cb = QApplication.clipboard()
+            cb.setText(txt)
+
+    def __cutAllMessages(self):
+        """
+        Private slot to cut the contents of the messages display to
+        the clipboard.
+        """
+        txt = self.messages.toPlainText()
+        if txt:
+            cb = QApplication.clipboard()
+            cb.setText(txt)
+        self.messages.clear()
+
+    def __saveMessages(self):
+        """
+        Private slot to save the contents of the messages display.
+        """
+        hasText = not self.messages.document().isEmpty()
+        if hasText:
+            if OSUtilities.isWindowsPlatform():
+                htmlExtension = "htm"
+            else:
+                htmlExtension = "html"
+            fname, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
+                self,
+                self.tr("Save Messages"),
+                "",
+                self.tr("HTML Files (*.{0});;Text Files (*.txt);;All Files (*)").format(
+                    htmlExtension
+                ),
+                None,
+                EricFileDialog.DontConfirmOverwrite,
+            )
+            if fname:
+                fpath = pathlib.Path(fname)
+                if not fpath.suffix:
+                    ex = selectedFilter.split("(*")[1].split(")")[0]
+                    if ex:
+                        fpath = fpath.with_suffix(ex)
+                if fpath.exists():
+                    res = EricMessageBox.yesNo(
+                        self,
+                        self.tr("Save Messages"),
+                        self.tr(
+                            "<p>The file <b>{0}</b> already exists."
+                            " Overwrite it?</p>"
+                        ).format(fpath),
+                        icon=EricMessageBox.Warning,
+                    )
+                    if not res:
+                        return
+
+                try:
+                    txt = (
+                        self.messages.toHtml()
+                        if fpath.suffix.lower() in [".htm", ".html"]
+                        else self.messages.toPlainText()
+                    )
+                    with fpath.open("w", encoding="utf-8") as f:
+                        f.write(txt)
+                except OSError as err:
+                    EricMessageBox.critical(
+                        self,
+                        self.tr("Error saving Messages"),
+                        self.tr(
+                            """<p>The messages contents could not be written"""
+                            """ to <b>{0}</b></p><p>Reason: {1}</p>"""
+                        ).format(fpath, str(err)),
+                    )
+
+    def __initMessagesMenu(self):
+        """
+        Private slot to initialize the context menu of the messages pane.
+        """
+        self.__messagesMenu = QMenu(self)
+        self.__copyMessagesAct = self.__messagesMenu.addAction(
+            EricPixmapCache.getIcon("editCopy"), self.tr("Copy"), self.__copyMessages
+        )
+        self.__messagesMenu.addSeparator()
+        self.__cutAllMessagesAct = self.__messagesMenu.addAction(
+            EricPixmapCache.getIcon("editCut"),
+            self.tr("Cut all"),
+            self.__cutAllMessages,
+        )
+        self.__copyAllMessagesAct = self.__messagesMenu.addAction(
+            EricPixmapCache.getIcon("editCopy"),
+            self.tr("Copy all"),
+            self.__copyAllMessages,
+        )
+        self.__messagesMenu.addSeparator()
+        self.__clearMessagesAct = self.__messagesMenu.addAction(
+            EricPixmapCache.getIcon("editDelete"),
+            self.tr("Clear"),
+            self.__clearMessages,
+        )
+        self.__messagesMenu.addSeparator()
+        self.__saveMessagesAct = self.__messagesMenu.addAction(
+            EricPixmapCache.getIcon("fileSave"), self.tr("Save"), self.__saveMessages
+        )
+
+        self.on_messages_copyAvailable(False)
+
+    @pyqtSlot(bool)
+    def on_messages_copyAvailable(self, yes):
+        """
+        Private slot to react to text selection/deselection of the
+        messages edit.
+
+        @param yes flag signaling the availability of selected text
+        @type bool
+        """
+        self.__copyMessagesAct.setEnabled(yes)
+
+    @pyqtSlot(QPoint)
+    def on_messages_customContextMenuRequested(self, pos):
+        """
+        Private slot to show the context menu of the messages pane.
+
+        @param pos position the menu should be opened at
+        @type QPoint
+        """
+        enable = not self.messages.document().isEmpty()
+        self.__cutAllMessagesAct.setEnabled(enable)
+        self.__copyAllMessagesAct.setEnabled(enable)
+        self.__saveMessagesAct.setEnabled(enable)
+        self.__messagesMenu.popup(self.messages.mapToGlobal(pos))
+
+    @pyqtSlot(QUrl)
+    def on_messages_anchorClicked(self, url):
+        """
+        Private slot to open links in the default browser.
+
+        @param url URL to be opened
+        @type QUrl
+        """
+        QDesktopServices.openUrl(url)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/IrcNetworkWidget.ui	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IrcNetworkWidget</class>
+ <widget class="QWidget" name="IrcNetworkWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>322</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string/>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="spacing">
+    <number>3</number>
+   </property>
+   <property name="margin">
+    <number>0</number>
+   </property>
+   <item>
+    <widget class="QTextBrowser" name="messages">
+     <property name="contextMenuPolicy">
+      <enum>Qt::CustomContextMenu</enum>
+     </property>
+     <property name="toolTip">
+      <string>Shows the network messages</string>
+     </property>
+     <property name="tabChangesFocus">
+      <bool>true</bool>
+     </property>
+     <property name="openLinks">
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <widget class="QComboBox" name="networkCombo">
+       <property name="toolTip">
+        <string>Select a network to connect to</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="connectButton">
+       <property name="toolTip">
+        <string/>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="awayButton">
+       <property name="toolTip">
+        <string>Press to set the user status to AWAY</string>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="editButton">
+       <property name="toolTip">
+        <string>Press to edit the networks</string>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QComboBox" name="nickCombo">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="toolTip">
+        <string>Select a nick name for the channel</string>
+       </property>
+       <property name="editable">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="Line" name="line">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QComboBox" name="channelCombo">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="toolTip">
+        <string>Enter the channel to join</string>
+       </property>
+       <property name="editable">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="joinButton">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
+       <property name="toolTip">
+        <string>Press to join the channel</string>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>networkCombo</tabstop>
+  <tabstop>connectButton</tabstop>
+  <tabstop>awayButton</tabstop>
+  <tabstop>editButton</tabstop>
+  <tabstop>nickCombo</tabstop>
+  <tabstop>channelCombo</tabstop>
+  <tabstop>joinButton</tabstop>
+  <tabstop>messages</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/IrcServerEditDialog.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,77 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog for editing the IRC server configuration.
+"""
+
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox
+
+from .Ui_IrcServerEditDialog import Ui_IrcServerEditDialog
+
+
+class IrcServerEditDialog(QDialog, Ui_IrcServerEditDialog):
+    """
+    Class implementing a dialog for editing the IRC server configuration.
+    """
+
+    def __init__(self, server, parent=None):
+        """
+        Constructor
+
+        @param server reference to the IRC server object
+        @type IrcServer
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        self.__okButton = self.buttonBox.button(QDialogButtonBox.StandardButton.Ok)
+
+        if server:
+            self.serverEdit.setText(server.getName())
+            self.portSpinBox.setValue(server.getPort())
+            self.passwordEdit.setText(server.getPassword())
+            self.sslCheckBox.setChecked(server.useSSL())
+
+        self.__updateOkButton()
+
+        msh = self.minimumSizeHint()
+        self.resize(max(self.width(), msh.width()), msh.height())
+
+    def __updateOkButton(self):
+        """
+        Private method to update the OK button state.
+        """
+        self.__okButton.setEnabled(self.serverEdit.text() != "")
+
+    @pyqtSlot(str)
+    def on_serverEdit_textChanged(self, _name):
+        """
+        Private slot handling changes of the server name.
+
+        @param _name current name of the server (unused)
+        @type str
+        """
+        self.__updateOkButton()
+
+    def getServer(self):
+        """
+        Public method to create a server object from the data entered into
+        the dialog.
+
+        @return server object
+        @rtype IrcServer
+        """
+        from .IrcNetworkManager import IrcServer
+
+        server = IrcServer(self.serverEdit.text())
+        server.setPort(self.portSpinBox.value())
+        server.setPassword(self.passwordEdit.text())
+        server.setUseSSL(self.sslCheckBox.isChecked())
+
+        return server
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/IrcServerEditDialog.ui	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IrcServerEditDialog</class>
+ <widget class="QDialog" name="IrcServerEditDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>158</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>IRC Server</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Server:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1" colspan="2">
+    <widget class="QLineEdit" name="serverEdit">
+     <property name="toolTip">
+      <string>Enter the host name of the IRC server</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="label_2">
+     <property name="text">
+      <string>Port:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <widget class="QSpinBox" name="portSpinBox">
+     <property name="toolTip">
+      <string>Enter the port number</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="minimum">
+      <number>1</number>
+     </property>
+     <property name="maximum">
+      <number>65535</number>
+     </property>
+     <property name="value">
+      <number>6667</number>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="2">
+    <spacer name="horizontalSpacer">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>238</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="2" column="0">
+    <widget class="QLabel" name="label_3">
+     <property name="text">
+      <string>Password:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1" colspan="2">
+    <widget class="QLineEdit" name="passwordEdit">
+     <property name="toolTip">
+      <string>Enter the server password</string>
+     </property>
+     <property name="echoMode">
+      <enum>QLineEdit::Password</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="0" colspan="3">
+    <widget class="QCheckBox" name="sslCheckBox">
+     <property name="toolTip">
+      <string>Select to use an SSL encrypted connection</string>
+     </property>
+     <property name="text">
+      <string>Use Encrypted Connection (SSL)</string>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="0" colspan="3">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>serverEdit</tabstop>
+  <tabstop>portSpinBox</tabstop>
+  <tabstop>passwordEdit</tabstop>
+  <tabstop>sslCheckBox</tabstop>
+  <tabstop>buttonBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>IrcServerEditDialog</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>IrcServerEditDialog</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/ExtensionIrc/IrcUtilities.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,203 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing functions used by several IRC objects.
+"""
+
+import re
+
+from PyQt6.QtCore import QCoreApplication, QTime
+from PyQt6.QtWidgets import QApplication
+
+from eric7 import EricUtilities
+from PluginExtensionIrc import ircExtensionPluginObject
+
+__UrlRe = re.compile(
+    r"""((?:http|ftp|https):\/\/[\w\-_]+(?:\.[\w\-_]+)+"""
+    r"""(?:[\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?)"""
+)
+__ColorRe = re.compile(
+    r"""((?:\x03(?:0[0-9]|1[0-5]|[0-9])?(?:,(?:0[0-9]|1[0-5]|[0-9]))?)"""
+    r"""|\x02|\x03|\x13|\x15|\x16|\x17|\x1d|\x1f)"""
+)
+
+
+def ircTimestamp():
+    """
+    Module method to generate a time stamp string.
+
+    @return time stamp
+    @rtype str
+    """
+    if ircExtensionPluginObject.getPreferences("ShowTimestamps"):
+        if ircExtensionPluginObject.getPreferences("TimestampIncludeDate"):
+            if QApplication.isLeftToRight():
+                f = "{0} {1}"
+            else:
+                f = "{1} {0}"
+            formatString = f.format(
+                ircExtensionPluginObject.getPreferences("DateFormat"),
+                ircExtensionPluginObject.getPreferences("TimeFormat"),
+            )
+        else:
+            formatString = ircExtensionPluginObject.getPreferences("TimeFormat")
+        return '<font color="{0}">[{1}]</font> '.format(
+            ircExtensionPluginObject.getPreferences("TimestampColour"),
+            QTime.currentTime().toString(formatString),
+        )
+    else:
+        return ""
+
+
+def ircFilter(msg):
+    """
+    Module method to make the message HTML compliant and detect URLs.
+
+    @param msg message to process
+    @type str
+    @return processed message
+    @rtype str
+    """
+    # step 1: cleanup message
+    msg = EricUtilities.html_encode(msg)
+
+    # step 2: replace IRC formatting characters
+    openTags = []
+    parts = __ColorRe.split(msg)
+    msgParts = []
+    for part in parts:
+        if part == "\x02":  # bold
+            if openTags and openTags[-1] == "b":
+                msgParts.append("</" + openTags.pop(-1) + ">")
+            else:
+                msgParts.append("<b>")
+                openTags.append("b")
+        elif part in ["\x03", "\x17"]:
+            if ircExtensionPluginObject.getPreferences("EnableIrcColours"):
+                if openTags and openTags[-1] == "span":
+                    msgParts.append("</" + openTags.pop(-1) + ">")
+                else:
+                    continue
+            else:
+                continue
+        elif part == "\x0f":  # reset
+            while openTags:
+                msgParts.append("</" + openTags.pop(-1) + ">")
+        elif part == "\x13":  # strikethru
+            if openTags and openTags[-1] == "s":
+                msgParts.append("</" + openTags.pop(-1) + ">")
+            else:
+                msgParts.append("<s>")
+                openTags.append("s")
+        elif part in ["\x15", "\x1f"]:  # underline
+            if openTags and openTags[-1] == "u":
+                msgParts.append("</" + openTags.pop(-1) + ">")
+            else:
+                msgParts.append("<u>")
+                openTags.append("u")
+        elif part == "\x16":
+            # revert color not supported
+            continue
+        elif part == "\x1d":  # italic
+            if openTags and openTags[-1] == "i":
+                msgParts.append("</" + openTags.pop(-1) + ">")
+            else:
+                msgParts.append("<i>")
+                openTags.append("i")
+        elif part.startswith("\x03"):
+            if ircExtensionPluginObject.getPreferences("EnableIrcColours"):
+                colors = part[1:].split(",", 1)
+                if len(colors) == 1:
+                    # foreground color only
+                    tag = '<span style="color:{0}">'.format(
+                        ircExtensionPluginObject.getPreferences(
+                            "IrcColor{0}".format(int(colors[0]))
+                        )
+                    )
+                else:
+                    if colors[0]:
+                        # foreground and background
+                        tag = '<span style="background-color:{0};color={1}">'.format(
+                            ircExtensionPluginObject.getPreferences(
+                                "IrcColor{0}".format(int(colors[0]))
+                            ),
+                            ircExtensionPluginObject.getPreferences(
+                                "IrcColor{0}".format(int(colors[1]))
+                            ),
+                        )
+                    else:
+                        # background only
+                        tag = '<span style="background-color:{0}">'.format(
+                            ircExtensionPluginObject.getPreferences(
+                                "IrcColor{0}".format(int(colors[1]))
+                            )
+                        )
+                msgParts.append(tag)
+                openTags.append("span")
+            else:
+                continue
+        else:
+            msgParts.append(part)
+    msg = "".join(msgParts)
+
+    # step 3: find http and https links
+    parts = __UrlRe.split(msg)
+    msgParts = []
+    for part in parts:
+        if part.startswith(("http://", "https://", "ftp://")):
+            msgParts.append(
+                '<a href="{0}" style="color:{1}">{0}</a>'.format(
+                    part, ircExtensionPluginObject.getPreferences("HyperlinkColour")
+                )
+            )
+        else:
+            msgParts.append(part)
+
+    return "".join(msgParts)
+
+
+__channelModesDict = None
+
+
+def __initChannelModesDict():
+    """
+    Private module function to initialize the channels modes dictionary.
+    """
+    global __channelModesDict
+
+    modesDict = {
+        "a": QCoreApplication.translate("IrcUtilities", "anonymous"),
+        "b": QCoreApplication.translate("IrcUtilities", "ban mask"),
+        "c": QCoreApplication.translate("IrcUtilities", "no colors allowed"),
+        "e": QCoreApplication.translate("IrcUtilities", "ban exception mask"),
+        "i": QCoreApplication.translate("IrcUtilities", "invite only"),
+        "k": QCoreApplication.translate("IrcUtilities", "password protected"),
+        "l": QCoreApplication.translate("IrcUtilities", "user limit"),
+        "m": QCoreApplication.translate("IrcUtilities", "moderated"),
+        "n": QCoreApplication.translate("IrcUtilities", "no messages from outside"),
+        "p": QCoreApplication.translate("IrcUtilities", "private"),
+        "q": QCoreApplication.translate("IrcUtilities", "quiet"),
+        "r": QCoreApplication.translate("IrcUtilities", "reop channel"),
+        "s": QCoreApplication.translate("IrcUtilities", "secret"),
+        "t": QCoreApplication.translate("IrcUtilities", "topic protection"),
+        "I": QCoreApplication.translate("IrcUtilities", "invitation mask"),
+    }
+    __channelModesDict = modesDict
+
+
+def getChannelModesDict():
+    """
+    Module function to get the dictionary with the channel modes mappings.
+
+    @return dictionary with channel modes mapping
+    @rtype dict
+    """
+    global __channelModesDict
+
+    if __channelModesDict is None:
+        __initChannelModesDict()
+
+    return __channelModesDict
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/IrcWidget.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,1166 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the IRC window.
+"""
+
+import enum
+import logging
+import re
+
+from PyQt6.QtCore import QByteArray, QDateTime, Qt, QTimer, pyqtSignal, pyqtSlot
+from PyQt6.QtNetwork import QAbstractSocket, QTcpSocket
+from PyQt6.QtWidgets import QLabel, QTabWidget, QToolButton, QWidget
+
+try:
+    from PyQt6.QtNetwork import QSslConfiguration, QSslSocket
+
+    from eric7.EricNetwork.EricSslErrorHandler import (
+        EricSslErrorHandler,
+        EricSslErrorState,
+    )
+
+    SSL_AVAILABLE = True
+except ImportError:
+    SSL_AVAILABLE = False
+
+from eric7 import Preferences
+from eric7.__version__ import Version
+from eric7.EricWidgets import EricMessageBox
+from eric7.SystemUtilities import OSUtilities
+from eric7.UI.Info import Copyright
+
+from .IrcNetworkManager import IrcNetworkManager
+from .Ui_IrcWidget import Ui_IrcWidget
+
+
+class IrcConnectionState(enum.Enum):
+    """
+    Class defining the connection states.
+    """
+
+    Disconnected = 1
+    Connected = 2
+    Connecting = 3
+
+
+class IrcWidget(QWidget, Ui_IrcWidget):
+    """
+    Class implementing the IRC window.
+
+    @signal autoConnected() emitted after an automatic connection was initiated
+    """
+
+    autoConnected = pyqtSignal()
+
+    def __init__(self, plugin, parent=None):
+        """
+        Constructor
+
+        @param plugin reference to the plug-in object
+        @type MqttMonitorPlugin
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        self.layout().setContentsMargins(0, 3, 0, 0)
+
+        self.__plugin = plugin
+
+        self.__ircNetworkManager = IrcNetworkManager(self)
+
+        self.__leaveButton = QToolButton(self)
+        self.__leaveButton.setIcon(self.__plugin.getIcon("ircCloseChannel"))
+        self.__leaveButton.setToolTip(self.tr("Press to leave the current channel"))
+        self.__leaveButton.clicked.connect(self.__leaveChannel)
+        self.__leaveButton.setEnabled(False)
+        self.channelsWidget.setCornerWidget(
+            self.__leaveButton, Qt.Corner.BottomRightCorner
+        )
+        self.channelsWidget.setTabsClosable(False)
+        if not OSUtilities.isMacPlatform():
+            self.channelsWidget.setTabPosition(QTabWidget.TabPosition.South)
+
+        height = self.height()
+        self.splitter.setSizes([int(height * 0.6), int(height * 0.4)])
+
+        self.__channelList = []
+        self.__channelTypePrefixes = ""
+        self.__userName = ""
+        self.__identityName = ""
+        self.__quitMessage = ""
+        self.__nickIndex = -1
+        self.__nickName = ""
+        self.__server = None
+        self.__registering = False
+
+        self.__connectionState = IrcConnectionState.Disconnected
+        self.__sslErrorLock = False
+
+        self.__buffer = ""
+        self.__userPrefix = {}
+
+        self.__socket = None
+        if SSL_AVAILABLE:
+            self.__sslErrorHandler = EricSslErrorHandler(
+                Preferences.getSettings(), self
+            )
+        else:
+            self.__sslErrorHandler = None
+
+        self.__patterns = [
+            # :foo_!n=foo@foohost.bar.net PRIVMSG bar_ :some long message
+            (re.compile(r":([^!]+)!([^ ]+)\sPRIVMSG\s([^ ]+)\s:(.*)"), self.__query),
+            # :foo.bar.net COMMAND some message
+            (re.compile(r""":([^ ]+)\s+([A-Z]+)\s+(.+)"""), self.__handleNamedMessage),
+            # :foo.bar.net 123 * :info
+            (re.compile(r""":([^ ]+)\s+(\d{3})\s+(.+)"""), self.__handleNumericMessage),
+            # PING :ping message
+            (re.compile(r"""PING\s+:(.*)"""), self.__ping),
+        ]
+        self.__prefixRe = re.compile(r""".*\sPREFIX=\((.*)\)([^ ]+).*""")
+        self.__chanTypesRe = re.compile(r""".*\sCHANTYPES=([^ ]+).*""")
+
+        ircPic = self.__plugin.getPixmap("irc128")
+        self.__emptyLabel = QLabel()
+        self.__emptyLabel.setPixmap(ircPic)
+        self.__emptyLabel.setAlignment(
+            Qt.AlignmentFlag.AlignVCenter | Qt.AlignmentFlag.AlignHCenter
+        )
+        self.channelsWidget.addTab(self.__emptyLabel, "")
+
+        # all initialized, do connections now
+        self.__ircNetworkManager.dataChanged.connect(self.__networkDataChanged)
+        self.networkWidget.initialize(manager=self.__ircNetworkManager)
+        self.networkWidget.connectNetwork.connect(self.__connectNetwork)
+        self.networkWidget.editNetwork.connect(self.__editNetwork)
+        self.networkWidget.joinChannel.connect(self.joinChannel)
+        self.networkWidget.nickChanged.connect(self.__changeNick)
+        self.networkWidget.sendData.connect(self.__send)
+        self.networkWidget.away.connect(self.__away)
+        self.networkWidget.autoConnected.connect(self.autoConnected)
+
+    @pyqtSlot()
+    def shutdown(self):
+        """
+        Public slot to shut down the widget.
+        """
+        if self.__server:
+            self.__connectNetwork("", False, True)
+
+        self.__ircNetworkManager.close()
+
+    def autoConnect(self):
+        """
+        Public method to initiate the IRC auto connection.
+        """
+        self.networkWidget.autoConnect()
+
+    def __connectNetwork(self, name, connect, silent):
+        """
+        Private slot to connect to or disconnect from the given network.
+
+        @param name name of the network to connect to
+        @type str
+        @param connect flag indicating to connect
+        @type bool
+        @param silent flag indicating a silent connect/disconnect
+        @type bool
+        """
+        if connect:
+            network = self.__ircNetworkManager.getNetwork(name)
+            if network:
+                self.__server = network.getServer()
+                self.__identityName = network.getIdentityName()
+                identity = self.__ircNetworkManager.getIdentity(self.__identityName)
+                if identity:
+                    self.__userName = identity.getIdent()
+                    self.__quitMessage = identity.getQuitMessage()
+                    if self.__server:
+                        useSSL = self.__server.useSSL()
+                        if useSSL and not SSL_AVAILABLE:
+                            EricMessageBox.critical(
+                                self,
+                                self.tr("SSL Connection"),
+                                self.tr(
+                                    """An encrypted connection to the IRC"""
+                                    """ network was requested but SSL is not"""
+                                    """ available. Please change the server"""
+                                    """ configuration."""
+                                ),
+                            )
+                            return
+
+                        if useSSL:
+                            # create SSL socket
+                            self.__socket = QSslSocket(self)
+                            self.__socket.encrypted.connect(self.__hostConnected)
+                            self.__socket.sslErrors.connect(self.__sslErrors)
+                        else:
+                            # create TCP socket
+                            self.__socket = QTcpSocket(self)
+                            self.__socket.connected.connect(self.__hostConnected)
+                        self.__socket.hostFound.connect(self.__hostFound)
+                        self.__socket.disconnected.connect(self.__hostDisconnected)
+                        self.__socket.readyRead.connect(self.__readyRead)
+                        self.__socket.errorOccurred.connect(self.__tcpError)
+
+                        self.__connectionState = IrcConnectionState.Connecting
+                        if useSSL:
+                            self.networkWidget.addServerMessage(
+                                self.tr("Info"),
+                                self.tr(
+                                    "Looking for server {0} (port {1})"
+                                    " using an SSL encrypted connection"
+                                    "..."
+                                ).format(
+                                    self.__server.getName(), self.__server.getPort()
+                                ),
+                            )
+                            self.__socket.connectToHostEncrypted(
+                                self.__server.getName(), self.__server.getPort()
+                            )
+                        else:
+                            self.networkWidget.addServerMessage(
+                                self.tr("Info"),
+                                self.tr("Looking for server {0} (port {1})...").format(
+                                    self.__server.getName(), self.__server.getPort()
+                                ),
+                            )
+                            self.__socket.connectToHost(
+                                self.__server.getName(), self.__server.getPort()
+                            )
+        else:
+            if silent:
+                ok = True
+            else:
+                ok = EricMessageBox.yesNo(
+                    self,
+                    self.tr("Disconnect from Server"),
+                    self.tr(
+                        """<p>Do you really want to disconnect from"""
+                        """ <b>{0}</b>?</p><p>All channels will be"""
+                        """ closed.</p>"""
+                    ).format(self.__server.getName()),
+                )
+            if ok:
+                if self.__server is not None:
+                    self.networkWidget.addServerMessage(
+                        self.tr("Info"),
+                        self.tr("Disconnecting from server {0}...").format(
+                            self.__server.getName()
+                        ),
+                    )
+                elif name:
+                    self.networkWidget.addServerMessage(
+                        self.tr("Info"),
+                        self.tr("Disconnecting from network {0}...").format(name),
+                    )
+                else:
+                    self.networkWidget.addServerMessage(
+                        self.tr("Info"), self.tr("Disconnecting from server.")
+                    )
+                self.__closeAllChannels()
+                self.__send("QUIT :" + self.__quitMessage)
+                if self.__socket:
+                    self.__socket.flush()
+                    self.__socket.close()
+                    if self.__socket:
+                        # socket is still existing
+                        self.__socket.deleteLater()
+                        self.__socket = None
+                self.__userName = ""
+                self.__identityName = ""
+                self.__quitMessage = ""
+
+    @pyqtSlot()
+    def __editNetwork(self):
+        """
+        Private slot to edit the network configuration.
+        """
+        from .IrcNetworkListDialog import IrcNetworkListDialog
+
+        dlg = IrcNetworkListDialog(manager=self.__ircNetworkManager, parent=self)
+        dlg.exec()
+
+    def __networkDataChanged(self):
+        """
+        Private slot handling changes of the network and identity definitions.
+        """
+        identity = self.__ircNetworkManager.getIdentity(self.__identityName)
+        if identity:
+            partMsg = identity.getPartMessage()
+            for channel in self.__channelList:
+                channel.setPartMessage(partMsg)
+
+    def joinChannel(self, name, key=""):
+        """
+        Public slot to join a channel.
+
+        @param name name of the channel
+        @type str
+        @param key key of the channel
+        @type str
+        """
+        from .IrcChannelWidget import IrcChannelWidget
+
+        # step 1: check, if this channel is already joined
+        for channel in self.__channelList:
+            if channel.name() == name:
+                return
+
+        channel = IrcChannelWidget(self)
+        channel.setName(name)
+        channel.setUserName(self.__nickName)
+        identity = self.__ircNetworkManager.getIdentity(self.__identityName)
+        if identity:
+            channel.setPartMessage(identity.getPartMessage())
+        channel.setUserPrivilegePrefix(self.__userPrefix)
+        channel.initAutoWho()
+
+        channel.sendData.connect(self.__send)
+        channel.sendCtcpRequest.connect(self.__sendCtcpRequest)
+        channel.sendCtcpReply.connect(self.__sendCtcpReply)
+        channel.channelClosed.connect(self.__closeChannel)
+        channel.openPrivateChat.connect(self.__openPrivate)
+        channel.awayCommand.connect(self.networkWidget.handleAwayCommand)
+        channel.leaveChannels.connect(self.__leaveChannels)
+        channel.leaveAllChannels.connect(self.__leaveAllChannels)
+
+        self.channelsWidget.addTab(channel, name)
+        self.__channelList.append(channel)
+        self.channelsWidget.setCurrentWidget(channel)
+
+        joinCommand = ["JOIN", name]
+        if key:
+            joinCommand.append(key)
+        self.__send(" ".join(joinCommand))
+        self.__send("MODE " + name)
+
+        emptyIndex = self.channelsWidget.indexOf(self.__emptyLabel)
+        if emptyIndex > -1:
+            self.channelsWidget.removeTab(emptyIndex)
+            self.__leaveButton.setEnabled(True)
+        self.channelsWidget.setTabsClosable(True)
+
+    def __query(self, match):
+        """
+        Private method to handle a new private connection.
+
+        @param match reference to the match object
+        @type re.Match
+        @return flag indicating, if the message was handled
+        @rtype bool
+        """
+        # group(1)   sender user name
+        # group(2)   sender user@host
+        # group(3)   target nick
+        # group(4)   message
+        if match.group(4).startswith("\x01"):
+            return self.__handleCtcp(match)
+
+        self.__openPrivate(match.group(1))
+        # the above call sets the new channel as the current widget
+        channel = self.channelsWidget.currentWidget()
+        channel.addMessage(match.group(1), match.group(4))
+        channel.setPrivateInfo("{0} - {1}".format(match.group(1), match.group(2)))
+
+        return True
+
+    @pyqtSlot(str)
+    def __openPrivate(self, name):
+        """
+        Private slot to open a private chat with the given user.
+
+        @param name name of the user
+        @type str
+        """
+        from .IrcChannelWidget import IrcChannelWidget
+
+        channel = IrcChannelWidget(self)
+        channel.setName(self.__nickName)
+        channel.setUserName(self.__nickName)
+        identity = self.__ircNetworkManager.getIdentity(self.__identityName)
+        if identity:
+            channel.setPartMessage(identity.getPartMessage())
+        channel.setUserPrivilegePrefix(self.__userPrefix)
+        channel.setPrivate(True, name)
+        channel.addUsers([name, self.__nickName])
+
+        channel.sendData.connect(self.__send)
+        channel.sendCtcpRequest.connect(self.__sendCtcpRequest)
+        channel.sendCtcpReply.connect(self.__sendCtcpReply)
+        channel.channelClosed.connect(self.__closeChannel)
+        channel.awayCommand.connect(self.networkWidget.handleAwayCommand)
+        channel.leaveChannels.connect(self.__leaveChannels)
+        channel.leaveAllChannels.connect(self.__leaveAllChannels)
+
+        self.channelsWidget.addTab(channel, name)
+        self.__channelList.append(channel)
+        self.channelsWidget.setCurrentWidget(channel)
+
+    @pyqtSlot()
+    def __leaveChannel(self):
+        """
+        Private slot to leave a channel and close the associated tab.
+        """
+        channel = self.channelsWidget.currentWidget()
+        channel.requestLeave()
+
+    @pyqtSlot(list)
+    def __leaveChannels(self, channelNames):
+        """
+        Private slot to leave a list of channels and close their associated
+        tabs.
+
+        @param channelNames list of channels to leave
+        @type list of str
+        """
+        for channelName in channelNames:
+            for channel in self.__channelList:
+                if channel.name() == channelName:
+                    channel.leaveChannel()
+
+    @pyqtSlot()
+    def __leaveAllChannels(self):
+        """
+        Private slot to leave all channels and close their tabs.
+        """
+        while self.__channelList:
+            channel = self.__channelList[0]
+            channel.leaveChannel()
+
+    def __closeAllChannels(self):
+        """
+        Private method to close all channels.
+        """
+        while self.__channelList:
+            channel = self.__channelList.pop()
+            self.channelsWidget.removeTab(self.channelsWidget.indexOf(channel))
+            channel.deleteLater()
+            channel = None
+
+        self.channelsWidget.addTab(self.__emptyLabel, "")
+        self.__emptyLabel.show()
+        self.__leaveButton.setEnabled(False)
+        self.channelsWidget.setTabsClosable(False)
+
+    def __closeChannel(self, name):
+        """
+        Private slot handling the closing of a channel.
+
+        @param name name of the closed channel
+        @type str
+        """
+        for channel in self.__channelList[:]:
+            if channel.name() == name:
+                self.channelsWidget.removeTab(self.channelsWidget.indexOf(channel))
+                self.__channelList.remove(channel)
+                channel.deleteLater()
+
+        if self.channelsWidget.count() == 0:
+            self.channelsWidget.addTab(self.__emptyLabel, "")
+            self.__emptyLabel.show()
+            self.__leaveButton.setEnabled(False)
+            self.channelsWidget.setTabsClosable(False)
+
+    @pyqtSlot(int)
+    def on_channelsWidget_tabCloseRequested(self, index):
+        """
+        Private slot to close a channel by pressing the close button of
+        the channels widget.
+
+        @param index index of the tab to be closed
+        @type int
+        """
+        channel = self.channelsWidget.widget(index)
+        channel.requestLeave()
+
+    def __send(self, data):
+        """
+        Private slot to send data to the IRC server.
+
+        @param data data to be sent
+        @type str
+        """
+        if self.__socket:
+            self.__socket.write(QByteArray("{0}\r\n".format(data).encode("utf-8")))
+
+    def __sendCtcpRequest(self, receiver, request, arguments):
+        """
+        Private slot to send a CTCP request.
+
+        @param receiver nick name of the receiver
+        @type str
+        @param request CTCP request to be sent
+        @type str
+        @param arguments arguments to be sent
+        @type str
+        """
+        request = request.upper()
+        if request == "PING":
+            arguments = "Eric IRC {0}".format(QDateTime.currentMSecsSinceEpoch())
+
+        self.__send("PRIVMSG {0} :\x01{1} {2}\x01".format(receiver, request, arguments))
+
+    def __sendCtcpReply(self, receiver, text):
+        """
+        Private slot to send a CTCP reply.
+
+        @param receiver nick name of the receiver
+        @type str
+        @param text text to be sent
+        @type str
+        """
+        self.__send("NOTICE {0} :\x01{1}\x01".format(receiver, text))
+
+    def __hostFound(self):
+        """
+        Private slot to indicate the host was found.
+        """
+        self.networkWidget.addServerMessage(
+            self.tr("Info"), self.tr("Server found,connecting...")
+        )
+
+    def __hostConnected(self):
+        """
+        Private slot to log in to the server after the connection was
+        established.
+        """
+        self.networkWidget.addServerMessage(
+            self.tr("Info"), self.tr("Connected,logging in...")
+        )
+        self.networkWidget.setConnected(True)
+
+        self.__registering = True
+        serverPassword = self.__server.getPassword()
+        if serverPassword:
+            self.__send("PASS " + serverPassword)
+
+        identity = self.__ircNetworkManager.getIdentity(self.__identityName)
+        nick = self.networkWidget.getNickname()
+        if not nick and identity:
+            self.__nickIndex = 0
+            try:
+                nick = identity.getNickNames()[self.__nickIndex]
+            except IndexError:
+                nick = ""
+        if not nick:
+            nick = self.__userName
+        self.__nickName = nick
+        self.networkWidget.setNickName(nick)
+        if identity:
+            realName = identity.getRealName()
+            if not realName:
+                realName = "eric IDE chat"
+            self.__send("NICK " + nick)
+            self.__send("USER " + self.__userName + " 0 * :" + realName)
+
+    def __hostDisconnected(self):
+        """
+        Private slot to indicate the host was disconnected.
+        """
+        if self.networkWidget.isConnected():
+            self.__closeAllChannels()
+            self.networkWidget.addServerMessage(
+                self.tr("Info"), self.tr("Server disconnected.")
+            )
+            self.networkWidget.setRegistered(False)
+            self.networkWidget.setConnected(False)
+            self.__server = None
+            self.__nickName = ""
+            self.__nickIndex = -1
+            self.__channelTypePrefixes = ""
+
+            if self.__socket:
+                self.__socket.deleteLater()
+            self.__socket = None
+
+            self.__connectionState = IrcConnectionState.Disconnected
+            self.__sslErrorLock = False
+
+    def __readyRead(self):
+        """
+        Private slot to read data from the socket.
+        """
+        if self.__socket:
+            self.__buffer += str(
+                self.__socket.readAll(), Preferences.getSystem("IOEncoding"), "replace"
+            )
+            if self.__buffer.endswith("\r\n"):
+                for line in self.__buffer.splitlines():
+                    line = line.strip()
+                    if line:
+                        logging.getLogger(__name__).debug("<IRC> %s", line)
+                        handled = False
+                        # step 1: give channels a chance to handle the message
+                        for channel in self.__channelList:
+                            handled = channel.handleMessage(line)
+                            if handled:
+                                break
+                        else:
+                            # step 2: try to process the message ourselves
+                            for patternRe, patternFunc in self.__patterns:
+                                match = patternRe.match(line)
+                                if match is not None and patternFunc(match):
+                                    break
+                            else:
+                                # Oops, the message wasn't handled
+                                self.networkWidget.addErrorMessage(
+                                    self.tr("Message Error"),
+                                    self.tr(
+                                        "Unknown message received from server:"
+                                        "<br/>{0}"
+                                    ).format(line),
+                                )
+
+                self.__updateUsersCount()
+                self.__buffer = ""
+
+    def __handleCtcpReply(self, match):
+        """
+        Private method to handle a server message containing a CTCP reply.
+
+        @param match reference to the match object
+        @type re.Match
+        """
+        if "!" in match.group(1):
+            sender = match.group(1).split("!", 1)[0]
+
+            try:
+                ctcpCommand = match.group(3).split(":", 1)[1]
+            except IndexError:
+                ctcpCommand = match.group(3)
+            ctcpCommand = ctcpCommand[1:].split("\x01", 1)[0]
+            if " " in ctcpCommand:
+                ctcpReply, ctcpArg = ctcpCommand.split(" ", 1)
+            else:
+                ctcpReply, ctcpArg = ctcpCommand, ""
+            ctcpReply = ctcpReply.upper()
+
+            if ctcpReply == "PING" and ctcpArg.startswith("Eric IRC "):
+                # it is a response to a ping request
+                pingDateTime = int(ctcpArg.split()[-1])
+                latency = QDateTime.currentMSecsSinceEpoch() - pingDateTime
+                self.networkWidget.addServerMessage(
+                    self.tr("CTCP"),
+                    self.tr(
+                        "Received CTCP-PING response from {0} with latency"
+                        " of {1} ms."
+                    ).format(sender, latency),
+                )
+            else:
+                self.networkWidget.addServerMessage(
+                    self.tr("CTCP"),
+                    self.tr("Received unknown CTCP-{0} response from {1}.").format(
+                        ctcpReply, sender
+                    ),
+                )
+
+    def __handleNamedMessage(self, match):
+        """
+        Private method to handle a server message containing a message name.
+
+        @param match reference to the match object
+        @type re.Match
+        @return flag indicating, if the message was handled
+        @rtype bool
+        """
+        name = match.group(2)
+        if name == "NOTICE":
+            try:
+                msg = match.group(3).split(":", 1)[1]
+            except IndexError:
+                msg = match.group(3)
+
+            if msg.startswith("\x01"):
+                self.__handleCtcpReply(match)
+                return True
+
+            if "!" in match.group(1):
+                name = match.group(1).split("!", 1)[0]
+                msg = "-{0}- {1}".format(name, msg)
+            self.networkWidget.addServerMessage(self.tr("Notice"), msg)
+            return True
+        elif name == "MODE":
+            self.__registering = False
+            if ":" in match.group(3):
+                # :foo MODE foo :+i
+                name, modes = match.group(3).split(" :")
+                sourceNick = match.group(1)
+                if not self.isChannelName(name) and name == self.__nickName:
+                    if sourceNick == self.__nickName:
+                        msg = self.tr(
+                            "You have set your personal modes to <b>[{0}]</b>."
+                        ).format(modes)
+                    else:
+                        msg = self.tr(
+                            "{0} has changed your personal modes to <b>[{1}]</b>."
+                        ).format(sourceNick, modes)
+                    self.networkWidget.addServerMessage(
+                        self.tr("Mode"), msg, filterMsg=False
+                    )
+                    return True
+        elif name == "PART":
+            nick = match.group(1).split("!", 1)[0]
+            if nick == self.__nickName:
+                channel = match.group(3).split(None, 1)[0]
+                self.networkWidget.addMessage(
+                    self.tr("You have left channel {0}.").format(channel)
+                )
+                return True
+        elif name == "QUIT":
+            # don't do anything with it here
+            return True
+        elif name == "NICK":
+            # :foo_!n=foo@foohost.bar.net NICK :newnick
+            oldNick = match.group(1).split("!", 1)[0]
+            newNick = match.group(3).split(":", 1)[1]
+            if oldNick == self.__nickName:
+                self.networkWidget.addMessage(
+                    self.tr("You are now known as {0}.").format(newNick)
+                )
+                self.__nickName = newNick
+                self.networkWidget.setNickName(newNick)
+            else:
+                self.networkWidget.addMessage(
+                    self.tr("User {0} is now known as {1}.").format(oldNick, newNick)
+                )
+            return True
+        elif name == "PONG":
+            nick = match.group(3).split(":", 1)[1]
+            self.networkWidget.addMessage(
+                self.tr("Received PONG from {0}").format(nick)
+            )
+            return True
+        elif name == "ERROR":
+            self.networkWidget.addErrorMessage(
+                self.tr("Server Error"), match.group(3).split(":", 1)[1]
+            )
+            return True
+
+        return False
+
+    def __handleNumericMessage(self, match):
+        """
+        Private method to handle a server message containing a numeric code.
+
+        @param match reference to the match object
+        @type re.Match
+        @return flag indicating, if the message was handled
+        @rtype bool
+        """
+        code = int(match.group(2))
+        if code < 400:
+            return self.__handleServerReply(code, match.group(1), match.group(3))
+        else:
+            return self.__handleServerError(code, match.group(3))
+
+    def __handleServerError(self, code, message):
+        """
+        Private slot to handle a server error reply.
+
+        @param code numerical code sent by the server
+        @type int
+        @param message message sent by the server
+        @type str
+        @return flag indicating, if the message was handled
+        @rtype bool
+        """
+        if code == 433:
+            if self.__registering:
+                self.__handleNickInUseLogin()
+            else:
+                self.__handleNickInUse()
+        else:
+            self.networkWidget.addServerMessage(self.tr("Error"), message)
+
+        return True
+
+    def __handleServerReply(self, code, server, message):
+        """
+        Private slot to handle a server reply.
+
+        @param code numerical code sent by the server
+        @type int
+        @param server name of the server
+        @type str
+        @param message message sent by the server
+        @type str
+        @return flag indicating, if the message was handled
+        @rtype bool
+        """
+        # determine message type
+        if code in [1, 2, 3, 4]:
+            msgType = self.tr("Welcome")
+        elif code == 5:
+            msgType = self.tr("Support")
+        elif code in [250, 251, 252, 253, 254, 255, 265, 266]:
+            msgType = self.tr("User")
+        elif code in [372, 375, 376]:
+            msgType = self.tr("MOTD")
+        elif code in [305, 306]:
+            msgType = self.tr("Away")
+        else:
+            msgType = self.tr("Info ({0})").format(code)
+
+        # special treatment for some messages
+        if code == 375:
+            message = self.tr("Message of the day")
+        elif code == 376:
+            message = self.tr("End of message of the day")
+        elif code == 4:
+            parts = message.strip().split()
+            message = self.tr(
+                "Server {0} (Version {1}), User-Modes: {2}, Channel-Modes: {3}"
+            ).format(parts[1], parts[2], parts[3], parts[4])
+        elif code == 265:
+            parts = message.strip().split()
+            message = self.tr("Current users on {0}: {1}, max. {2}").format(
+                server, parts[1], parts[2]
+            )
+        elif code == 266:
+            parts = message.strip().split()
+            message = self.tr("Current users on the network: {0}, max. {1}").format(
+                parts[1], parts[2]
+            )
+        elif code == 305:
+            message = self.tr("You are no longer marked as being away.")
+        elif code == 306:
+            message = self.tr("You have been marked as being away.")
+        else:
+            _first, message = message.split(None, 1)
+            if message.startswith(":"):
+                message = message[1:]
+            else:
+                message = message.replace(":", "", 1)
+
+        self.networkWidget.addServerMessage(msgType, message)
+
+        if code == 1:
+            # register with services after the welcome message
+            self.__connectionState = IrcConnectionState.Connected
+            self.__registerWithServices()
+            self.networkWidget.setRegistered(True)
+            QTimer.singleShot(1000, self.__autoJoinChannels)
+        elif code == 5:
+            # extract the user privilege prefixes
+            # ... PREFIX=(ov)@+ ...
+            m = self.__prefixRe.match(message)
+            if m:
+                self.__setUserPrivilegePrefix(m.group(1), m.group(2))
+            # extract the channel type prefixes
+            # ... CHANTYPES=# ...
+            m = self.__chanTypesRe.match(message)
+            if m:
+                self.__setChannelTypePrefixes(m.group(1))
+
+        return True
+
+    def __registerWithServices(self):
+        """
+        Private method to register to services.
+        """
+        identity = self.__ircNetworkManager.getIdentity(self.__identityName)
+        if identity:
+            service = identity.getServiceName()
+            password = identity.getPassword()
+            if service and password:
+                self.__send("PRIVMSG " + service + " :identify " + password)
+
+    def __autoJoinChannels(self):
+        """
+        Private slot to join channels automatically once a server got
+        connected.
+        """
+        for channel in self.networkWidget.getNetworkChannels():
+            if channel.autoJoin():
+                name = channel.getName()
+                key = channel.getKey()
+                self.joinChannel(name, key)
+
+    def __tcpError(self, error):
+        """
+        Private slot to handle errors reported by the TCP socket.
+
+        @param error error code reported by the socket
+        @type QAbstractSocket.SocketError
+        """
+        if error == QAbstractSocket.SocketError.RemoteHostClosedError:
+            # ignore this one, it's a disconnect
+            if self.__sslErrorLock:
+                self.networkWidget.addErrorMessage(
+                    self.tr("SSL Error"),
+                    self.tr(
+                        """Connection to server {0} (port {1}) lost while"""
+                        """ waiting for user response to an SSL error."""
+                    ).format(self.__server.getName(), self.__server.getPort()),
+                )
+                self.__connectionState = IrcConnectionState.Disconnected
+        elif error == QAbstractSocket.SocketError.HostNotFoundError:
+            self.networkWidget.addErrorMessage(
+                self.tr("Socket Error"),
+                self.tr(
+                    "The host was not found. Please check the host name"
+                    " and port settings."
+                ),
+            )
+        elif error == QAbstractSocket.SocketError.ConnectionRefusedError:
+            self.networkWidget.addErrorMessage(
+                self.tr("Socket Error"),
+                self.tr(
+                    "The connection was refused by the peer. Please check the"
+                    " host name and port settings."
+                ),
+            )
+        elif error == QAbstractSocket.SocketError.SslHandshakeFailedError:
+            self.networkWidget.addErrorMessage(
+                self.tr("Socket Error"), self.tr("The SSL handshake failed.")
+            )
+        else:
+            if self.__socket:
+                self.networkWidget.addErrorMessage(
+                    self.tr("Socket Error"),
+                    self.tr("The following network error occurred:<br/>{0}").format(
+                        self.__socket.errorString()
+                    ),
+                )
+            else:
+                self.networkWidget.addErrorMessage(
+                    self.tr("Socket Error"), self.tr("A network error occurred.")
+                )
+
+    def __sslErrors(self, errors):
+        """
+        Private slot to handle SSL errors.
+
+        @param errors list of SSL errors
+        @type list of QSslError
+        """
+        ignored, defaultChanged = self.__sslErrorHandler.sslErrors(
+            errors, self.__server.getName(), self.__server.getPort()
+        )
+        if ignored == EricSslErrorState.NOT_IGNORED:
+            self.networkWidget.addErrorMessage(
+                self.tr("SSL Error"),
+                self.tr(
+                    """Could not connect to {0} (port {1}) using an SSL"""
+                    """ encrypted connection. Either the server does not"""
+                    """ support SSL (did you use the correct port?) or"""
+                    """ you rejected the certificate."""
+                ).format(self.__server.getName(), self.__server.getPort()),
+            )
+            self.__socket.close()
+        else:
+            if defaultChanged:
+                self.__socket.setSslConfiguration(
+                    QSslConfiguration.defaultConfiguration()
+                )
+            if ignored == EricSslErrorState.USER_IGNORED:
+                self.networkWidget.addErrorMessage(
+                    self.tr("SSL Error"),
+                    self.tr(
+                        """The SSL certificate for the server {0} (port {1})"""
+                        """ failed the authenticity check. SSL errors"""
+                        """ were accepted by you."""
+                    ).format(self.__server.getName(), self.__server.getPort()),
+                )
+            if self.__connectionState == IrcConnectionState.Connecting:
+                self.__socket.ignoreSslErrors()
+
+    def __setUserPrivilegePrefix(self, prefix1, prefix2):
+        """
+        Private method to set the user privilege prefix.
+
+        @param prefix1 first part of the prefix
+        @type str
+        @param prefix2 indictors the first part gets mapped to
+        @type str
+        """
+        # PREFIX=(ov)@+
+        # o = @ -> @ircbot , channel operator
+        # v = + -> +userName , voice operator
+        for i in range(len(prefix1)):
+            self.__userPrefix["+" + prefix1[i]] = prefix2[i]
+            self.__userPrefix["-" + prefix1[i]] = ""
+
+    def __ping(self, match):
+        """
+        Private method to handle a PING message.
+
+        @param match reference to the match object
+        @type re.Match
+        @return flag indicating, if the message was handled
+        @rtype bool
+        """
+        self.__send("PONG " + match.group(1))
+        return True
+
+    def __handleCtcp(self, match):
+        """
+        Private method to handle a CTCP command.
+
+        @param match reference to the match object
+        @type re.Match
+        @return flag indicating, if the message was handled
+        @rtype bool
+        """
+        # group(1)   sender user name
+        # group(2)   sender user@host
+        # group(3)   target nick
+        # group(4)   message
+        if match.group(4).startswith("\x01"):
+            ctcpCommand = match.group(4)[1:].split("\x01", 1)[0]
+            if " " in ctcpCommand:
+                ctcpRequest, ctcpArg = ctcpCommand.split(" ", 1)
+            else:
+                ctcpRequest, ctcpArg = ctcpCommand, ""
+            ctcpRequest = ctcpRequest.lower()
+            if ctcpRequest == "version":
+                if Version.startswith("@@"):
+                    vers = ""
+                else:
+                    vers = " " + Version
+                msg = "Eric IRC client{0}, {1}".format(vers, Copyright)
+                self.networkWidget.addServerMessage(
+                    self.tr("CTCP"),
+                    self.tr("Received Version request from {0}.").format(
+                        match.group(1)
+                    ),
+                )
+                self.__sendCtcpReply(match.group(1), "VERSION " + msg)
+            elif ctcpRequest == "ping":
+                self.networkWidget.addServerMessage(
+                    self.tr("CTCP"),
+                    self.tr(
+                        "Received CTCP-PING request from {0}, sending answer."
+                    ).format(match.group(1)),
+                )
+                self.__sendCtcpReply(match.group(1), "PING {0}".format(ctcpArg))
+            elif ctcpRequest == "clientinfo":
+                self.networkWidget.addServerMessage(
+                    self.tr("CTCP"),
+                    self.tr(
+                        "Received CTCP-CLIENTINFO request from {0}, sending answer."
+                    ).format(match.group(1)),
+                )
+                self.__sendCtcpReply(
+                    match.group(1), "CLIENTINFO CLIENTINFO PING VERSION"
+                )
+            else:
+                self.networkWidget.addServerMessage(
+                    self.tr("CTCP"),
+                    self.tr("Received unknown CTCP-{0} request from {1}.").format(
+                        ctcpRequest, match.group(1)
+                    ),
+                )
+            return True
+
+        return False
+
+    def __updateUsersCount(self):
+        """
+        Private method to update the users count on the channel tabs.
+        """
+        for channel in self.__channelList:
+            index = self.channelsWidget.indexOf(channel)
+            self.channelsWidget.setTabText(
+                index,
+                self.tr("{0} ({1})", "channel name, users count").format(
+                    channel.name(), channel.getUsersCount()
+                ),
+            )
+
+    def __handleNickInUseLogin(self):
+        """
+        Private method to handle a 443 server error at login.
+        """
+        self.__nickIndex += 1
+        try:
+            identity = self.__ircNetworkManager.getIdentity(self.__identityName)
+            if identity:
+                nick = identity.getNickNames()[self.__nickIndex]
+                self.__nickName = nick
+            else:
+                self.__connectNetwork("", False, True)
+                self.__nickName = ""
+                self.__nickIndex = -1
+                return
+        except IndexError:
+            self.networkWidget.addServerMessage(
+                self.tr("Critical"),
+                self.tr(
+                    "No nickname acceptable to the server configured"
+                    " for <b>{0}</b>. Disconnecting..."
+                ).format(self.__userName),
+                filterMsg=False,
+            )
+            self.__connectNetwork("", False, True)
+            self.__nickName = ""
+            self.__nickIndex = -1
+            return
+
+        self.networkWidget.setNickName(nick)
+        self.__send("NICK " + nick)
+
+    def __handleNickInUse(self):
+        """
+        Private method to handle a 443 server error.
+        """
+        self.networkWidget.addServerMessage(
+            self.tr("Critical"), self.tr("The given nickname is already in use.")
+        )
+
+    def __changeNick(self, nick):
+        """
+        Private slot to use a new nick name.
+
+        @param nick nick name to use
+        @type str
+        """
+        if nick and nick != self.__nickName:
+            self.__send("NICK " + nick)
+
+    def __setChannelTypePrefixes(self, prefixes):
+        """
+        Private method to set the channel type prefixes.
+
+        @param prefixes channel prefix characters
+        @type str
+        """
+        self.__channelTypePrefixes = prefixes
+
+    def isChannelName(self, name):
+        """
+        Public method to check, if the given name is a channel name.
+
+        @param name name to check
+        @type str
+        @return flag indicating a channel name
+        @rtype bool
+        """
+        if not name:
+            return False
+
+        if self.__channelTypePrefixes:
+            return name[0] in self.__channelTypePrefixes
+        else:
+            return name[0] in "#&"
+
+    def __away(self, isAway):
+        """
+        Private slot handling the change of the away state.
+
+        @param isAway flag indicating the current away state
+        @type bool
+        """
+        if isAway and self.__identityName:
+            identity = self.__ircNetworkManager.getIdentity(self.__identityName)
+            if identity and identity.rememberAwayPosition():
+                for channel in self.__channelList:
+                    channel.setMarkerLine()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/IrcWidget.ui	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IrcWidget</class>
+ <widget class="QWidget" name="IrcWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>941</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string/>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_3">
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <item>
+    <widget class="QSplitter" name="splitter">
+     <property name="orientation">
+      <enum>Qt::Orientation::Vertical</enum>
+     </property>
+     <widget class="QGroupBox" name="groupBox">
+      <property name="title">
+       <string>Channels</string>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout">
+       <item>
+        <widget class="QTabWidget" name="channelsWidget">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+           <horstretch>0</horstretch>
+           <verstretch>3</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="documentMode">
+          <bool>true</bool>
+         </property>
+         <property name="tabsClosable">
+          <bool>true</bool>
+         </property>
+         <property name="movable">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QGroupBox" name="groupBox_2">
+      <property name="title">
+       <string>Network</string>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout_2">
+       <item>
+        <widget class="IrcNetworkWidget" name="networkWidget" native="true">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+           <horstretch>0</horstretch>
+           <verstretch>2</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="focusPolicy">
+          <enum>Qt::FocusPolicy::TabFocus</enum>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>IrcNetworkWidget</class>
+   <extends>QWidget</extends>
+   <header>ExtensionIrc/IrcNetworkWidget.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
+ <tabstops>
+  <tabstop>networkWidget</tabstop>
+  <tabstop>channelsWidget</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/Ui_IrcChannelEditDialog.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,57 @@
+# Form implementation generated from reading ui file 'ExtensionIrc/IrcChannelEditDialog.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_IrcChannelEditDialog(object):
+    def setupUi(self, IrcChannelEditDialog):
+        IrcChannelEditDialog.setObjectName("IrcChannelEditDialog")
+        IrcChannelEditDialog.resize(303, 128)
+        IrcChannelEditDialog.setSizeGripEnabled(True)
+        self.gridLayout = QtWidgets.QGridLayout(IrcChannelEditDialog)
+        self.gridLayout.setObjectName("gridLayout")
+        self.label = QtWidgets.QLabel(parent=IrcChannelEditDialog)
+        self.label.setObjectName("label")
+        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
+        self.nameEdit = QtWidgets.QLineEdit(parent=IrcChannelEditDialog)
+        self.nameEdit.setObjectName("nameEdit")
+        self.gridLayout.addWidget(self.nameEdit, 0, 1, 1, 1)
+        self.label_2 = QtWidgets.QLabel(parent=IrcChannelEditDialog)
+        self.label_2.setObjectName("label_2")
+        self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
+        self.keyEdit = QtWidgets.QLineEdit(parent=IrcChannelEditDialog)
+        self.keyEdit.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
+        self.keyEdit.setObjectName("keyEdit")
+        self.gridLayout.addWidget(self.keyEdit, 1, 1, 1, 1)
+        self.autoJoinCheckBox = QtWidgets.QCheckBox(parent=IrcChannelEditDialog)
+        self.autoJoinCheckBox.setObjectName("autoJoinCheckBox")
+        self.gridLayout.addWidget(self.autoJoinCheckBox, 2, 0, 1, 2)
+        self.buttonBox = QtWidgets.QDialogButtonBox(parent=IrcChannelEditDialog)
+        self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
+        self.buttonBox.setObjectName("buttonBox")
+        self.gridLayout.addWidget(self.buttonBox, 3, 0, 1, 2)
+
+        self.retranslateUi(IrcChannelEditDialog)
+        self.buttonBox.accepted.connect(IrcChannelEditDialog.accept) # type: ignore
+        self.buttonBox.rejected.connect(IrcChannelEditDialog.reject) # type: ignore
+        QtCore.QMetaObject.connectSlotsByName(IrcChannelEditDialog)
+        IrcChannelEditDialog.setTabOrder(self.nameEdit, self.keyEdit)
+        IrcChannelEditDialog.setTabOrder(self.keyEdit, self.autoJoinCheckBox)
+        IrcChannelEditDialog.setTabOrder(self.autoJoinCheckBox, self.buttonBox)
+
+    def retranslateUi(self, IrcChannelEditDialog):
+        _translate = QtCore.QCoreApplication.translate
+        IrcChannelEditDialog.setWindowTitle(_translate("IrcChannelEditDialog", "IRC Channel"))
+        self.label.setText(_translate("IrcChannelEditDialog", "Name:"))
+        self.nameEdit.setToolTip(_translate("IrcChannelEditDialog", "Enter the channel name"))
+        self.label_2.setText(_translate("IrcChannelEditDialog", "Key:"))
+        self.keyEdit.setToolTip(_translate("IrcChannelEditDialog", "Enter the channel key/password"))
+        self.autoJoinCheckBox.setToolTip(_translate("IrcChannelEditDialog", "Select to join this channel automatically"))
+        self.autoJoinCheckBox.setText(_translate("IrcChannelEditDialog", "Join channel automatically"))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/Ui_IrcChannelWidget.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,71 @@
+# Form implementation generated from reading ui file 'ExtensionIrc/IrcChannelWidget.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_IrcChannelWidget(object):
+    def setupUi(self, IrcChannelWidget):
+        IrcChannelWidget.setObjectName("IrcChannelWidget")
+        IrcChannelWidget.resize(400, 685)
+        IrcChannelWidget.setWindowTitle("")
+        self.verticalLayout = QtWidgets.QVBoxLayout(IrcChannelWidget)
+        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
+        self.verticalLayout.setSpacing(3)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.topicLabel = QtWidgets.QLabel(parent=IrcChannelWidget)
+        self.topicLabel.setText("")
+        self.topicLabel.setWordWrap(True)
+        self.topicLabel.setOpenExternalLinks(True)
+        self.topicLabel.setObjectName("topicLabel")
+        self.horizontalLayout.addWidget(self.topicLabel)
+        self.editTopicButton = QtWidgets.QToolButton(parent=IrcChannelWidget)
+        self.editTopicButton.setText("")
+        self.editTopicButton.setObjectName("editTopicButton")
+        self.horizontalLayout.addWidget(self.editTopicButton)
+        self.verticalLayout.addLayout(self.horizontalLayout)
+        self.splitter = QtWidgets.QSplitter(parent=IrcChannelWidget)
+        self.splitter.setOrientation(QtCore.Qt.Orientation.Vertical)
+        self.splitter.setObjectName("splitter")
+        self.usersList = QtWidgets.QListWidget(parent=self.splitter)
+        self.usersList.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.CustomContextMenu)
+        self.usersList.setAlternatingRowColors(True)
+        self.usersList.setObjectName("usersList")
+        self.messages = QtWidgets.QTextBrowser(parent=self.splitter)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(1)
+        sizePolicy.setHeightForWidth(self.messages.sizePolicy().hasHeightForWidth())
+        self.messages.setSizePolicy(sizePolicy)
+        self.messages.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.CustomContextMenu)
+        self.messages.setTabChangesFocus(True)
+        self.messages.setOpenLinks(False)
+        self.messages.setObjectName("messages")
+        self.verticalLayout.addWidget(self.splitter)
+        self.messageEdit = IrcMessageEdit(parent=IrcChannelWidget)
+        self.messageEdit.setClearButtonEnabled(True)
+        self.messageEdit.setObjectName("messageEdit")
+        self.verticalLayout.addWidget(self.messageEdit)
+
+        self.retranslateUi(IrcChannelWidget)
+        QtCore.QMetaObject.connectSlotsByName(IrcChannelWidget)
+        IrcChannelWidget.setTabOrder(self.messageEdit, self.messages)
+        IrcChannelWidget.setTabOrder(self.messages, self.usersList)
+        IrcChannelWidget.setTabOrder(self.usersList, self.editTopicButton)
+
+    def retranslateUi(self, IrcChannelWidget):
+        _translate = QtCore.QCoreApplication.translate
+        self.editTopicButton.setToolTip(_translate("IrcChannelWidget", "Press to change the topic"))
+        self.usersList.setToolTip(_translate("IrcChannelWidget", "Shows the list of users"))
+        self.usersList.setSortingEnabled(True)
+        self.messages.setToolTip(_translate("IrcChannelWidget", "Shows the channel messages"))
+        self.messageEdit.setToolTip(_translate("IrcChannelWidget", "Enter a message, send by pressing Return or Enter"))
+        self.messageEdit.setPlaceholderText(_translate("IrcChannelWidget", "Enter a message, send by pressing Return or Enter"))
+from ExtensionIrc.IrcMessageEdit import IrcMessageEdit
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/Ui_IrcIdentitiesEditDialog.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,218 @@
+# Form implementation generated from reading ui file 'ExtensionIrc/IrcIdentitiesEditDialog.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_IrcIdentitiesEditDialog(object):
+    def setupUi(self, IrcIdentitiesEditDialog):
+        IrcIdentitiesEditDialog.setObjectName("IrcIdentitiesEditDialog")
+        IrcIdentitiesEditDialog.resize(650, 510)
+        IrcIdentitiesEditDialog.setSizeGripEnabled(True)
+        self.verticalLayout = QtWidgets.QVBoxLayout(IrcIdentitiesEditDialog)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.label = QtWidgets.QLabel(parent=IrcIdentitiesEditDialog)
+        self.label.setObjectName("label")
+        self.horizontalLayout.addWidget(self.label)
+        self.identitiesCombo = QtWidgets.QComboBox(parent=IrcIdentitiesEditDialog)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.identitiesCombo.sizePolicy().hasHeightForWidth())
+        self.identitiesCombo.setSizePolicy(sizePolicy)
+        self.identitiesCombo.setObjectName("identitiesCombo")
+        self.horizontalLayout.addWidget(self.identitiesCombo)
+        self.addButton = QtWidgets.QToolButton(parent=IrcIdentitiesEditDialog)
+        self.addButton.setObjectName("addButton")
+        self.horizontalLayout.addWidget(self.addButton)
+        self.copyButton = QtWidgets.QToolButton(parent=IrcIdentitiesEditDialog)
+        self.copyButton.setObjectName("copyButton")
+        self.horizontalLayout.addWidget(self.copyButton)
+        self.renameButton = QtWidgets.QToolButton(parent=IrcIdentitiesEditDialog)
+        self.renameButton.setObjectName("renameButton")
+        self.horizontalLayout.addWidget(self.renameButton)
+        self.deleteButton = QtWidgets.QToolButton(parent=IrcIdentitiesEditDialog)
+        self.deleteButton.setObjectName("deleteButton")
+        self.horizontalLayout.addWidget(self.deleteButton)
+        self.verticalLayout.addLayout(self.horizontalLayout)
+        self.identityTabWidget = QtWidgets.QTabWidget(parent=IrcIdentitiesEditDialog)
+        self.identityTabWidget.setObjectName("identityTabWidget")
+        self.generalTab = QtWidgets.QWidget()
+        self.generalTab.setObjectName("generalTab")
+        self.gridLayout_2 = QtWidgets.QGridLayout(self.generalTab)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.label_2 = QtWidgets.QLabel(parent=self.generalTab)
+        self.label_2.setObjectName("label_2")
+        self.gridLayout_2.addWidget(self.label_2, 0, 0, 1, 1)
+        self.realnameEdit = QtWidgets.QLineEdit(parent=self.generalTab)
+        self.realnameEdit.setObjectName("realnameEdit")
+        self.gridLayout_2.addWidget(self.realnameEdit, 0, 1, 1, 1)
+        self.nickNameGroup = QtWidgets.QGroupBox(parent=self.generalTab)
+        self.nickNameGroup.setObjectName("nickNameGroup")
+        self.gridLayout = QtWidgets.QGridLayout(self.nickNameGroup)
+        self.gridLayout.setObjectName("gridLayout")
+        self.nicknameEdit = QtWidgets.QLineEdit(parent=self.nickNameGroup)
+        self.nicknameEdit.setObjectName("nicknameEdit")
+        self.gridLayout.addWidget(self.nicknameEdit, 0, 0, 1, 2)
+        self.nicknamesList = QtWidgets.QListWidget(parent=self.nickNameGroup)
+        self.nicknamesList.setAlternatingRowColors(True)
+        self.nicknamesList.setObjectName("nicknamesList")
+        self.gridLayout.addWidget(self.nicknamesList, 1, 0, 5, 1)
+        self.nicknameAddButton = QtWidgets.QToolButton(parent=self.nickNameGroup)
+        self.nicknameAddButton.setObjectName("nicknameAddButton")
+        self.gridLayout.addWidget(self.nicknameAddButton, 1, 1, 1, 1)
+        self.nicknameDeleteButton = QtWidgets.QToolButton(parent=self.nickNameGroup)
+        self.nicknameDeleteButton.setText("")
+        self.nicknameDeleteButton.setObjectName("nicknameDeleteButton")
+        self.gridLayout.addWidget(self.nicknameDeleteButton, 2, 1, 1, 1)
+        self.nicknameUpButton = QtWidgets.QToolButton(parent=self.nickNameGroup)
+        self.nicknameUpButton.setObjectName("nicknameUpButton")
+        self.gridLayout.addWidget(self.nicknameUpButton, 3, 1, 1, 1)
+        self.nicknameDownButton = QtWidgets.QToolButton(parent=self.nickNameGroup)
+        self.nicknameDownButton.setObjectName("nicknameDownButton")
+        self.gridLayout.addWidget(self.nicknameDownButton, 4, 1, 1, 1)
+        spacerItem = QtWidgets.QSpacerItem(20, 87, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+        self.gridLayout.addItem(spacerItem, 5, 1, 1, 1)
+        self.gridLayout_2.addWidget(self.nickNameGroup, 1, 0, 1, 2)
+        self.autoIdentifyGroup = QtWidgets.QGroupBox(parent=self.generalTab)
+        self.autoIdentifyGroup.setObjectName("autoIdentifyGroup")
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.autoIdentifyGroup)
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.label_3 = QtWidgets.QLabel(parent=self.autoIdentifyGroup)
+        self.label_3.setObjectName("label_3")
+        self.horizontalLayout_2.addWidget(self.label_3)
+        self.serviceEdit = QtWidgets.QLineEdit(parent=self.autoIdentifyGroup)
+        self.serviceEdit.setObjectName("serviceEdit")
+        self.horizontalLayout_2.addWidget(self.serviceEdit)
+        self.label_4 = QtWidgets.QLabel(parent=self.autoIdentifyGroup)
+        self.label_4.setObjectName("label_4")
+        self.horizontalLayout_2.addWidget(self.label_4)
+        self.passwordEdit = QtWidgets.QLineEdit(parent=self.autoIdentifyGroup)
+        self.passwordEdit.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
+        self.passwordEdit.setObjectName("passwordEdit")
+        self.horizontalLayout_2.addWidget(self.passwordEdit)
+        self.showPasswordButton = QtWidgets.QToolButton(parent=self.autoIdentifyGroup)
+        self.showPasswordButton.setCheckable(True)
+        self.showPasswordButton.setObjectName("showPasswordButton")
+        self.horizontalLayout_2.addWidget(self.showPasswordButton)
+        self.gridLayout_2.addWidget(self.autoIdentifyGroup, 2, 0, 1, 2)
+        self.identityTabWidget.addTab(self.generalTab, "")
+        self.awayTab = QtWidgets.QWidget()
+        self.awayTab.setObjectName("awayTab")
+        self.gridLayout_5 = QtWidgets.QGridLayout(self.awayTab)
+        self.gridLayout_5.setObjectName("gridLayout_5")
+        self.rememberPosOnAwayCheckBox = QtWidgets.QCheckBox(parent=self.awayTab)
+        self.rememberPosOnAwayCheckBox.setWhatsThis("")
+        self.rememberPosOnAwayCheckBox.setObjectName("rememberPosOnAwayCheckBox")
+        self.gridLayout_5.addWidget(self.rememberPosOnAwayCheckBox, 0, 0, 1, 2)
+        self.label_8 = QtWidgets.QLabel(parent=self.awayTab)
+        self.label_8.setObjectName("label_8")
+        self.gridLayout_5.addWidget(self.label_8, 1, 0, 1, 1)
+        self.awayEdit = QtWidgets.QLineEdit(parent=self.awayTab)
+        self.awayEdit.setObjectName("awayEdit")
+        self.gridLayout_5.addWidget(self.awayEdit, 1, 1, 1, 1)
+        spacerItem1 = QtWidgets.QSpacerItem(20, 219, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+        self.gridLayout_5.addItem(spacerItem1, 2, 1, 1, 1)
+        self.identityTabWidget.addTab(self.awayTab, "")
+        self.advancedTab = QtWidgets.QWidget()
+        self.advancedTab.setObjectName("advancedTab")
+        self.gridLayout_3 = QtWidgets.QGridLayout(self.advancedTab)
+        self.gridLayout_3.setObjectName("gridLayout_3")
+        self.label_5 = QtWidgets.QLabel(parent=self.advancedTab)
+        self.label_5.setObjectName("label_5")
+        self.gridLayout_3.addWidget(self.label_5, 0, 0, 1, 1)
+        self.identEdit = QtWidgets.QLineEdit(parent=self.advancedTab)
+        self.identEdit.setObjectName("identEdit")
+        self.gridLayout_3.addWidget(self.identEdit, 0, 1, 1, 1)
+        self.label_6 = QtWidgets.QLabel(parent=self.advancedTab)
+        self.label_6.setObjectName("label_6")
+        self.gridLayout_3.addWidget(self.label_6, 1, 0, 1, 1)
+        self.quitEdit = QtWidgets.QLineEdit(parent=self.advancedTab)
+        self.quitEdit.setObjectName("quitEdit")
+        self.gridLayout_3.addWidget(self.quitEdit, 1, 1, 1, 1)
+        self.label_7 = QtWidgets.QLabel(parent=self.advancedTab)
+        self.label_7.setObjectName("label_7")
+        self.gridLayout_3.addWidget(self.label_7, 2, 0, 1, 1)
+        self.partEdit = QtWidgets.QLineEdit(parent=self.advancedTab)
+        self.partEdit.setObjectName("partEdit")
+        self.gridLayout_3.addWidget(self.partEdit, 2, 1, 1, 1)
+        spacerItem2 = QtWidgets.QSpacerItem(20, 291, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+        self.gridLayout_3.addItem(spacerItem2, 3, 1, 1, 1)
+        self.identityTabWidget.addTab(self.advancedTab, "")
+        self.verticalLayout.addWidget(self.identityTabWidget)
+        self.buttonBox = QtWidgets.QDialogButtonBox(parent=IrcIdentitiesEditDialog)
+        self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
+        self.buttonBox.setObjectName("buttonBox")
+        self.verticalLayout.addWidget(self.buttonBox)
+
+        self.retranslateUi(IrcIdentitiesEditDialog)
+        self.identityTabWidget.setCurrentIndex(0)
+        self.buttonBox.accepted.connect(IrcIdentitiesEditDialog.accept) # type: ignore
+        self.buttonBox.rejected.connect(IrcIdentitiesEditDialog.reject) # type: ignore
+        QtCore.QMetaObject.connectSlotsByName(IrcIdentitiesEditDialog)
+        IrcIdentitiesEditDialog.setTabOrder(self.identitiesCombo, self.addButton)
+        IrcIdentitiesEditDialog.setTabOrder(self.addButton, self.copyButton)
+        IrcIdentitiesEditDialog.setTabOrder(self.copyButton, self.renameButton)
+        IrcIdentitiesEditDialog.setTabOrder(self.renameButton, self.deleteButton)
+        IrcIdentitiesEditDialog.setTabOrder(self.deleteButton, self.identityTabWidget)
+        IrcIdentitiesEditDialog.setTabOrder(self.identityTabWidget, self.realnameEdit)
+        IrcIdentitiesEditDialog.setTabOrder(self.realnameEdit, self.nicknameEdit)
+        IrcIdentitiesEditDialog.setTabOrder(self.nicknameEdit, self.nicknamesList)
+        IrcIdentitiesEditDialog.setTabOrder(self.nicknamesList, self.nicknameAddButton)
+        IrcIdentitiesEditDialog.setTabOrder(self.nicknameAddButton, self.nicknameDeleteButton)
+        IrcIdentitiesEditDialog.setTabOrder(self.nicknameDeleteButton, self.nicknameUpButton)
+        IrcIdentitiesEditDialog.setTabOrder(self.nicknameUpButton, self.nicknameDownButton)
+        IrcIdentitiesEditDialog.setTabOrder(self.nicknameDownButton, self.serviceEdit)
+        IrcIdentitiesEditDialog.setTabOrder(self.serviceEdit, self.passwordEdit)
+        IrcIdentitiesEditDialog.setTabOrder(self.passwordEdit, self.showPasswordButton)
+        IrcIdentitiesEditDialog.setTabOrder(self.showPasswordButton, self.rememberPosOnAwayCheckBox)
+        IrcIdentitiesEditDialog.setTabOrder(self.rememberPosOnAwayCheckBox, self.awayEdit)
+        IrcIdentitiesEditDialog.setTabOrder(self.awayEdit, self.identEdit)
+        IrcIdentitiesEditDialog.setTabOrder(self.identEdit, self.quitEdit)
+        IrcIdentitiesEditDialog.setTabOrder(self.quitEdit, self.partEdit)
+
+    def retranslateUi(self, IrcIdentitiesEditDialog):
+        _translate = QtCore.QCoreApplication.translate
+        IrcIdentitiesEditDialog.setWindowTitle(_translate("IrcIdentitiesEditDialog", "IRC Identities"))
+        self.label.setText(_translate("IrcIdentitiesEditDialog", "Identity:"))
+        self.identitiesCombo.setToolTip(_translate("IrcIdentitiesEditDialog", "Select the identity to work on"))
+        self.addButton.setToolTip(_translate("IrcIdentitiesEditDialog", "Press to add a new identity"))
+        self.copyButton.setToolTip(_translate("IrcIdentitiesEditDialog", "Press to copy the selected identity"))
+        self.renameButton.setToolTip(_translate("IrcIdentitiesEditDialog", "Press to rename the selected identity"))
+        self.deleteButton.setToolTip(_translate("IrcIdentitiesEditDialog", "Press to delete the selected identity"))
+        self.label_2.setText(_translate("IrcIdentitiesEditDialog", "Real Name:"))
+        self.realnameEdit.setToolTip(_translate("IrcIdentitiesEditDialog", "Enter the real name"))
+        self.nickNameGroup.setTitle(_translate("IrcIdentitiesEditDialog", "Nick Names"))
+        self.nicknameEdit.setToolTip(_translate("IrcIdentitiesEditDialog", "Enter a nick name to add"))
+        self.nicknameAddButton.setToolTip(_translate("IrcIdentitiesEditDialog", "Press to add the entered nick name"))
+        self.nicknameDeleteButton.setToolTip(_translate("IrcIdentitiesEditDialog", "Press to delete the selected nick name"))
+        self.nicknameUpButton.setToolTip(_translate("IrcIdentitiesEditDialog", "Press to move the selected nick name up"))
+        self.nicknameDownButton.setToolTip(_translate("IrcIdentitiesEditDialog", "Press to move the selected nick name down"))
+        self.autoIdentifyGroup.setTitle(_translate("IrcIdentitiesEditDialog", "Auto Identify"))
+        self.label_3.setText(_translate("IrcIdentitiesEditDialog", "Service:"))
+        self.serviceEdit.setToolTip(_translate("IrcIdentitiesEditDialog", "Enter the name of the service to identify against"))
+        self.serviceEdit.setWhatsThis(_translate("IrcIdentitiesEditDialog", "Service name can be <b><i>nickserv</i></b> or a network-dependent name such as <b><i>nickserv@services.dal.net</i></b>"))
+        self.label_4.setText(_translate("IrcIdentitiesEditDialog", "Password:"))
+        self.passwordEdit.setToolTip(_translate("IrcIdentitiesEditDialog", "Enter the password"))
+        self.showPasswordButton.setToolTip(_translate("IrcIdentitiesEditDialog", "Press to show the password"))
+        self.identityTabWidget.setTabText(self.identityTabWidget.indexOf(self.generalTab), _translate("IrcIdentitiesEditDialog", "General"))
+        self.rememberPosOnAwayCheckBox.setToolTip(_translate("IrcIdentitiesEditDialog", "Select to mark the current position in the chat, when you send an AWAY command."))
+        self.rememberPosOnAwayCheckBox.setText(_translate("IrcIdentitiesEditDialog", "Mark the current position in chat windows when going away"))
+        self.label_8.setText(_translate("IrcIdentitiesEditDialog", "Away Message:"))
+        self.awayEdit.setToolTip(_translate("IrcIdentitiesEditDialog", "Enter the message to be sent when going away"))
+        self.identityTabWidget.setTabText(self.identityTabWidget.indexOf(self.awayTab), _translate("IrcIdentitiesEditDialog", "Away"))
+        self.label_5.setText(_translate("IrcIdentitiesEditDialog", "Ident:"))
+        self.identEdit.setToolTip(_translate("IrcIdentitiesEditDialog", "Enter the identity to be used to log-on to the server"))
+        self.label_6.setText(_translate("IrcIdentitiesEditDialog", "Reason for Quit:"))
+        self.quitEdit.setToolTip(_translate("IrcIdentitiesEditDialog", "Enter a message to be sent when quitting"))
+        self.label_7.setText(_translate("IrcIdentitiesEditDialog", "Reason for Part:"))
+        self.partEdit.setToolTip(_translate("IrcIdentitiesEditDialog", "Enter message to be sent when leaving a channel"))
+        self.identityTabWidget.setTabText(self.identityTabWidget.indexOf(self.advancedTab), _translate("IrcIdentitiesEditDialog", "Advanced"))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/Ui_IrcNetworkEditDialog.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,110 @@
+# Form implementation generated from reading ui file 'ExtensionIrc/IrcNetworkEditDialog.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_IrcNetworkEditDialog(object):
+    def setupUi(self, IrcNetworkEditDialog):
+        IrcNetworkEditDialog.setObjectName("IrcNetworkEditDialog")
+        IrcNetworkEditDialog.resize(400, 321)
+        IrcNetworkEditDialog.setSizeGripEnabled(True)
+        self.gridLayout = QtWidgets.QGridLayout(IrcNetworkEditDialog)
+        self.gridLayout.setObjectName("gridLayout")
+        self.label = QtWidgets.QLabel(parent=IrcNetworkEditDialog)
+        self.label.setObjectName("label")
+        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
+        self.networkEdit = QtWidgets.QLineEdit(parent=IrcNetworkEditDialog)
+        self.networkEdit.setObjectName("networkEdit")
+        self.gridLayout.addWidget(self.networkEdit, 0, 1, 1, 2)
+        self.label_2 = QtWidgets.QLabel(parent=IrcNetworkEditDialog)
+        self.label_2.setObjectName("label_2")
+        self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
+        self.identityCombo = QtWidgets.QComboBox(parent=IrcNetworkEditDialog)
+        self.identityCombo.setObjectName("identityCombo")
+        self.gridLayout.addWidget(self.identityCombo, 1, 1, 1, 1)
+        self.editIdentitiesButton = QtWidgets.QToolButton(parent=IrcNetworkEditDialog)
+        self.editIdentitiesButton.setText("")
+        self.editIdentitiesButton.setObjectName("editIdentitiesButton")
+        self.gridLayout.addWidget(self.editIdentitiesButton, 1, 2, 1, 1)
+        self.label_3 = QtWidgets.QLabel(parent=IrcNetworkEditDialog)
+        self.label_3.setObjectName("label_3")
+        self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
+        self.editServerButton = QtWidgets.QToolButton(parent=IrcNetworkEditDialog)
+        self.editServerButton.setText("")
+        self.editServerButton.setObjectName("editServerButton")
+        self.gridLayout.addWidget(self.editServerButton, 2, 2, 1, 1)
+        self.label_4 = QtWidgets.QLabel(parent=IrcNetworkEditDialog)
+        self.label_4.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignTop)
+        self.label_4.setObjectName("label_4")
+        self.gridLayout.addWidget(self.label_4, 3, 0, 1, 1)
+        self.channelList = QtWidgets.QTreeWidget(parent=IrcNetworkEditDialog)
+        self.channelList.setAlternatingRowColors(True)
+        self.channelList.setRootIsDecorated(False)
+        self.channelList.setItemsExpandable(False)
+        self.channelList.setExpandsOnDoubleClick(False)
+        self.channelList.setObjectName("channelList")
+        self.gridLayout.addWidget(self.channelList, 3, 1, 1, 1)
+        self.verticalLayout = QtWidgets.QVBoxLayout()
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.addChannelButton = QtWidgets.QToolButton(parent=IrcNetworkEditDialog)
+        self.addChannelButton.setText("")
+        self.addChannelButton.setObjectName("addChannelButton")
+        self.verticalLayout.addWidget(self.addChannelButton)
+        self.editChannelButton = QtWidgets.QToolButton(parent=IrcNetworkEditDialog)
+        self.editChannelButton.setText("")
+        self.editChannelButton.setObjectName("editChannelButton")
+        self.verticalLayout.addWidget(self.editChannelButton)
+        self.deleteChannelButton = QtWidgets.QToolButton(parent=IrcNetworkEditDialog)
+        self.deleteChannelButton.setText("")
+        self.deleteChannelButton.setObjectName("deleteChannelButton")
+        self.verticalLayout.addWidget(self.deleteChannelButton)
+        spacerItem = QtWidgets.QSpacerItem(20, 98, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+        self.verticalLayout.addItem(spacerItem)
+        self.gridLayout.addLayout(self.verticalLayout, 3, 2, 1, 1)
+        self.buttonBox = QtWidgets.QDialogButtonBox(parent=IrcNetworkEditDialog)
+        self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
+        self.buttonBox.setObjectName("buttonBox")
+        self.gridLayout.addWidget(self.buttonBox, 4, 0, 1, 3)
+        self.serverEdit = QtWidgets.QLineEdit(parent=IrcNetworkEditDialog)
+        self.serverEdit.setReadOnly(True)
+        self.serverEdit.setObjectName("serverEdit")
+        self.gridLayout.addWidget(self.serverEdit, 2, 1, 1, 1)
+
+        self.retranslateUi(IrcNetworkEditDialog)
+        self.buttonBox.accepted.connect(IrcNetworkEditDialog.accept) # type: ignore
+        self.buttonBox.rejected.connect(IrcNetworkEditDialog.reject) # type: ignore
+        QtCore.QMetaObject.connectSlotsByName(IrcNetworkEditDialog)
+        IrcNetworkEditDialog.setTabOrder(self.networkEdit, self.identityCombo)
+        IrcNetworkEditDialog.setTabOrder(self.identityCombo, self.editIdentitiesButton)
+        IrcNetworkEditDialog.setTabOrder(self.editIdentitiesButton, self.serverEdit)
+        IrcNetworkEditDialog.setTabOrder(self.serverEdit, self.editServerButton)
+        IrcNetworkEditDialog.setTabOrder(self.editServerButton, self.channelList)
+        IrcNetworkEditDialog.setTabOrder(self.channelList, self.addChannelButton)
+        IrcNetworkEditDialog.setTabOrder(self.addChannelButton, self.editChannelButton)
+        IrcNetworkEditDialog.setTabOrder(self.editChannelButton, self.deleteChannelButton)
+        IrcNetworkEditDialog.setTabOrder(self.deleteChannelButton, self.buttonBox)
+
+    def retranslateUi(self, IrcNetworkEditDialog):
+        _translate = QtCore.QCoreApplication.translate
+        IrcNetworkEditDialog.setWindowTitle(_translate("IrcNetworkEditDialog", "IRC Network"))
+        self.label.setText(_translate("IrcNetworkEditDialog", "Network Name:"))
+        self.networkEdit.setToolTip(_translate("IrcNetworkEditDialog", "Enter the name of the IRC network"))
+        self.label_2.setText(_translate("IrcNetworkEditDialog", "Identity:"))
+        self.identityCombo.setToolTip(_translate("IrcNetworkEditDialog", "Select the identity to be used for the IRC network"))
+        self.editIdentitiesButton.setToolTip(_translate("IrcNetworkEditDialog", "Press to edit the identities"))
+        self.label_3.setText(_translate("IrcNetworkEditDialog", "Server:"))
+        self.editServerButton.setToolTip(_translate("IrcNetworkEditDialog", "Press to edit the server configuration"))
+        self.label_4.setText(_translate("IrcNetworkEditDialog", "Channels:"))
+        self.channelList.headerItem().setText(0, _translate("IrcNetworkEditDialog", "Channel"))
+        self.channelList.headerItem().setText(1, _translate("IrcNetworkEditDialog", "Join Automatically"))
+        self.addChannelButton.setToolTip(_translate("IrcNetworkEditDialog", "Press to add a new channel"))
+        self.editChannelButton.setToolTip(_translate("IrcNetworkEditDialog", "Press to edit the selected channel"))
+        self.deleteChannelButton.setToolTip(_translate("IrcNetworkEditDialog", "Press to delete the selected channel"))
+        self.serverEdit.setToolTip(_translate("IrcNetworkEditDialog", "Shows the name of the server"))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/Ui_IrcNetworkListDialog.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,84 @@
+# Form implementation generated from reading ui file 'ExtensionIrc/IrcNetworkListDialog.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_IrcNetworkListDialog(object):
+    def setupUi(self, IrcNetworkListDialog):
+        IrcNetworkListDialog.setObjectName("IrcNetworkListDialog")
+        IrcNetworkListDialog.resize(500, 350)
+        IrcNetworkListDialog.setSizeGripEnabled(True)
+        self.gridLayout = QtWidgets.QGridLayout(IrcNetworkListDialog)
+        self.gridLayout.setObjectName("gridLayout")
+        self.networksList = QtWidgets.QTreeWidget(parent=IrcNetworkListDialog)
+        self.networksList.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers)
+        self.networksList.setAlternatingRowColors(True)
+        self.networksList.setColumnCount(2)
+        self.networksList.setObjectName("networksList")
+        self.networksList.headerItem().setText(0, "1")
+        self.networksList.headerItem().setText(1, "2")
+        self.networksList.header().setVisible(False)
+        self.gridLayout.addWidget(self.networksList, 0, 0, 1, 1)
+        self.verticalLayout = QtWidgets.QVBoxLayout()
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.newButton = QtWidgets.QPushButton(parent=IrcNetworkListDialog)
+        self.newButton.setObjectName("newButton")
+        self.verticalLayout.addWidget(self.newButton)
+        self.editButton = QtWidgets.QPushButton(parent=IrcNetworkListDialog)
+        self.editButton.setObjectName("editButton")
+        self.verticalLayout.addWidget(self.editButton)
+        self.deleteButton = QtWidgets.QPushButton(parent=IrcNetworkListDialog)
+        self.deleteButton.setObjectName("deleteButton")
+        self.verticalLayout.addWidget(self.deleteButton)
+        self.autoConnectButton = QtWidgets.QPushButton(parent=IrcNetworkListDialog)
+        self.autoConnectButton.setCheckable(True)
+        self.autoConnectButton.setObjectName("autoConnectButton")
+        self.verticalLayout.addWidget(self.autoConnectButton)
+        self.line = QtWidgets.QFrame(parent=IrcNetworkListDialog)
+        self.line.setLineWidth(2)
+        self.line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
+        self.line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
+        self.line.setObjectName("line")
+        self.verticalLayout.addWidget(self.line)
+        self.editIdentitiesButton = QtWidgets.QPushButton(parent=IrcNetworkListDialog)
+        self.editIdentitiesButton.setObjectName("editIdentitiesButton")
+        self.verticalLayout.addWidget(self.editIdentitiesButton)
+        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+        self.verticalLayout.addItem(spacerItem)
+        self.gridLayout.addLayout(self.verticalLayout, 0, 1, 1, 1)
+        self.buttonBox = QtWidgets.QDialogButtonBox(parent=IrcNetworkListDialog)
+        self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Close)
+        self.buttonBox.setObjectName("buttonBox")
+        self.gridLayout.addWidget(self.buttonBox, 1, 0, 1, 2)
+
+        self.retranslateUi(IrcNetworkListDialog)
+        self.buttonBox.accepted.connect(IrcNetworkListDialog.accept) # type: ignore
+        self.buttonBox.rejected.connect(IrcNetworkListDialog.reject) # type: ignore
+        QtCore.QMetaObject.connectSlotsByName(IrcNetworkListDialog)
+        IrcNetworkListDialog.setTabOrder(self.networksList, self.newButton)
+        IrcNetworkListDialog.setTabOrder(self.newButton, self.editButton)
+        IrcNetworkListDialog.setTabOrder(self.editButton, self.deleteButton)
+        IrcNetworkListDialog.setTabOrder(self.deleteButton, self.autoConnectButton)
+        IrcNetworkListDialog.setTabOrder(self.autoConnectButton, self.editIdentitiesButton)
+        IrcNetworkListDialog.setTabOrder(self.editIdentitiesButton, self.buttonBox)
+
+    def retranslateUi(self, IrcNetworkListDialog):
+        _translate = QtCore.QCoreApplication.translate
+        IrcNetworkListDialog.setWindowTitle(_translate("IrcNetworkListDialog", "IRC Networks"))
+        self.newButton.setToolTip(_translate("IrcNetworkListDialog", "Press to define a new network"))
+        self.newButton.setText(_translate("IrcNetworkListDialog", "&New..."))
+        self.editButton.setToolTip(_translate("IrcNetworkListDialog", "Press to edit the selected network"))
+        self.editButton.setText(_translate("IrcNetworkListDialog", "&Edit..."))
+        self.deleteButton.setToolTip(_translate("IrcNetworkListDialog", "Press to delete the selected network"))
+        self.deleteButton.setText(_translate("IrcNetworkListDialog", "&Delete"))
+        self.autoConnectButton.setToolTip(_translate("IrcNetworkListDialog", "Press to  toggle the auto-connect flag of the selected network"))
+        self.autoConnectButton.setText(_translate("IrcNetworkListDialog", "&Auto-Connect"))
+        self.editIdentitiesButton.setToolTip(_translate("IrcNetworkListDialog", "Press to edit the identities"))
+        self.editIdentitiesButton.setText(_translate("IrcNetworkListDialog", "Edit &Identities..."))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/Ui_IrcNetworkWidget.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,97 @@
+# Form implementation generated from reading ui file 'ExtensionIrc/IrcNetworkWidget.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_IrcNetworkWidget(object):
+    def setupUi(self, IrcNetworkWidget):
+        IrcNetworkWidget.setObjectName("IrcNetworkWidget")
+        IrcNetworkWidget.resize(400, 322)
+        IrcNetworkWidget.setWindowTitle("")
+        self.verticalLayout = QtWidgets.QVBoxLayout(IrcNetworkWidget)
+        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
+        self.verticalLayout.setSpacing(3)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.messages = QtWidgets.QTextBrowser(parent=IrcNetworkWidget)
+        self.messages.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.CustomContextMenu)
+        self.messages.setTabChangesFocus(True)
+        self.messages.setOpenLinks(False)
+        self.messages.setObjectName("messages")
+        self.verticalLayout.addWidget(self.messages)
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.networkCombo = QtWidgets.QComboBox(parent=IrcNetworkWidget)
+        self.networkCombo.setObjectName("networkCombo")
+        self.horizontalLayout_2.addWidget(self.networkCombo)
+        self.connectButton = QtWidgets.QToolButton(parent=IrcNetworkWidget)
+        self.connectButton.setToolTip("")
+        self.connectButton.setText("")
+        self.connectButton.setObjectName("connectButton")
+        self.horizontalLayout_2.addWidget(self.connectButton)
+        self.awayButton = QtWidgets.QToolButton(parent=IrcNetworkWidget)
+        self.awayButton.setText("")
+        self.awayButton.setObjectName("awayButton")
+        self.horizontalLayout_2.addWidget(self.awayButton)
+        self.editButton = QtWidgets.QToolButton(parent=IrcNetworkWidget)
+        self.editButton.setText("")
+        self.editButton.setObjectName("editButton")
+        self.horizontalLayout_2.addWidget(self.editButton)
+        self.verticalLayout.addLayout(self.horizontalLayout_2)
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.nickCombo = QtWidgets.QComboBox(parent=IrcNetworkWidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.nickCombo.sizePolicy().hasHeightForWidth())
+        self.nickCombo.setSizePolicy(sizePolicy)
+        self.nickCombo.setEditable(True)
+        self.nickCombo.setObjectName("nickCombo")
+        self.horizontalLayout.addWidget(self.nickCombo)
+        self.line = QtWidgets.QFrame(parent=IrcNetworkWidget)
+        self.line.setFrameShape(QtWidgets.QFrame.Shape.VLine)
+        self.line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
+        self.line.setObjectName("line")
+        self.horizontalLayout.addWidget(self.line)
+        self.channelCombo = QtWidgets.QComboBox(parent=IrcNetworkWidget)
+        self.channelCombo.setEnabled(False)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.channelCombo.sizePolicy().hasHeightForWidth())
+        self.channelCombo.setSizePolicy(sizePolicy)
+        self.channelCombo.setEditable(True)
+        self.channelCombo.setObjectName("channelCombo")
+        self.horizontalLayout.addWidget(self.channelCombo)
+        self.joinButton = QtWidgets.QToolButton(parent=IrcNetworkWidget)
+        self.joinButton.setEnabled(False)
+        self.joinButton.setText("")
+        self.joinButton.setObjectName("joinButton")
+        self.horizontalLayout.addWidget(self.joinButton)
+        self.verticalLayout.addLayout(self.horizontalLayout)
+
+        self.retranslateUi(IrcNetworkWidget)
+        QtCore.QMetaObject.connectSlotsByName(IrcNetworkWidget)
+        IrcNetworkWidget.setTabOrder(self.networkCombo, self.connectButton)
+        IrcNetworkWidget.setTabOrder(self.connectButton, self.awayButton)
+        IrcNetworkWidget.setTabOrder(self.awayButton, self.editButton)
+        IrcNetworkWidget.setTabOrder(self.editButton, self.nickCombo)
+        IrcNetworkWidget.setTabOrder(self.nickCombo, self.channelCombo)
+        IrcNetworkWidget.setTabOrder(self.channelCombo, self.joinButton)
+        IrcNetworkWidget.setTabOrder(self.joinButton, self.messages)
+
+    def retranslateUi(self, IrcNetworkWidget):
+        _translate = QtCore.QCoreApplication.translate
+        self.messages.setToolTip(_translate("IrcNetworkWidget", "Shows the network messages"))
+        self.networkCombo.setToolTip(_translate("IrcNetworkWidget", "Select a network to connect to"))
+        self.awayButton.setToolTip(_translate("IrcNetworkWidget", "Press to set the user status to AWAY"))
+        self.editButton.setToolTip(_translate("IrcNetworkWidget", "Press to edit the networks"))
+        self.nickCombo.setToolTip(_translate("IrcNetworkWidget", "Select a nick name for the channel"))
+        self.channelCombo.setToolTip(_translate("IrcNetworkWidget", "Enter the channel to join"))
+        self.joinButton.setToolTip(_translate("IrcNetworkWidget", "Press to join the channel"))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/Ui_IrcServerEditDialog.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,72 @@
+# Form implementation generated from reading ui file 'ExtensionIrc/IrcServerEditDialog.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_IrcServerEditDialog(object):
+    def setupUi(self, IrcServerEditDialog):
+        IrcServerEditDialog.setObjectName("IrcServerEditDialog")
+        IrcServerEditDialog.resize(400, 158)
+        IrcServerEditDialog.setSizeGripEnabled(True)
+        self.gridLayout = QtWidgets.QGridLayout(IrcServerEditDialog)
+        self.gridLayout.setObjectName("gridLayout")
+        self.label = QtWidgets.QLabel(parent=IrcServerEditDialog)
+        self.label.setObjectName("label")
+        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
+        self.serverEdit = QtWidgets.QLineEdit(parent=IrcServerEditDialog)
+        self.serverEdit.setObjectName("serverEdit")
+        self.gridLayout.addWidget(self.serverEdit, 0, 1, 1, 2)
+        self.label_2 = QtWidgets.QLabel(parent=IrcServerEditDialog)
+        self.label_2.setObjectName("label_2")
+        self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
+        self.portSpinBox = QtWidgets.QSpinBox(parent=IrcServerEditDialog)
+        self.portSpinBox.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
+        self.portSpinBox.setMinimum(1)
+        self.portSpinBox.setMaximum(65535)
+        self.portSpinBox.setProperty("value", 6667)
+        self.portSpinBox.setObjectName("portSpinBox")
+        self.gridLayout.addWidget(self.portSpinBox, 1, 1, 1, 1)
+        spacerItem = QtWidgets.QSpacerItem(238, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+        self.gridLayout.addItem(spacerItem, 1, 2, 1, 1)
+        self.label_3 = QtWidgets.QLabel(parent=IrcServerEditDialog)
+        self.label_3.setObjectName("label_3")
+        self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
+        self.passwordEdit = QtWidgets.QLineEdit(parent=IrcServerEditDialog)
+        self.passwordEdit.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
+        self.passwordEdit.setObjectName("passwordEdit")
+        self.gridLayout.addWidget(self.passwordEdit, 2, 1, 1, 2)
+        self.sslCheckBox = QtWidgets.QCheckBox(parent=IrcServerEditDialog)
+        self.sslCheckBox.setObjectName("sslCheckBox")
+        self.gridLayout.addWidget(self.sslCheckBox, 3, 0, 1, 3)
+        self.buttonBox = QtWidgets.QDialogButtonBox(parent=IrcServerEditDialog)
+        self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
+        self.buttonBox.setObjectName("buttonBox")
+        self.gridLayout.addWidget(self.buttonBox, 4, 0, 1, 3)
+
+        self.retranslateUi(IrcServerEditDialog)
+        self.buttonBox.accepted.connect(IrcServerEditDialog.accept) # type: ignore
+        self.buttonBox.rejected.connect(IrcServerEditDialog.reject) # type: ignore
+        QtCore.QMetaObject.connectSlotsByName(IrcServerEditDialog)
+        IrcServerEditDialog.setTabOrder(self.serverEdit, self.portSpinBox)
+        IrcServerEditDialog.setTabOrder(self.portSpinBox, self.passwordEdit)
+        IrcServerEditDialog.setTabOrder(self.passwordEdit, self.sslCheckBox)
+        IrcServerEditDialog.setTabOrder(self.sslCheckBox, self.buttonBox)
+
+    def retranslateUi(self, IrcServerEditDialog):
+        _translate = QtCore.QCoreApplication.translate
+        IrcServerEditDialog.setWindowTitle(_translate("IrcServerEditDialog", "IRC Server"))
+        self.label.setText(_translate("IrcServerEditDialog", "Server:"))
+        self.serverEdit.setToolTip(_translate("IrcServerEditDialog", "Enter the host name of the IRC server"))
+        self.label_2.setText(_translate("IrcServerEditDialog", "Port:"))
+        self.portSpinBox.setToolTip(_translate("IrcServerEditDialog", "Enter the port number"))
+        self.label_3.setText(_translate("IrcServerEditDialog", "Password:"))
+        self.passwordEdit.setToolTip(_translate("IrcServerEditDialog", "Enter the server password"))
+        self.sslCheckBox.setToolTip(_translate("IrcServerEditDialog", "Select to use an SSL encrypted connection"))
+        self.sslCheckBox.setText(_translate("IrcServerEditDialog", "Use Encrypted Connection (SSL)"))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/Ui_IrcWidget.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,61 @@
+# Form implementation generated from reading ui file 'ExtensionIrc/IrcWidget.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_IrcWidget(object):
+    def setupUi(self, IrcWidget):
+        IrcWidget.setObjectName("IrcWidget")
+        IrcWidget.resize(400, 941)
+        IrcWidget.setWindowTitle("")
+        self.verticalLayout_3 = QtWidgets.QVBoxLayout(IrcWidget)
+        self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
+        self.verticalLayout_3.setObjectName("verticalLayout_3")
+        self.splitter = QtWidgets.QSplitter(parent=IrcWidget)
+        self.splitter.setOrientation(QtCore.Qt.Orientation.Vertical)
+        self.splitter.setObjectName("splitter")
+        self.groupBox = QtWidgets.QGroupBox(parent=self.splitter)
+        self.groupBox.setObjectName("groupBox")
+        self.verticalLayout = QtWidgets.QVBoxLayout(self.groupBox)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.channelsWidget = QtWidgets.QTabWidget(parent=self.groupBox)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(3)
+        sizePolicy.setHeightForWidth(self.channelsWidget.sizePolicy().hasHeightForWidth())
+        self.channelsWidget.setSizePolicy(sizePolicy)
+        self.channelsWidget.setDocumentMode(True)
+        self.channelsWidget.setTabsClosable(True)
+        self.channelsWidget.setMovable(True)
+        self.channelsWidget.setObjectName("channelsWidget")
+        self.verticalLayout.addWidget(self.channelsWidget)
+        self.groupBox_2 = QtWidgets.QGroupBox(parent=self.splitter)
+        self.groupBox_2.setObjectName("groupBox_2")
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox_2)
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.networkWidget = IrcNetworkWidget(parent=self.groupBox_2)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Expanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(2)
+        sizePolicy.setHeightForWidth(self.networkWidget.sizePolicy().hasHeightForWidth())
+        self.networkWidget.setSizePolicy(sizePolicy)
+        self.networkWidget.setFocusPolicy(QtCore.Qt.FocusPolicy.TabFocus)
+        self.networkWidget.setObjectName("networkWidget")
+        self.verticalLayout_2.addWidget(self.networkWidget)
+        self.verticalLayout_3.addWidget(self.splitter)
+
+        self.retranslateUi(IrcWidget)
+        QtCore.QMetaObject.connectSlotsByName(IrcWidget)
+        IrcWidget.setTabOrder(self.networkWidget, self.channelsWidget)
+
+    def retranslateUi(self, IrcWidget):
+        _translate = QtCore.QCoreApplication.translate
+        self.groupBox.setTitle(_translate("IrcWidget", "Channels"))
+        self.groupBox_2.setTitle(_translate("IrcWidget", "Network"))
+from ExtensionIrc.IrcNetworkWidget import IrcNetworkWidget
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/__init__.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package containing the IRC modules.
+"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/i18n/irc_de.ts	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,2061 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="de_DE">
+  <context>
+    <name>IrcChannelEditDialog</name>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>IRC Channel</source>
+      <translation>IRC Kanal</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Name:</source>
+      <translation>Name:</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Enter the channel name</source>
+      <translation>Gib den Kanalnamen ein</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Key:</source>
+      <translation>Schlüssel:</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Enter the channel key/password</source>
+      <translation>Gib den Kanalschlüssel/das Kanalkennwort ein</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Select to join this channel automatically</source>
+      <translation>Auswählen, um diesem Kanal automatisch zu betreten</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Join channel automatically</source>
+      <translation>Dem Kanal automatisch betreten</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcChannelWidget</name>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1685" />
+      <location filename="../IrcChannelWidget.py" line="1620" />
+      <location filename="../IrcChannelWidget.py" line="453" />
+      <source>Send Message</source>
+      <translation>Nachricht senden</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="454" />
+      <source>Messages starting with a '/' are not allowed in private chats.</source>
+      <translation>Nachrichten, die mit „/“ beginnen, sind in privaten Unterhaltungen nicht zugelassen.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="570" />
+      <source>Leave IRC channel</source>
+      <translation>IRC-Kanal verlassen</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="571" />
+      <source>Do you really want to leave the IRC channel &lt;b&gt;{0}&lt;/b&gt;?</source>
+      <translation>Soll der IRC-Kanal &lt;b&gt;{0}&lt;/b&gt; wirklich verlassen werden?</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="740" />
+      <source>Channel Message</source>
+      <translation>Kanalnachricht</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="747" />
+      <source>Nick mentioned</source>
+      <translation>Nick erwähnt</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="778" />
+      <source>{0} has joined the channel {1} ({2}).</source>
+      <translation>{0} hat den Kanal {1} betreten ({2}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="783" />
+      <source>You have joined the channel {0} ({1}).</source>
+      <translation>Sie sind dem Kanal {0} betreten.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="791" />
+      <source>Join Channel</source>
+      <translation>Kanal betreten</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="811" />
+      <source>{0} has left {1}.</source>
+      <translation>{0} hat den Kanal {1} verlassen.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="818" />
+      <location filename="../IrcChannelWidget.py" line="815" />
+      <source>{0} has left {1}: {2}.</source>
+      <translation>{0} hat den Kanal {1} verlassen: {2}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="826" />
+      <source>Leave Channel</source>
+      <translation>Kanal verlassen</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="846" />
+      <source>{0} has quit {1}.</source>
+      <translation>{0} hat den Server verlassen.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="849" />
+      <source>{0} has quit {1}: {2}.</source>
+      <translation>{0} hat den Server verlassen: {2}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="857" />
+      <source>Quit</source>
+      <translation>Server verlassen</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="878" />
+      <source>You are now known as {0}.</source>
+      <translation>Sie sind jetzt als {0} bekannt.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="884" />
+      <source>User {0} is now known as {1}.</source>
+      <translation>Nutzer {0} ist nun als {1} bekannt.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="929" />
+      <source>Away</source>
+      <translation>Abwesend</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="930" />
+      <source>{0} is away: {1}</source>
+      <translation>{0} ist abwesend: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="950" />
+      <source>The channel topic is: "{0}".</source>
+      <translation>Das Kanalthema ist: „{0}“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="969" />
+      <source>The topic was set by {0} on {1}.</source>
+      <translation>Das Thema wurde am {0} durch {1} gesetzt.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="992" />
+      <source>Channel URL: {0}</source>
+      <translation>Kanal-URL: {0}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1017" />
+      <source>password protected ({0})</source>
+      <translation>Kennwortgeschützt ({0})</translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="1020" />
+      <source>limited to %n user(s)</source>
+      <translation>
+        <numerusform>auf einen Nutzer begrenzt</numerusform>
+        <numerusform>auf %n Nutzer begrenzt</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1028" />
+      <source>Channel modes: {0}.</source>
+      <translation>Kanalmodi: {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1047" />
+      <source>This channel was created on {0}.</source>
+      <translation>Dieser Kanal wurde am {0} erstellt.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1084" />
+      <source>{0} sets the channel mode to 'anonymous'.</source>
+      <translation>{0} setzt den Kanalmodus „anonym“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1088" />
+      <source>{0} removes the 'anonymous' mode from the channel.</source>
+      <translation>{0} entfernt den Kanalmodus „anonym“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1093" />
+      <source>{0} sets a ban on {1}.</source>
+      <translation>{0} verhängt einen Bann auf {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1097" />
+      <source>{0} removes the ban on {1}.</source>
+      <translation>{0} entfernt den Bann von {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1102" />
+      <source>{0} sets the channel mode to 'no colors allowed'.</source>
+      <translation>{0} setzt den Kanalmodus „keine Farben zugelassen“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1106" />
+      <source>{0} sets the channel mode to 'allow color codes'.</source>
+      <translation>{0} setzt den Kanalmodus „Farben zugelassen“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1111" />
+      <source>{0} sets a ban exception on {1}.</source>
+      <translation>{0} setzt eine Bannausnahme auf {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1115" />
+      <source>{0} removes the ban exception on {1}.</source>
+      <translation>{0} entfernt die Bannausnahme auf {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1120" />
+      <source>{0} sets the channel mode to 'invite only'.</source>
+      <translation>{0} setzt den Kanalmodus „Einladung erforderlich“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1124" />
+      <source>{0} removes the 'invite only' mode from the channel.</source>
+      <translation>{0} entfernt den Kanalmodus „Einladung erforderlich“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1129" />
+      <source>{0} sets the channel key to '{1}'.</source>
+      <translation>{0} setzt den Kanalschlüssel „{1}“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1133" />
+      <source>{0} removes the channel key.</source>
+      <translation>{0} entfernt den Kanalschlüssel.</translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="1136" />
+      <source>{0} sets the channel limit to %n nick(s).</source>
+      <translation>
+        <numerusform>{0} setzt die Kanalbegrenzung auf einen Nutzer.</numerusform>
+        <numerusform>{0} setzt die Kanalbegrenzung auf %n Nutzer.</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1142" />
+      <source>{0} removes the channel limit.</source>
+      <translation>{0} entfernt die Kanalbegrenzung.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1145" />
+      <source>{0} sets the channel mode to 'moderated'.</source>
+      <translation>{0} setzt den Kanalmodus „modereriert“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1149" />
+      <source>{0} sets the channel mode to 'unmoderated'.</source>
+      <translation>{0} setzt den Kanalmodus „unmoderiert“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1154" />
+      <source>{0} sets the channel mode to 'no messages from outside'.</source>
+      <translation>{0} setzt den Kanalmodus „keine Nachrichten von außerhalb“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1159" />
+      <source>{0} sets the channel mode to 'allow messages from outside'.</source>
+      <translation>{0} setzt den Kanalmodus „Nachrichten von außerhalb zugelassen“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1165" />
+      <source>{0} sets the channel mode to 'private'.</source>
+      <translation>{0} setzt den Kanalmodus „privat“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1169" />
+      <source>{0} sets the channel mode to 'public'.</source>
+      <translation>{0} setzt den Kanalmodus „öffentlich“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1174" />
+      <source>{0} sets the channel mode to 'quiet'.</source>
+      <translation>{0} setzt den Kanalmodus „schweigend“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1178" />
+      <source>{0} removes the 'quiet' mode from the channel.</source>
+      <translation>{0} entfernt den Kanalmodus „schweigend“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1185" />
+      <source>{0} sets the channel mode to 'secret'.</source>
+      <translation>{0} setzt den Kanalmodus „unsichtbar“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1189" />
+      <source>{0} sets the channel mode to 'visible'.</source>
+      <translation>{0} setzt den Kanalmodus „sichtbar“.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1194" />
+      <source>{0} switches on 'topic protection'.</source>
+      <translation>{0} schaltet den „Themenschutz“ an.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1198" />
+      <source>{0} switches off 'topic protection'.</source>
+      <translation>{0} schaltet den „Themenschutz“ aus.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1203" />
+      <source>{0} sets invitation mask {1}.</source>
+      <translation>{0} setzt die Einladungsmaske {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1207" />
+      <source>{0} removes the invitation mask {1}.</source>
+      <translation>{0} entfernt die Einladungsmaske {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1211" />
+      <source>Mode</source>
+      <translation>Modus</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1233" />
+      <source>{0} sets mode for {1}: {2}.</source>
+      <translation>{0} setzt den Modus für {1}: {2}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1265" />
+      <source>Help</source>
+      <translation>Hilfe</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1318" />
+      <location filename="../IrcChannelWidget.py" line="1308" />
+      <location filename="../IrcChannelWidget.py" line="1300" />
+      <location filename="../IrcChannelWidget.py" line="1292" />
+      <source>CTCP</source>
+      <translation>CTCP</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1293" />
+      <source>Received Version request from {0}.</source>
+      <translation>Versionsanfrage von {0} empfangen.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1301" />
+      <source>Received CTCP-PING request from {0}, sending answer.</source>
+      <translation>CTCP-PING-Anfrage von {0} empfangen, Antwort wird gesendet.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1309" />
+      <source>Received CTCP-CLIENTINFO request from {0}, sending answer.</source>
+      <translation>CTCP-CLIENTINFO-Anfrage von {0} empfangen, Antwort wird gesendet.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1319" />
+      <source>Received unknown CTCP-{0} request from {1}.</source>
+      <translation>Unbekannte CTCP-{0}-Anfrage von {1} empfangen.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1419" />
+      <source>--- New From Here ---</source>
+      <translation>--- Neu ab hier ---</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1503" />
+      <location filename="../IrcChannelWidget.py" line="1486" />
+      <source>Save Messages</source>
+      <translation>Nachrichten speichern</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1488" />
+      <source>HTML Files (*.{0});;Text Files (*.txt);;All Files (*)</source>
+      <translation>HTML-Dateien (*.{0});;Textdateien (*.txt);;Alle Dateien (*)</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1504" />
+      <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;Die Datei &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Überschreiben?&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1524" />
+      <source>Error saving Messages</source>
+      <translation>Fehler beim Speichern der Nachrichten</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1525" />
+      <source>&lt;p&gt;The messages contents could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Der Nachrichteninhalt konnte nicht nach &lt;b&gt;{0}&lt;/b&gt; gespeichert werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1537" />
+      <source>Copy</source>
+      <translation>Kopieren</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1542" />
+      <source>Cut all</source>
+      <translation>Alles ausschneiden</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1547" />
+      <source>Copy all</source>
+      <translation>Alles kopieren</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1553" />
+      <source>Clear</source>
+      <translation>Löschen</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1558" />
+      <source>Save</source>
+      <translation>Speichern</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1562" />
+      <source>Mark Current Position</source>
+      <translation>Aktuellen Position markieren</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1565" />
+      <source>Remove Position Marker</source>
+      <translation>Positionsmarke entfernen</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1653" />
+      <location filename="../IrcChannelWidget.py" line="1637" />
+      <location filename="../IrcChannelWidget.py" line="1621" />
+      <source>Enter the message to be sent:</source>
+      <translation>Gib die zu sendende Mitteilung ein:</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1688" />
+      <location filename="../IrcChannelWidget.py" line="1636" />
+      <source>Send Query</source>
+      <translation>Query senden</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1691" />
+      <location filename="../IrcChannelWidget.py" line="1652" />
+      <source>Send Notice</source>
+      <translation>Notice senden</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1678" />
+      <source>Who Is</source>
+      <translation>Who Is</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1681" />
+      <source>Private Chat</source>
+      <translation>Private Unterhaltung</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1695" />
+      <source>Send Ping</source>
+      <translation>Ping senden</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1698" />
+      <source>Ignore User</source>
+      <translation>Nutzer ignorieren</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1702" />
+      <source>Refresh</source>
+      <translation>Aktualisieren</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1826" />
+      <location filename="../IrcChannelWidget.py" line="1800" />
+      <source>Who</source>
+      <translation>Who</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1801" />
+      <source>End of WHO list for {0}.</source>
+      <translation>Ende der WHO-Liste für {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1824" />
+      <source> (Away)</source>
+      <translation> (Abwesend)</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1827" />
+      <source>{0} is {1}@{2} ({3}){4}</source>
+      <translation>{0} ist {1}@{2} ({3}){4}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2216" />
+      <location filename="../IrcChannelWidget.py" line="2195" />
+      <location filename="../IrcChannelWidget.py" line="2174" />
+      <location filename="../IrcChannelWidget.py" line="2151" />
+      <location filename="../IrcChannelWidget.py" line="2131" />
+      <location filename="../IrcChannelWidget.py" line="2111" />
+      <location filename="../IrcChannelWidget.py" line="2091" />
+      <location filename="../IrcChannelWidget.py" line="2068" />
+      <location filename="../IrcChannelWidget.py" line="2060" />
+      <location filename="../IrcChannelWidget.py" line="2052" />
+      <location filename="../IrcChannelWidget.py" line="2041" />
+      <location filename="../IrcChannelWidget.py" line="2022" />
+      <location filename="../IrcChannelWidget.py" line="1988" />
+      <location filename="../IrcChannelWidget.py" line="1983" />
+      <location filename="../IrcChannelWidget.py" line="1960" />
+      <location filename="../IrcChannelWidget.py" line="1937" />
+      <location filename="../IrcChannelWidget.py" line="1930" />
+      <location filename="../IrcChannelWidget.py" line="1923" />
+      <location filename="../IrcChannelWidget.py" line="1916" />
+      <location filename="../IrcChannelWidget.py" line="1909" />
+      <location filename="../IrcChannelWidget.py" line="1902" />
+      <location filename="../IrcChannelWidget.py" line="1851" />
+      <source>Whois</source>
+      <translation>Whois</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1852" />
+      <source>{0} is {1}@{2} ({3}).</source>
+      <translation>{0} ist {1}@{2} ({3}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1903" />
+      <source>{0} is a user on channels: {1}</source>
+      <translation>{0} ist ein Nutzer der Kanäle: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1910" />
+      <source>{0} has voice on channels: {1}</source>
+      <translation>{0} hat Erlaubnis zu schreiben in den Kanälen: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1917" />
+      <source>{0} is a halfop on channels: {1}</source>
+      <translation>{0} hat HalfOp-Status in den Kanälen: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1924" />
+      <source>{0} is an operator on channels: {1}</source>
+      <translation>{0} hat Operator-Status in den Kanälen: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1931" />
+      <source>{0} is owner of channels: {1}</source>
+      <translation>{0} hat Besitzer-Status in den Kanälen: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1938" />
+      <source>{0} is admin on channels: {1}</source>
+      <translation>{0} hat Administrator-Status in den Kanälen: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1961" />
+      <source>{0} is online via {1} ({2}).</source>
+      <translation>{0} ist auf dem Server {1} ({2}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1984" />
+      <source>{0} is an IRC Operator.</source>
+      <translation>{0} ist ein IRC-Operator.</translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2017" />
+      <source>%n day(s)</source>
+      <translation>
+        <numerusform>%n Tag</numerusform>
+        <numerusform>%n Tage</numerusform>
+      </translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2037" />
+      <location filename="../IrcChannelWidget.py" line="2018" />
+      <source>%n hour(s)</source>
+      <translation>
+        <numerusform>%n Stunde</numerusform>
+        <numerusform>%n Stunden</numerusform>
+      </translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2049" />
+      <location filename="../IrcChannelWidget.py" line="2038" />
+      <location filename="../IrcChannelWidget.py" line="2019" />
+      <source>%n minute(s)</source>
+      <translation>
+        <numerusform>%n Minute</numerusform>
+        <numerusform>%n Minuten</numerusform>
+      </translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2050" />
+      <location filename="../IrcChannelWidget.py" line="2039" />
+      <location filename="../IrcChannelWidget.py" line="2020" />
+      <source>%n second(s)</source>
+      <translation>
+        <numerusform>%n Sekunde</numerusform>
+        <numerusform>%n Sekunden</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2023" />
+      <source>{0} has been idle for {1}, {2}, {3}, and {4}.</source>
+      <comment>{0} = name of person, {1} = (x days), {2} = (x hours), {3} = (x minutes), {4} = (x seconds)</comment>
+      <translation>{0} ist seit {1}, {2}, {3} und {4} untätig.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2042" />
+      <source>{0} has been idle for {1}, {2}, and {3}.</source>
+      <comment>{0} = name of person, {1} = (x hours), {2} = (x minutes), {3} = (x seconds)</comment>
+      <translation>{0} ist seit {1}, {2} und {3} untätig.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2053" />
+      <source>{0} has been idle for {1} and {2}.</source>
+      <comment>{0} = name of person, {1} = (x minutes), {3} = (x seconds)</comment>
+      <translation>{0} ist seit {1} und {2} untätig.</translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2061" />
+      <source>{0} has been idle for %n second(s).</source>
+      <translation>
+        <numerusform>{0} ist seit %n Sekunde untätig.</numerusform>
+        <numerusform>{0} ist seit %n Sekunden untätig.</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2069" />
+      <source>{0} has been online since {1}.</source>
+      <translation>{0} is seit dem {1} online.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2092" />
+      <source>End of WHOIS list for {0}.</source>
+      <translation>Ende der WHOIS Liste für {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2112" />
+      <source>{0} is an identified user.</source>
+      <translation>{0} wurde identifiziert.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2132" />
+      <source>{0} is available for help.</source>
+      <translation>{0} steht für Hilfe bereit.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2152" />
+      <source>{0} is logged in as {1}.</source>
+      <translation>{0} ist angemeldet als {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2175" />
+      <source>{0} is actually using the host {1} (IP: {2}).</source>
+      <translation>{0} verwendet den Host {1} (IP: {2}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2196" />
+      <source>{0} is using a secure connection.</source>
+      <translation>{0} verwendet eine sichere Verbindung.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2217" />
+      <source>{0} is connecting from {1} (IP: {2}).</source>
+      <translation>{0} ist verbunden von {1} (IP: {2}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2240" />
+      <source>Edit Channel Topic</source>
+      <translation>Kanalthema bearbeiten</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2241" />
+      <source>Enter the topic for this channel:</source>
+      <translation>Gib das Thema für diesen Kanal ein:</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Press to change the topic</source>
+      <translation>Drücken, um das Thema zu ändern</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Shows the list of users</source>
+      <translation>Zeigt die Liste der Teilnehmer</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Shows the channel messages</source>
+      <translation>Zeigt die Kanalnachrichten</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Enter a message, send by pressing Return or Enter</source>
+      <translation>Gib eine Nachricht ein, Senden durch Drücken von Return oder Enter</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcExtensionPlugin</name>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="190" />
+      <location filename="../../PluginExtensionIrc.py" line="186" />
+      <location filename="../../PluginExtensionIrc.py" line="71" />
+      <source>IRC</source>
+      <translation>IRC</translation>
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="191" />
+      <source>&amp;IRC</source>
+      <translation>&amp;IRC</translation>
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="192" />
+      <source>Ctrl+Alt+Shift+I</source>
+      <translation>Ctrl+Alt+Shift+I</translation>
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="198" />
+      <source>Switch the input focus to the IRC window.</source>
+      <translation>Schalte den Eingabefokus auf das IRC-Fenster um.</translation>
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="201" />
+      <source>&lt;b&gt;Activate IRC&lt;/b&gt;&lt;p&gt;This switches the input focus to the IRC window.&lt;/p&gt;</source>
+      <translation>&lt;b&gt;IRC aktivieren&lt;/b&gt;&lt;p&gt;Dies schaltet den Eingabefokus auf das IRC-Fenster um.&lt;/p&gt;</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcIdentitiesEditDialog</name>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>IRC Identities</source>
+      <translation>IRC Identitäten</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Identity:</source>
+      <translation>Identität:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Select the identity to work on</source>
+      <translation>Wähle die zu bearbeitende Identität</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to add a new identity</source>
+      <translation>Drücken, um eine neue Identität hinzuzufügen</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to copy the selected identity</source>
+      <translation>Drücken, um die ausgewählte Identität zu kopieren</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to rename the selected identity</source>
+      <translation>Drücken, um die ausgewählte Identität umzubenennen</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to delete the selected identity</source>
+      <translation>Drücken, um die ausgewählte Identität zu löschen</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>General</source>
+      <translation>Allgemein</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Real Name:</source>
+      <translation>Realer Name:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the real name</source>
+      <translation>Gib den realen Namen ein</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Nick Names</source>
+      <translation>Spitznamen</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter a nick name to add</source>
+      <translation>Gib einen hinzuzufügenden Spitznamen ein</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to add the entered nick name</source>
+      <translation>Drücken, um den eingegebenen Spitznamen hinzuzufügen</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to delete the selected nick name</source>
+      <translation>Drücken, um den ausgewählten Spitznamen zu löschen</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to move the selected nick name up</source>
+      <translation>Drücken, um den ausgewählten Spitznamen nach oben zu schieben</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to move the selected nick name down</source>
+      <translation>Drücken, um den ausgewählten Spitznamen nach unten zu schieben</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Auto Identify</source>
+      <translation>Automatisch identifizieren</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Service:</source>
+      <translation>Dienst:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the name of the service to identify against</source>
+      <translation>Gib den Namen des Dienstes ein, bei dem identifiziert werden soll</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Service name can be &lt;b&gt;&lt;i&gt;nickserv&lt;/i&gt;&lt;/b&gt; or a network-dependent name such as &lt;b&gt;&lt;i&gt;nickserv@services.dal.net&lt;/i&gt;&lt;/b&gt;</source>
+      <translation>Der Dienstname kann &lt;b&gt;&lt;i&gt;nickserv&lt;/i&gt;&lt;/b&gt; oder ein Netzwerk abhängiger Name wie &lt;b&gt;&lt;i&gt;nickserv@services.dal.net&lt;/i&gt;&lt;/b&gt; sein</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation>Kennwort:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the password</source>
+      <translation>Gib das Kennwort ein</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="506" />
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to show the password</source>
+      <translation>Drücken, um das Kennwort anzuzeigen</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Away</source>
+      <translation>Abwesend</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Select to mark the current position in the chat, when you send an AWAY command.</source>
+      <translation>Auswählen, um die aktuelle Position im Kanalfenster zu markieren, wenn ein AWAY Befehl geschickt wird.</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Mark the current position in chat windows when going away</source>
+      <translation>Aktuelle Position in den Kanalfenstern markieren, wenn Status „Abwesend“ gesetzt wird</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Away Message:</source>
+      <translation>Abwesenhaitsnachricht:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the message to be sent when going away</source>
+      <translation>Gib die Nachricht ein, die gesendet wird, wenn Sie abwesend sind</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Advanced</source>
+      <translation>Erweitert</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Ident:</source>
+      <translation>Ident:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the identity to be used to log-on to the server</source>
+      <translation>Gib die Identität ein, die zum Anmelden am Server verwendet werden soll</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Reason for Quit:</source>
+      <translation>Grund für Quit:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter a message to be sent when quitting</source>
+      <translation>Gib eine Nachricht ein, die beim Verlassen des Servers geschickt wird</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Reason for Part:</source>
+      <translation>Grund für Verlassen:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter message to be sent when leaving a channel</source>
+      <translation>Gib eine Nachricht ein, die beim Verlassen eines Kanals geschickt wird</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="206" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="188" />
+      <source>Edit Identity</source>
+      <translation>Identität bearbeiten</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="189" />
+      <source>The identity must contain at least one nick name.</source>
+      <translation>Die Identität muss mindestens einen Spitznamen enthalten.</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="207" />
+      <source>The identity must have a real name.</source>
+      <translation>Die Identität muss einen realen namen enthalten.</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="259" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="240" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="230" />
+      <source>Add Identity</source>
+      <translation>Identität hinzufügen</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="315" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="273" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="231" />
+      <source>Identity Name:</source>
+      <translation>Name der Identität:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="326" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="284" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="241" />
+      <source>An identity named &lt;b&gt;{0}&lt;/b&gt; already exists. You must provide a different name.</source>
+      <translation>Eine Identität mit Namen &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Sie müssen einen anderen Namen angeben.</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="343" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="302" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="260" />
+      <source>The identity has to have a name.</source>
+      <translation>Die Identität muss einen Namen haben.</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="342" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="301" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="283" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="272" />
+      <source>Copy Identity</source>
+      <translation>Identität kopieren</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="325" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="314" />
+      <source>Rename Identity</source>
+      <translation>Identität umbenennen</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="366" />
+      <source>This identity is in use. If you remove it, the network settings using it will fall back to the default identity. Should it be deleted anyway?</source>
+      <translation>Diese Identität wird genutzt. Wenn Sie sie löschen, werden alle Netzwerkeinstellungen, die diese Identität verwenden auf die Standardidentität wechseln. Soll sie trotzdem gelöscht werden?</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="372" />
+      <source>Do you really want to delete all information for this identity?</source>
+      <translation>Sollen wirklich alle Informationen dieser Identität gelöscht werden?</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="377" />
+      <source>Delete Identity</source>
+      <translation>Identität löschen</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="502" />
+      <source>Press to hide the password</source>
+      <translation>Drücken, um das Kennwort auszublenden</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcIdentity</name>
+    <message>
+      <location filename="../IrcNetworkManager.py" line="26" />
+      <source>Default Identity</source>
+      <translation>Standardidentität</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkManager.py" line="30" />
+      <source>Gone away for now.</source>
+      <translation>Bin bis auf weiteres weg.</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkManager.py" line="32" />
+      <location filename="../IrcNetworkManager.py" line="31" />
+      <source>IRC for eric IDE</source>
+      <translation>IRC Client der eric IDE</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcNetworkEditDialog</name>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>IRC Network</source>
+      <translation>IRC Netzwerk</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Network Name:</source>
+      <translation>Netzwerkname:</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Enter the name of the IRC network</source>
+      <translation>Gib den Namen des IRC Netzwerkes ein</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Identity:</source>
+      <translation>Identität:</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Select the identity to be used for the IRC network</source>
+      <translation>Wähle die Identität uas, die für das IRC Netzwerk verwendet werden soll</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to edit the identities</source>
+      <translation>Drücken, um die Identitäten zu bearbeiten</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Server:</source>
+      <translation>Server:</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to edit the server configuration</source>
+      <translation>Drücken, um die Server Konfiguration zu bearbeiten</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Channels:</source>
+      <translation>Kanäle:</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Channel</source>
+      <translation>Kanal</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Join Automatically</source>
+      <translation>Automatisch betreten</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to add a new channel</source>
+      <translation>Drücken, um einen neuen Kanal hinzuzufügen</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to edit the selected channel</source>
+      <translation>Drücken, um den ausgewählten Kanal zu bearbeiten</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to delete the selected channel</source>
+      <translation>Drücken, um den ausgewählten Kanal zu löschen</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Shows the name of the server</source>
+      <translation>Zeigt den Namen des Server</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="261" />
+      <location filename="../IrcNetworkEditDialog.py" line="255" />
+      <location filename="../IrcNetworkEditDialog.py" line="70" />
+      <source>Yes</source>
+      <translation>Ja</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="263" />
+      <location filename="../IrcNetworkEditDialog.py" line="257" />
+      <location filename="../IrcNetworkEditDialog.py" line="70" />
+      <source>No</source>
+      <translation>Nein</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="192" />
+      <source>Delete Channel</source>
+      <translation>Kanal löschen</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="193" />
+      <source>Do you really want to delete channel &lt;b&gt;{0}&lt;/b&gt;?</source>
+      <translation>Soll der Kanal &lt;b&gt;{0}&lt;/b&gt; wirklich gelöscht werden?</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcNetworkListDialog</name>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>IRC Networks</source>
+      <translation>IRC Netzwerke</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to define a new network</source>
+      <translation>Drücken, um ein neues Netzwerk zu definieren</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;New...</source>
+      <translation>&amp;Neu...</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to edit the selected network</source>
+      <translation>Drücken, um das ausgewählte Netzwerk zu bearbeiten</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;Edit...</source>
+      <translation>&amp;Bearbeiten...</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to delete the selected network</source>
+      <translation>Drücken, um das ausgewählte Netzwerk zu löschen</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;Delete</source>
+      <translation>&amp;Löschen</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to  toggle the auto-connect flag of the selected network</source>
+      <translation>Drücken, um die automatische Verbindung zum ausgewählten Netzwerk umzuschalten</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;Auto-Connect</source>
+      <translation>&amp;Automatisch Verbinden</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to edit the identities</source>
+      <translation>Drücken, um die Identitäten zu bearbeiten</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Edit &amp;Identities...</source>
+      <translation>&amp;Identitäten bearbeiten...</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="249" />
+      <location filename="../IrcNetworkListDialog.py" line="89" />
+      <source>Yes</source>
+      <translation>Ja</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="249" />
+      <location filename="../IrcNetworkListDialog.py" line="89" />
+      <source>No</source>
+      <translation>Nein</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="91" />
+      <source>Identity</source>
+      <translation>Identität</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="94" />
+      <source>Server</source>
+      <translation>Server</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="97" />
+      <source>Channels</source>
+      <translation>Kanäle</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="252" />
+      <location filename="../IrcNetworkListDialog.py" line="99" />
+      <source>Auto-Connect</source>
+      <translation>Automatisch Verbinden</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="170" />
+      <source>Delete Irc Network</source>
+      <translation>IRC Netzwerk löschen</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="171" />
+      <source>Do you really want to delete IRC network &lt;b&gt;{0}&lt;/b&gt;?</source>
+      <translation>Soll das IRC Netzwerk &lt;b&gt;{0}&lt;/b&gt; wirklich gelöscht werden?</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcNetworkWidget</name>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="354" />
+      <source>Press to disconnect from the network</source>
+      <translation>Drücken, um die Verbindung zum Netzwerk zu beenden</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="359" />
+      <source>Press to connect to the selected network</source>
+      <translation>Drücken, um zum ausgewählten Netzwerk zu verbinden</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="450" />
+      <location filename="../IrcNetworkWidget.py" line="433" />
+      <source>Save Messages</source>
+      <translation>Nachrichten speichern</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="435" />
+      <source>HTML Files (*.{0});;Text Files (*.txt);;All Files (*)</source>
+      <translation>HTML-Dateien (*.{0});;Textdateien (*.txt);;Alle Dateien (*)</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="451" />
+      <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;Die Datei &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Überschreiben?&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="471" />
+      <source>Error saving Messages</source>
+      <translation>Fehler beim Speichern der Nachrichten</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="472" />
+      <source>&lt;p&gt;The messages contents could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Der Nachrichteninhalt konnte nicht nach &lt;b&gt;{0}&lt;/b&gt; gespeichert werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="484" />
+      <source>Copy</source>
+      <translation>Kopieren</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="489" />
+      <source>Cut all</source>
+      <translation>Alles ausschneiden</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="494" />
+      <source>Copy all</source>
+      <translation>Alles kopieren</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="500" />
+      <source>Clear</source>
+      <translation>Löschen</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="505" />
+      <source>Save</source>
+      <translation>Speichern</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Shows the network messages</source>
+      <translation>Zeigt Netzwerkmeldungen an</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Select a network to connect to</source>
+      <translation>Wähle ein zu verbindendes Netzwerk aus</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Press to set the user status to AWAY</source>
+      <translation>Drücken, um den Nutzerstatus auf „Abwesend“ zu setzen</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Press to edit the networks</source>
+      <translation>Drücken, um die Netzwerke zu bearbeiten</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Select a nick name for the channel</source>
+      <translation>Wähle einen Spitznamen für das Netzwerk</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Enter the channel to join</source>
+      <translation>Wählen den zu betretenden Kanal</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Press to join the channel</source>
+      <translation>Drücken, um den Kanal zu betreten</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcPage</name>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>&lt;b&gt;Configure IRC&lt;/b&gt;</source>
+      <translation>&lt;b&gt;IRC-Einstellungen&lt;/b&gt;</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable to show timestamps</source>
+      <translation>Auswählen, um Zeitstempel anzuzeigen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Show Timestamps</source>
+      <translation>Zeitstempel anzeigen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Time Format:</source>
+      <translation>Zeitformat:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the time format to use</source>
+      <translation>Wähle das zu verwendende Zeitformat</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Date Format</source>
+      <translation>Datumsformat</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the date format to use</source>
+      <translation>Wähle das zu verwendende Datumsformat</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show the date in timestamps</source>
+      <translation>Auswählen, um das Datum im Zeitstempel anzuzeigen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Show Date</source>
+      <translation>Datum anzeigen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Colors</source>
+      <translation>Farben</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Network Messages:</source>
+      <translation>Netzwerkmeldungen:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for network messages</source>
+      <translation>Wähle die Farbe für Netzwerkmeldungen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Nick Names:</source>
+      <translation>Spitznamen:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for nick names</source>
+      <translation>Wähle die Farbe für Spitznamen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Server Messages:</source>
+      <translation>Servermeldungen:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for server messages</source>
+      <translation>Wähle die Farbe für Servermeldungen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Own Nick Name:</source>
+      <translation>Eigener Spitzname:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for own nick name</source>
+      <translation>Wähle die Farbe für den eigenen Spitznamen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Channel Messages:</source>
+      <translation>Kanalnachrichten:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for channel messages</source>
+      <translation>Wähle die Farbe für Kanalmeldungen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Join Channel:</source>
+      <translation>Kanal betreten:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for join channel messages</source>
+      <translation>Wähle die Farbe für Meldungen zum Betreten eines Kanals</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Error Messages:</source>
+      <translation>Fehlermeldungen:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for error messages</source>
+      <translation>Wähle die Farbe für Fehlermeldungen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Leave Channel:</source>
+      <translation>Kanal verlassen:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for leave channel messages</source>
+      <translation>Wähle die Farbe für Meldungen zum Verlassen eines Kanals</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Timestamp:</source>
+      <translation>Zeitstempel:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for timestamps</source>
+      <translation>Wähle die Farbe für den Zeitstempel</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Channel Info:</source>
+      <translation>Kanalinformationen:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for channel info messages</source>
+      <translation>Wähle die Farbe für Kanalinformationsmeldungen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Hyperlink:</source>
+      <translation>Hyperlink:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for hyperlinks</source>
+      <translation>Wähle die Farbe für Hyperlinks</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable to allow colored text in IRC messages</source>
+      <translation>Auswählen, um farbigen Text in IRC-Nachrichten zuzulassen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Allow Colored Text in IRC Messages</source>
+      <translation>Farbigen Text in IRC-Nachrichten zulassen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable to show notifications</source>
+      <translation>Auswählen, um Benachrichtigungen anzuzeigen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Show Notifications</source>
+      <translation>Benachrichtigungen anzeigen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show a notification for join and leave events</source>
+      <translation>Auswählen, um eine Benachrichtigung für Betreten- und Verlassen-Nachrichten anzuzeigen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Join/Leave Event</source>
+      <translation>Ereignis bei Betreten/Verlassen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show a notification for every message</source>
+      <translation>Auswählen, um eine Benachrichtigung für jede Nachricht anzuzeigen</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Every Message</source>
+      <translation>Jede Nachricht</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show a notification for every mentioning of your nick</source>
+      <translation>Auswählen, um eine Benachrichtigung anzuzeigen, wann immer der eigene Spitzname erwähnt wird</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Mentioning of Own Nick</source>
+      <translation>Erwähnung des eigenen Spitznamens</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select this to enable the automatic lookup of user information for joined channels</source>
+      <translation>Auswählen, um das automatische Nachschlagen von Nutzerinformationen für alle betretenen Kanäle zu aktivieren</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable Automatic User Information Lookup (/WHO)</source>
+      <translation>Nutzerinformationen automatische ermitteln (/WHO)</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Max. Number of Users in Channel:</source>
+      <translation>Max. Anzahl Nutzer im Kanal:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enter the maximum numbers of users in a channel allowed for this function</source>
+      <translation>Gib die maximal zulässige Anzahl an Nutzern im Kanal an</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Update Interval:</source>
+      <translation>Aktualisierungsintervall:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enter the user information update interval</source>
+      <translation>Gib das Aktualisierungsintervall für die Nutzerinformationen ein</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source> s</source>
+      <translation> s</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Marker</source>
+      <translation>Markierung</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to mark the current position, when the chat window is hidden</source>
+      <translation>Auswählen, um die aktuelle Position im Kanalfenster zu markieren, wenn das Fenster verdeckt wird</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Mark Current Position When Hidden</source>
+      <translation>Aktuelle Position markieren wenn nicht sichtbar</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Marker Foreground:</source>
+      <translation>Vordergrundfarbe der Markierung:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the foreground color for the marker</source>
+      <translation>Wähle die Textfarbe der Markierung aus</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the background color for the marker</source>
+      <translation>Wähle die Hintergrundfarbe der Markierung aus</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Marker Background:</source>
+      <translation>Hintergrundfarbe der Markierung:</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcServerEditDialog</name>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>IRC Server</source>
+      <translation>IRC Server</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Server:</source>
+      <translation>Server:</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Enter the host name of the IRC server</source>
+      <translation>Gib den Hostnamen des IRC Servers ein</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation>Port:</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Enter the port number</source>
+      <translation>Gib die Portnummer ein</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation>Kennwort:</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Enter the server password</source>
+      <translation>Gib das Serverkennwort ein</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Select to use an SSL encrypted connection</source>
+      <translation>Auswählen, um eine SSL verschlüsselte Verbindung zu verwenden</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Use Encrypted Connection (SSL)</source>
+      <translation>Verschlüsselte Verbindung benutzen (SSL)</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcUserItem</name>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="136" />
+      <source>{0} (ignored)</source>
+      <translation>{0} (ignoriert)</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcUtilities</name>
+    <message>
+      <location filename="../IrcUtilities.py" line="162" />
+      <source>anonymous</source>
+      <translation>anonym</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="163" />
+      <source>ban mask</source>
+      <translation>Bann Maske</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="164" />
+      <source>no colors allowed</source>
+      <translation>keine Farben erlaubt</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="165" />
+      <source>ban exception mask</source>
+      <translation>Bannausnahme Maske</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="166" />
+      <source>invite only</source>
+      <translation>Einladung erforderlich</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="167" />
+      <source>password protected</source>
+      <translation>Kennwort geschützt</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="168" />
+      <source>user limit</source>
+      <translation>Nutzerbegrenzung</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="169" />
+      <source>moderated</source>
+      <translation>moderiert</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="170" />
+      <source>no messages from outside</source>
+      <translation>keine Meldung von außerhalb</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="171" />
+      <source>private</source>
+      <translation>privat</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="172" />
+      <source>quiet</source>
+      <translation>schweigend</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="173" />
+      <source>reop channel</source>
+      <translation>Kanal übernehmen</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="174" />
+      <source>secret</source>
+      <translation>unsichtbar</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="175" />
+      <source>topic protection</source>
+      <translation>Themenschutz</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="176" />
+      <source>invitation mask</source>
+      <translation>Einladungsmaske</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcWidget</name>
+    <message>
+      <location filename="../IrcWidget.py" line="86" />
+      <source>Press to leave the current channel</source>
+      <translation>Drücken, um den aktuellen Kanal zu verlassen</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="225" />
+      <source>SSL Connection</source>
+      <translation>SSL Verbindung</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="226" />
+      <source>An encrypted connection to the IRC network was requested but SSL is not available. Please change the server configuration.</source>
+      <translation>Eine verschlüsselte Verbindung zum IRC-Netzwerk wurde angefragt, SSL steht jedoch nicht zur Verfügung. Bitte ändern Sie die Serverkonfiguration.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="607" />
+      <location filename="../IrcWidget.py" line="572" />
+      <location filename="../IrcWidget.py" line="563" />
+      <location filename="../IrcWidget.py" line="302" />
+      <location filename="../IrcWidget.py" line="297" />
+      <location filename="../IrcWidget.py" line="290" />
+      <location filename="../IrcWidget.py" line="266" />
+      <location filename="../IrcWidget.py" line="252" />
+      <source>Info</source>
+      <translation>Info</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="253" />
+      <source>Looking for server {0} (port {1}) using an SSL encrypted connection...</source>
+      <translation>Suche nach Server {0} (Port {1}) über eine SSL verschlüsselte Verbindung...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="267" />
+      <source>Looking for server {0} (port {1})...</source>
+      <translation>Suche nach Server {0} (Port {1})...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="280" />
+      <source>Disconnect from Server</source>
+      <translation>Verbindung zum Server beenden</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="281" />
+      <source>&lt;p&gt;Do you really want to disconnect from &lt;b&gt;{0}&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;All channels will be closed.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Soll die Verbindung zu &lt;b&gt;{0}&lt;/b&gt; wirklich unterbrochen werden?&lt;/p&gt;&lt;p&gt;Alle Kanäle werden geschlossen.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="291" />
+      <source>Disconnecting from server {0}...</source>
+      <translation>Verbindung zum Server {0} wird unterbrochen...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="298" />
+      <source>Disconnecting from network {0}...</source>
+      <translation>Verbindung zum Netzwerk {0} wird unterbrochen...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="302" />
+      <source>Disconnecting from server.</source>
+      <translation>Verbindung zum Server wird unterbrochen.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="563" />
+      <source>Server found,connecting...</source>
+      <translation>Server gefunden, Verbindung wird hergesteltl...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="572" />
+      <source>Connected,logging in...</source>
+      <translation>Verbunden, Anmeldung läuft...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="607" />
+      <source>Server disconnected.</source>
+      <translation>Serververbindung unterbrochen.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="651" />
+      <source>Message Error</source>
+      <translation>Nachrichtenfehler</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="652" />
+      <source>Unknown message received from server:&lt;br/&gt;{0}</source>
+      <translation>Unbekannte Nachricht vom Server empfangen:&lt;br/&gt;{0}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1093" />
+      <location filename="../IrcWidget.py" line="1083" />
+      <location filename="../IrcWidget.py" line="1075" />
+      <location filename="../IrcWidget.py" line="1067" />
+      <location filename="../IrcWidget.py" line="695" />
+      <location filename="../IrcWidget.py" line="687" />
+      <source>CTCP</source>
+      <translation>CTCP</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="688" />
+      <source>Received CTCP-PING response from {0} with latency of {1} ms.</source>
+      <translation>CTCP-PING-Antwort von {0} mit einer Latenz von {1} ms empfangen.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="696" />
+      <source>Received unknown CTCP-{0} response from {1}.</source>
+      <translation>Unbekannte CTCP-{0}-Antwort von {1} empfangen.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="724" />
+      <source>Notice</source>
+      <translation>Notiz</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="734" />
+      <source>You have set your personal modes to &lt;b&gt;[{0}]&lt;/b&gt;.</source>
+      <translation>Sie haben Ihre persönlichen Modi auf &lt;b&gt;[{0}]&lt;/b&gt; gesetzt.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="738" />
+      <source>{0} has changed your personal modes to &lt;b&gt;[{1}]&lt;/b&gt;.</source>
+      <translation>{0} hat Ihre persönlichen Modi auf &lt;b&gt;[{0}]&lt;/b&gt; geändert.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="742" />
+      <source>Mode</source>
+      <translation>Modus</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="750" />
+      <source>You have left channel {0}.</source>
+      <translation>Sie haben den Kanal {0} verlassen.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="762" />
+      <source>You are now known as {0}.</source>
+      <translation>Sie sind jetzt als {0} bekannt.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="768" />
+      <source>User {0} is now known as {1}.</source>
+      <translation>Nutzer {0} ist nun als {1} bekannt.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="774" />
+      <source>Received PONG from {0}</source>
+      <translation>PONG von {0} empfangen</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="779" />
+      <source>Server Error</source>
+      <translation>Server Fehler</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="817" />
+      <source>Error</source>
+      <translation>Fehler</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="836" />
+      <source>Welcome</source>
+      <translation>Willkommen</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="838" />
+      <source>Support</source>
+      <translation>Support</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="840" />
+      <source>User</source>
+      <translation>Nutzer</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="842" />
+      <source>MOTD</source>
+      <translation>MOTD</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="844" />
+      <source>Away</source>
+      <translation>Abwesend</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="846" />
+      <source>Info ({0})</source>
+      <translation>Info ({0})</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="850" />
+      <source>Message of the day</source>
+      <translation>Nachricht des Tages</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="852" />
+      <source>End of message of the day</source>
+      <translation>Ende der Nachricht des Tages</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="855" />
+      <source>Server {0} (Version {1}), User-Modes: {2}, Channel-Modes: {3}</source>
+      <translation>Server {0} (Version {1}), Benutzermodi: {2}, Kanalmodi: {3}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="860" />
+      <source>Current users on {0}: {1}, max. {2}</source>
+      <translation>Anzahl der Benutzer auf {0}: {1}, max. {2}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="865" />
+      <source>Current users on the network: {0}, max. {1}</source>
+      <translation>Anzahl der Benutzer im Netzwerk: {0}, max. {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="869" />
+      <source>You are no longer marked as being away.</source>
+      <translation>Sie sind nicht länger als „abwesend“ gekennzeichnet.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="871" />
+      <source>You have been marked as being away.</source>
+      <translation>Sie sind als „abwesend“ gekennzeichnet.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1002" />
+      <location filename="../IrcWidget.py" line="986" />
+      <location filename="../IrcWidget.py" line="934" />
+      <source>SSL Error</source>
+      <translation>SSL Fehler</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="935" />
+      <source>Connection to server {0} (port {1}) lost while waiting for user response to an SSL error.</source>
+      <translation>Die Verbindung zum Server {0} (Port {1}) wurde während des Wartens auf eine Benutzerantwort auf einen SSL Fehler verloren.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="971" />
+      <location filename="../IrcWidget.py" line="964" />
+      <location filename="../IrcWidget.py" line="959" />
+      <location filename="../IrcWidget.py" line="951" />
+      <location filename="../IrcWidget.py" line="943" />
+      <source>Socket Error</source>
+      <translation>Socker Fehler</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="944" />
+      <source>The host was not found. Please check the host name and port settings.</source>
+      <translation>Der Server wurde nicht gefunden. Bitte prüfen Sie den Servernamen und die Porteinstellungen.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="952" />
+      <source>The connection was refused by the peer. Please check the host name and port settings.</source>
+      <translation>Die Verbindung wurde von der Gegenseite abgelehnt. Bitte prüfen Sie den Servernamen und die Porteinstellungen.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="959" />
+      <source>The SSL handshake failed.</source>
+      <translation>Der SSL Handshake schlug fehl.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="965" />
+      <source>The following network error occurred:&lt;br/&gt;{0}</source>
+      <translation>Der folgende Netzwerkfehler trat auf:&lt;br/&gt;{0}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="971" />
+      <source>A network error occurred.</source>
+      <translation>Ein Netzwerkfehler trat auf.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="987" />
+      <source>Could not connect to {0} (port {1}) using an SSL encrypted connection. Either the server does not support SSL (did you use the correct port?) or you rejected the certificate.</source>
+      <translation>Es konnte keine SSL-verschlüsselte Verbindung zum Server {0} (Port {1}) aufgebaut werden. Entweder unterstützt der Server kein SSL (haben Sie den richtigen Port verwendet?) oder Sie haben das Zertifikat abgelehnt.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1003" />
+      <source>The SSL certificate for the server {0} (port {1}) failed the authenticity check. SSL errors were accepted by you.</source>
+      <translation>Das SSL-Zertifikat für den Server {0} (Port {1}) hat die Authentizitätsprüfung nicht bestanden. Die SSL-Fehler wurden von Ihnen akzeptiert.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1068" />
+      <source>Received Version request from {0}.</source>
+      <translation>Versionsanfrage von {0} empfangen.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1076" />
+      <source>Received CTCP-PING request from {0}, sending answer.</source>
+      <translation>CTCP-PING-Anfrage von {0} empfangen, Antwort wird gesendet.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1084" />
+      <source>Received CTCP-CLIENTINFO request from {0}, sending answer.</source>
+      <translation>CTCP-CLIENTINFO-Anfrage von {0} empfangen, Antwort wird gesendet.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1094" />
+      <source>Received unknown CTCP-{0} request from {1}.</source>
+      <translation>Unbekannte CTCP-{0}-Anfrage von {1} empfangen.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1110" />
+      <source>{0} ({1})</source>
+      <comment>channel name, users count</comment>
+      <translation>{0} ({1})</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1152" />
+      <location filename="../IrcWidget.py" line="1132" />
+      <source>Critical</source>
+      <translation>Kritischer Fehler</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1133" />
+      <source>No nickname acceptable to the server configured for &lt;b&gt;{0}&lt;/b&gt;. Disconnecting...</source>
+      <translation>Es ist kein für den Server &lt;b&gt;{0}&lt;/b&gt; akzeptabler Spitzname konfiguriert. Verbindungsabbruch...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1152" />
+      <source>The given nickname is already in use.</source>
+      <translation>Der übergebene Spitzname wird bereits verwendet.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.ui" line="0" />
+      <source>Channels</source>
+      <translation>Kanäle</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.ui" line="0" />
+      <source>Network</source>
+      <translation>Netzwerk</translation>
+    </message>
+  </context>
+</TS>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/i18n/irc_empty.ts	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,2054 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+  <context>
+    <name>IrcChannelEditDialog</name>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>IRC Channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Enter the channel name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Key:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Enter the channel key/password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Select to join this channel automatically</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Join channel automatically</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcChannelWidget</name>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1685" />
+      <location filename="../IrcChannelWidget.py" line="1620" />
+      <location filename="../IrcChannelWidget.py" line="453" />
+      <source>Send Message</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="454" />
+      <source>Messages starting with a '/' are not allowed in private chats.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="570" />
+      <source>Leave IRC channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="571" />
+      <source>Do you really want to leave the IRC channel &lt;b&gt;{0}&lt;/b&gt;?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="740" />
+      <source>Channel Message</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="747" />
+      <source>Nick mentioned</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="778" />
+      <source>{0} has joined the channel {1} ({2}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="783" />
+      <source>You have joined the channel {0} ({1}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="791" />
+      <source>Join Channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="811" />
+      <source>{0} has left {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="818" />
+      <location filename="../IrcChannelWidget.py" line="815" />
+      <source>{0} has left {1}: {2}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="826" />
+      <source>Leave Channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="846" />
+      <source>{0} has quit {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="849" />
+      <source>{0} has quit {1}: {2}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="857" />
+      <source>Quit</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="878" />
+      <source>You are now known as {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="884" />
+      <source>User {0} is now known as {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="929" />
+      <source>Away</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="930" />
+      <source>{0} is away: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="950" />
+      <source>The channel topic is: "{0}".</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="969" />
+      <source>The topic was set by {0} on {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="992" />
+      <source>Channel URL: {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1017" />
+      <source>password protected ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="1020" />
+      <source>limited to %n user(s)</source>
+      <translation type="unfinished">
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1028" />
+      <source>Channel modes: {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1047" />
+      <source>This channel was created on {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1084" />
+      <source>{0} sets the channel mode to 'anonymous'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1088" />
+      <source>{0} removes the 'anonymous' mode from the channel.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1093" />
+      <source>{0} sets a ban on {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1097" />
+      <source>{0} removes the ban on {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1102" />
+      <source>{0} sets the channel mode to 'no colors allowed'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1106" />
+      <source>{0} sets the channel mode to 'allow color codes'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1111" />
+      <source>{0} sets a ban exception on {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1115" />
+      <source>{0} removes the ban exception on {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1120" />
+      <source>{0} sets the channel mode to 'invite only'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1124" />
+      <source>{0} removes the 'invite only' mode from the channel.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1129" />
+      <source>{0} sets the channel key to '{1}'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1133" />
+      <source>{0} removes the channel key.</source>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="1136" />
+      <source>{0} sets the channel limit to %n nick(s).</source>
+      <translation type="unfinished">
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1142" />
+      <source>{0} removes the channel limit.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1145" />
+      <source>{0} sets the channel mode to 'moderated'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1149" />
+      <source>{0} sets the channel mode to 'unmoderated'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1154" />
+      <source>{0} sets the channel mode to 'no messages from outside'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1159" />
+      <source>{0} sets the channel mode to 'allow messages from outside'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1165" />
+      <source>{0} sets the channel mode to 'private'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1169" />
+      <source>{0} sets the channel mode to 'public'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1174" />
+      <source>{0} sets the channel mode to 'quiet'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1178" />
+      <source>{0} removes the 'quiet' mode from the channel.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1185" />
+      <source>{0} sets the channel mode to 'secret'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1189" />
+      <source>{0} sets the channel mode to 'visible'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1194" />
+      <source>{0} switches on 'topic protection'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1198" />
+      <source>{0} switches off 'topic protection'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1203" />
+      <source>{0} sets invitation mask {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1207" />
+      <source>{0} removes the invitation mask {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1211" />
+      <source>Mode</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1233" />
+      <source>{0} sets mode for {1}: {2}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1265" />
+      <source>Help</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1318" />
+      <location filename="../IrcChannelWidget.py" line="1308" />
+      <location filename="../IrcChannelWidget.py" line="1300" />
+      <location filename="../IrcChannelWidget.py" line="1292" />
+      <source>CTCP</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1293" />
+      <source>Received Version request from {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1301" />
+      <source>Received CTCP-PING request from {0}, sending answer.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1309" />
+      <source>Received CTCP-CLIENTINFO request from {0}, sending answer.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1319" />
+      <source>Received unknown CTCP-{0} request from {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1419" />
+      <source>--- New From Here ---</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1503" />
+      <location filename="../IrcChannelWidget.py" line="1486" />
+      <source>Save Messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1488" />
+      <source>HTML Files (*.{0});;Text Files (*.txt);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1504" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1524" />
+      <source>Error saving Messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1525" />
+      <source>&lt;p&gt;The messages contents could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1537" />
+      <source>Copy</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1542" />
+      <source>Cut all</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1547" />
+      <source>Copy all</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1553" />
+      <source>Clear</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1558" />
+      <source>Save</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1562" />
+      <source>Mark Current Position</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1565" />
+      <source>Remove Position Marker</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1653" />
+      <location filename="../IrcChannelWidget.py" line="1637" />
+      <location filename="../IrcChannelWidget.py" line="1621" />
+      <source>Enter the message to be sent:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1688" />
+      <location filename="../IrcChannelWidget.py" line="1636" />
+      <source>Send Query</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1691" />
+      <location filename="../IrcChannelWidget.py" line="1652" />
+      <source>Send Notice</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1678" />
+      <source>Who Is</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1681" />
+      <source>Private Chat</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1695" />
+      <source>Send Ping</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1698" />
+      <source>Ignore User</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1702" />
+      <source>Refresh</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1826" />
+      <location filename="../IrcChannelWidget.py" line="1800" />
+      <source>Who</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1801" />
+      <source>End of WHO list for {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1824" />
+      <source> (Away)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1827" />
+      <source>{0} is {1}@{2} ({3}){4}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2216" />
+      <location filename="../IrcChannelWidget.py" line="2195" />
+      <location filename="../IrcChannelWidget.py" line="2174" />
+      <location filename="../IrcChannelWidget.py" line="2151" />
+      <location filename="../IrcChannelWidget.py" line="2131" />
+      <location filename="../IrcChannelWidget.py" line="2111" />
+      <location filename="../IrcChannelWidget.py" line="2091" />
+      <location filename="../IrcChannelWidget.py" line="2068" />
+      <location filename="../IrcChannelWidget.py" line="2060" />
+      <location filename="../IrcChannelWidget.py" line="2052" />
+      <location filename="../IrcChannelWidget.py" line="2041" />
+      <location filename="../IrcChannelWidget.py" line="2022" />
+      <location filename="../IrcChannelWidget.py" line="1988" />
+      <location filename="../IrcChannelWidget.py" line="1983" />
+      <location filename="../IrcChannelWidget.py" line="1960" />
+      <location filename="../IrcChannelWidget.py" line="1937" />
+      <location filename="../IrcChannelWidget.py" line="1930" />
+      <location filename="../IrcChannelWidget.py" line="1923" />
+      <location filename="../IrcChannelWidget.py" line="1916" />
+      <location filename="../IrcChannelWidget.py" line="1909" />
+      <location filename="../IrcChannelWidget.py" line="1902" />
+      <location filename="../IrcChannelWidget.py" line="1851" />
+      <source>Whois</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1852" />
+      <source>{0} is {1}@{2} ({3}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1903" />
+      <source>{0} is a user on channels: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1910" />
+      <source>{0} has voice on channels: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1917" />
+      <source>{0} is a halfop on channels: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1924" />
+      <source>{0} is an operator on channels: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1931" />
+      <source>{0} is owner of channels: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1938" />
+      <source>{0} is admin on channels: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1961" />
+      <source>{0} is online via {1} ({2}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1984" />
+      <source>{0} is an IRC Operator.</source>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2017" />
+      <source>%n day(s)</source>
+      <translation type="unfinished">
+        <numerusform />
+      </translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2037" />
+      <location filename="../IrcChannelWidget.py" line="2018" />
+      <source>%n hour(s)</source>
+      <translation type="unfinished">
+        <numerusform />
+      </translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2049" />
+      <location filename="../IrcChannelWidget.py" line="2038" />
+      <location filename="../IrcChannelWidget.py" line="2019" />
+      <source>%n minute(s)</source>
+      <translation type="unfinished">
+        <numerusform />
+      </translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2050" />
+      <location filename="../IrcChannelWidget.py" line="2039" />
+      <location filename="../IrcChannelWidget.py" line="2020" />
+      <source>%n second(s)</source>
+      <translation type="unfinished">
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2023" />
+      <source>{0} has been idle for {1}, {2}, {3}, and {4}.</source>
+      <comment>{0} = name of person, {1} = (x days), {2} = (x hours), {3} = (x minutes), {4} = (x seconds)</comment>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2042" />
+      <source>{0} has been idle for {1}, {2}, and {3}.</source>
+      <comment>{0} = name of person, {1} = (x hours), {2} = (x minutes), {3} = (x seconds)</comment>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2053" />
+      <source>{0} has been idle for {1} and {2}.</source>
+      <comment>{0} = name of person, {1} = (x minutes), {3} = (x seconds)</comment>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2061" />
+      <source>{0} has been idle for %n second(s).</source>
+      <translation type="unfinished">
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2069" />
+      <source>{0} has been online since {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2092" />
+      <source>End of WHOIS list for {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2112" />
+      <source>{0} is an identified user.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2132" />
+      <source>{0} is available for help.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2152" />
+      <source>{0} is logged in as {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2175" />
+      <source>{0} is actually using the host {1} (IP: {2}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2196" />
+      <source>{0} is using a secure connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2217" />
+      <source>{0} is connecting from {1} (IP: {2}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2240" />
+      <source>Edit Channel Topic</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2241" />
+      <source>Enter the topic for this channel:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Press to change the topic</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Shows the list of users</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Shows the channel messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Enter a message, send by pressing Return or Enter</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcExtensionPlugin</name>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="190" />
+      <location filename="../../PluginExtensionIrc.py" line="186" />
+      <location filename="../../PluginExtensionIrc.py" line="71" />
+      <source>IRC</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="191" />
+      <source>&amp;IRC</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="192" />
+      <source>Ctrl+Alt+Shift+I</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="198" />
+      <source>Switch the input focus to the IRC window.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="201" />
+      <source>&lt;b&gt;Activate IRC&lt;/b&gt;&lt;p&gt;This switches the input focus to the IRC window.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcIdentitiesEditDialog</name>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>IRC Identities</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Identity:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Select the identity to work on</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to add a new identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to copy the selected identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to rename the selected identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to delete the selected identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>General</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Real Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the real name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Nick Names</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter a nick name to add</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to add the entered nick name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to delete the selected nick name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to move the selected nick name up</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to move the selected nick name down</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Auto Identify</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Service:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the name of the service to identify against</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Service name can be &lt;b&gt;&lt;i&gt;nickserv&lt;/i&gt;&lt;/b&gt; or a network-dependent name such as &lt;b&gt;&lt;i&gt;nickserv@services.dal.net&lt;/i&gt;&lt;/b&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="506" />
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to show the password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Away</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Select to mark the current position in the chat, when you send an AWAY command.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Mark the current position in chat windows when going away</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Away Message:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the message to be sent when going away</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Advanced</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Ident:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the identity to be used to log-on to the server</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Reason for Quit:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter a message to be sent when quitting</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Reason for Part:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter message to be sent when leaving a channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="206" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="188" />
+      <source>Edit Identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="189" />
+      <source>The identity must contain at least one nick name.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="207" />
+      <source>The identity must have a real name.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="259" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="240" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="230" />
+      <source>Add Identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="315" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="273" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="231" />
+      <source>Identity Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="326" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="284" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="241" />
+      <source>An identity named &lt;b&gt;{0}&lt;/b&gt; already exists. You must provide a different name.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="343" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="302" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="260" />
+      <source>The identity has to have a name.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="342" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="301" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="283" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="272" />
+      <source>Copy Identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="325" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="314" />
+      <source>Rename Identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="366" />
+      <source>This identity is in use. If you remove it, the network settings using it will fall back to the default identity. Should it be deleted anyway?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="372" />
+      <source>Do you really want to delete all information for this identity?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="377" />
+      <source>Delete Identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="502" />
+      <source>Press to hide the password</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcIdentity</name>
+    <message>
+      <location filename="../IrcNetworkManager.py" line="26" />
+      <source>Default Identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkManager.py" line="30" />
+      <source>Gone away for now.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkManager.py" line="32" />
+      <location filename="../IrcNetworkManager.py" line="31" />
+      <source>IRC for eric IDE</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcNetworkEditDialog</name>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>IRC Network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Network Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Enter the name of the IRC network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Identity:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Select the identity to be used for the IRC network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to edit the identities</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Server:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to edit the server configuration</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Channels:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Join Automatically</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to add a new channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to edit the selected channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to delete the selected channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Shows the name of the server</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="261" />
+      <location filename="../IrcNetworkEditDialog.py" line="255" />
+      <location filename="../IrcNetworkEditDialog.py" line="70" />
+      <source>Yes</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="263" />
+      <location filename="../IrcNetworkEditDialog.py" line="257" />
+      <location filename="../IrcNetworkEditDialog.py" line="70" />
+      <source>No</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="192" />
+      <source>Delete Channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="193" />
+      <source>Do you really want to delete channel &lt;b&gt;{0}&lt;/b&gt;?</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcNetworkListDialog</name>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>IRC Networks</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to define a new network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;New...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to edit the selected network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;Edit...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to delete the selected network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;Delete</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to  toggle the auto-connect flag of the selected network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;Auto-Connect</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to edit the identities</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Edit &amp;Identities...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="249" />
+      <location filename="../IrcNetworkListDialog.py" line="89" />
+      <source>Yes</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="249" />
+      <location filename="../IrcNetworkListDialog.py" line="89" />
+      <source>No</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="91" />
+      <source>Identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="94" />
+      <source>Server</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="97" />
+      <source>Channels</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="252" />
+      <location filename="../IrcNetworkListDialog.py" line="99" />
+      <source>Auto-Connect</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="170" />
+      <source>Delete Irc Network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="171" />
+      <source>Do you really want to delete IRC network &lt;b&gt;{0}&lt;/b&gt;?</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcNetworkWidget</name>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="354" />
+      <source>Press to disconnect from the network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="359" />
+      <source>Press to connect to the selected network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="450" />
+      <location filename="../IrcNetworkWidget.py" line="433" />
+      <source>Save Messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="435" />
+      <source>HTML Files (*.{0});;Text Files (*.txt);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="451" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="471" />
+      <source>Error saving Messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="472" />
+      <source>&lt;p&gt;The messages contents could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="484" />
+      <source>Copy</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="489" />
+      <source>Cut all</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="494" />
+      <source>Copy all</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="500" />
+      <source>Clear</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="505" />
+      <source>Save</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Shows the network messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Select a network to connect to</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Press to set the user status to AWAY</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Press to edit the networks</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Select a nick name for the channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Enter the channel to join</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Press to join the channel</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcPage</name>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>&lt;b&gt;Configure IRC&lt;/b&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable to show timestamps</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Show Timestamps</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Time Format:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the time format to use</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Date Format</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the date format to use</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show the date in timestamps</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Show Date</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Colors</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Network Messages:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for network messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Nick Names:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for nick names</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Server Messages:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for server messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Own Nick Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for own nick name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Channel Messages:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for channel messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Join Channel:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for join channel messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Error Messages:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for error messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Leave Channel:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for leave channel messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Timestamp:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for timestamps</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Channel Info:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for channel info messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Hyperlink:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for hyperlinks</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable to allow colored text in IRC messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Allow Colored Text in IRC Messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable to show notifications</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Show Notifications</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show a notification for join and leave events</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Join/Leave Event</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show a notification for every message</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Every Message</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show a notification for every mentioning of your nick</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Mentioning of Own Nick</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select this to enable the automatic lookup of user information for joined channels</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable Automatic User Information Lookup (/WHO)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Max. Number of Users in Channel:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enter the maximum numbers of users in a channel allowed for this function</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Update Interval:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enter the user information update interval</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source> s</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Marker</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to mark the current position, when the chat window is hidden</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Mark Current Position When Hidden</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Marker Foreground:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the foreground color for the marker</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the background color for the marker</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Marker Background:</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcServerEditDialog</name>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>IRC Server</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Server:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Enter the host name of the IRC server</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Enter the port number</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Enter the server password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Select to use an SSL encrypted connection</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Use Encrypted Connection (SSL)</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcUserItem</name>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="136" />
+      <source>{0} (ignored)</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcUtilities</name>
+    <message>
+      <location filename="../IrcUtilities.py" line="162" />
+      <source>anonymous</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="163" />
+      <source>ban mask</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="164" />
+      <source>no colors allowed</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="165" />
+      <source>ban exception mask</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="166" />
+      <source>invite only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="167" />
+      <source>password protected</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="168" />
+      <source>user limit</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="169" />
+      <source>moderated</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="170" />
+      <source>no messages from outside</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="171" />
+      <source>private</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="172" />
+      <source>quiet</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="173" />
+      <source>reop channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="174" />
+      <source>secret</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="175" />
+      <source>topic protection</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="176" />
+      <source>invitation mask</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcWidget</name>
+    <message>
+      <location filename="../IrcWidget.py" line="86" />
+      <source>Press to leave the current channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="225" />
+      <source>SSL Connection</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="226" />
+      <source>An encrypted connection to the IRC network was requested but SSL is not available. Please change the server configuration.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="607" />
+      <location filename="../IrcWidget.py" line="572" />
+      <location filename="../IrcWidget.py" line="563" />
+      <location filename="../IrcWidget.py" line="302" />
+      <location filename="../IrcWidget.py" line="297" />
+      <location filename="../IrcWidget.py" line="290" />
+      <location filename="../IrcWidget.py" line="266" />
+      <location filename="../IrcWidget.py" line="252" />
+      <source>Info</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="253" />
+      <source>Looking for server {0} (port {1}) using an SSL encrypted connection...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="267" />
+      <source>Looking for server {0} (port {1})...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="280" />
+      <source>Disconnect from Server</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="281" />
+      <source>&lt;p&gt;Do you really want to disconnect from &lt;b&gt;{0}&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;All channels will be closed.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="291" />
+      <source>Disconnecting from server {0}...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="298" />
+      <source>Disconnecting from network {0}...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="302" />
+      <source>Disconnecting from server.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="563" />
+      <source>Server found,connecting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="572" />
+      <source>Connected,logging in...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="607" />
+      <source>Server disconnected.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="651" />
+      <source>Message Error</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="652" />
+      <source>Unknown message received from server:&lt;br/&gt;{0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1093" />
+      <location filename="../IrcWidget.py" line="1083" />
+      <location filename="../IrcWidget.py" line="1075" />
+      <location filename="../IrcWidget.py" line="1067" />
+      <location filename="../IrcWidget.py" line="695" />
+      <location filename="../IrcWidget.py" line="687" />
+      <source>CTCP</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="688" />
+      <source>Received CTCP-PING response from {0} with latency of {1} ms.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="696" />
+      <source>Received unknown CTCP-{0} response from {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="724" />
+      <source>Notice</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="734" />
+      <source>You have set your personal modes to &lt;b&gt;[{0}]&lt;/b&gt;.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="738" />
+      <source>{0} has changed your personal modes to &lt;b&gt;[{1}]&lt;/b&gt;.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="742" />
+      <source>Mode</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="750" />
+      <source>You have left channel {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="762" />
+      <source>You are now known as {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="768" />
+      <source>User {0} is now known as {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="774" />
+      <source>Received PONG from {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="779" />
+      <source>Server Error</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="817" />
+      <source>Error</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="836" />
+      <source>Welcome</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="838" />
+      <source>Support</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="840" />
+      <source>User</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="842" />
+      <source>MOTD</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="844" />
+      <source>Away</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="846" />
+      <source>Info ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="850" />
+      <source>Message of the day</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="852" />
+      <source>End of message of the day</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="855" />
+      <source>Server {0} (Version {1}), User-Modes: {2}, Channel-Modes: {3}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="860" />
+      <source>Current users on {0}: {1}, max. {2}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="865" />
+      <source>Current users on the network: {0}, max. {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="869" />
+      <source>You are no longer marked as being away.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="871" />
+      <source>You have been marked as being away.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1002" />
+      <location filename="../IrcWidget.py" line="986" />
+      <location filename="../IrcWidget.py" line="934" />
+      <source>SSL Error</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="935" />
+      <source>Connection to server {0} (port {1}) lost while waiting for user response to an SSL error.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="971" />
+      <location filename="../IrcWidget.py" line="964" />
+      <location filename="../IrcWidget.py" line="959" />
+      <location filename="../IrcWidget.py" line="951" />
+      <location filename="../IrcWidget.py" line="943" />
+      <source>Socket Error</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="944" />
+      <source>The host was not found. Please check the host name and port settings.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="952" />
+      <source>The connection was refused by the peer. Please check the host name and port settings.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="959" />
+      <source>The SSL handshake failed.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="965" />
+      <source>The following network error occurred:&lt;br/&gt;{0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="971" />
+      <source>A network error occurred.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="987" />
+      <source>Could not connect to {0} (port {1}) using an SSL encrypted connection. Either the server does not support SSL (did you use the correct port?) or you rejected the certificate.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1003" />
+      <source>The SSL certificate for the server {0} (port {1}) failed the authenticity check. SSL errors were accepted by you.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1068" />
+      <source>Received Version request from {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1076" />
+      <source>Received CTCP-PING request from {0}, sending answer.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1084" />
+      <source>Received CTCP-CLIENTINFO request from {0}, sending answer.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1094" />
+      <source>Received unknown CTCP-{0} request from {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1110" />
+      <source>{0} ({1})</source>
+      <comment>channel name, users count</comment>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1152" />
+      <location filename="../IrcWidget.py" line="1132" />
+      <source>Critical</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1133" />
+      <source>No nickname acceptable to the server configured for &lt;b&gt;{0}&lt;/b&gt;. Disconnecting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1152" />
+      <source>The given nickname is already in use.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.ui" line="0" />
+      <source>Channels</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.ui" line="0" />
+      <source>Network</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+</TS>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/i18n/irc_en.ts	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,2061 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="en_US">
+  <context>
+    <name>IrcChannelEditDialog</name>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>IRC Channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Enter the channel name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Key:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Enter the channel key/password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Select to join this channel automatically</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Join channel automatically</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcChannelWidget</name>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1685" />
+      <location filename="../IrcChannelWidget.py" line="1620" />
+      <location filename="../IrcChannelWidget.py" line="453" />
+      <source>Send Message</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="454" />
+      <source>Messages starting with a '/' are not allowed in private chats.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="570" />
+      <source>Leave IRC channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="571" />
+      <source>Do you really want to leave the IRC channel &lt;b&gt;{0}&lt;/b&gt;?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="740" />
+      <source>Channel Message</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="747" />
+      <source>Nick mentioned</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="778" />
+      <source>{0} has joined the channel {1} ({2}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="783" />
+      <source>You have joined the channel {0} ({1}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="791" />
+      <source>Join Channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="811" />
+      <source>{0} has left {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="818" />
+      <location filename="../IrcChannelWidget.py" line="815" />
+      <source>{0} has left {1}: {2}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="826" />
+      <source>Leave Channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="846" />
+      <source>{0} has quit {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="849" />
+      <source>{0} has quit {1}: {2}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="857" />
+      <source>Quit</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="878" />
+      <source>You are now known as {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="884" />
+      <source>User {0} is now known as {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="929" />
+      <source>Away</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="930" />
+      <source>{0} is away: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="950" />
+      <source>The channel topic is: "{0}".</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="969" />
+      <source>The topic was set by {0} on {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="992" />
+      <source>Channel URL: {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1017" />
+      <source>password protected ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="1020" />
+      <source>limited to %n user(s)</source>
+      <translation>
+        <numerusform>limited to one user</numerusform>
+        <numerusform>limited to %n users</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1028" />
+      <source>Channel modes: {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1047" />
+      <source>This channel was created on {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1084" />
+      <source>{0} sets the channel mode to 'anonymous'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1088" />
+      <source>{0} removes the 'anonymous' mode from the channel.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1093" />
+      <source>{0} sets a ban on {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1097" />
+      <source>{0} removes the ban on {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1102" />
+      <source>{0} sets the channel mode to 'no colors allowed'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1106" />
+      <source>{0} sets the channel mode to 'allow color codes'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1111" />
+      <source>{0} sets a ban exception on {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1115" />
+      <source>{0} removes the ban exception on {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1120" />
+      <source>{0} sets the channel mode to 'invite only'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1124" />
+      <source>{0} removes the 'invite only' mode from the channel.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1129" />
+      <source>{0} sets the channel key to '{1}'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1133" />
+      <source>{0} removes the channel key.</source>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="1136" />
+      <source>{0} sets the channel limit to %n nick(s).</source>
+      <translation>
+        <numerusform>{0} sets the channel limit to one nick.</numerusform>
+        <numerusform>{0} sets the channel limit to %n nicks.</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1142" />
+      <source>{0} removes the channel limit.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1145" />
+      <source>{0} sets the channel mode to 'moderated'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1149" />
+      <source>{0} sets the channel mode to 'unmoderated'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1154" />
+      <source>{0} sets the channel mode to 'no messages from outside'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1159" />
+      <source>{0} sets the channel mode to 'allow messages from outside'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1165" />
+      <source>{0} sets the channel mode to 'private'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1169" />
+      <source>{0} sets the channel mode to 'public'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1174" />
+      <source>{0} sets the channel mode to 'quiet'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1178" />
+      <source>{0} removes the 'quiet' mode from the channel.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1185" />
+      <source>{0} sets the channel mode to 'secret'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1189" />
+      <source>{0} sets the channel mode to 'visible'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1194" />
+      <source>{0} switches on 'topic protection'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1198" />
+      <source>{0} switches off 'topic protection'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1203" />
+      <source>{0} sets invitation mask {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1207" />
+      <source>{0} removes the invitation mask {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1211" />
+      <source>Mode</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1233" />
+      <source>{0} sets mode for {1}: {2}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1265" />
+      <source>Help</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1318" />
+      <location filename="../IrcChannelWidget.py" line="1308" />
+      <location filename="../IrcChannelWidget.py" line="1300" />
+      <location filename="../IrcChannelWidget.py" line="1292" />
+      <source>CTCP</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1293" />
+      <source>Received Version request from {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1301" />
+      <source>Received CTCP-PING request from {0}, sending answer.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1309" />
+      <source>Received CTCP-CLIENTINFO request from {0}, sending answer.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1319" />
+      <source>Received unknown CTCP-{0} request from {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1419" />
+      <source>--- New From Here ---</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1503" />
+      <location filename="../IrcChannelWidget.py" line="1486" />
+      <source>Save Messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1488" />
+      <source>HTML Files (*.{0});;Text Files (*.txt);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1504" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1524" />
+      <source>Error saving Messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1525" />
+      <source>&lt;p&gt;The messages contents could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1537" />
+      <source>Copy</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1542" />
+      <source>Cut all</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1547" />
+      <source>Copy all</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1553" />
+      <source>Clear</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1558" />
+      <source>Save</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1562" />
+      <source>Mark Current Position</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1565" />
+      <source>Remove Position Marker</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1653" />
+      <location filename="../IrcChannelWidget.py" line="1637" />
+      <location filename="../IrcChannelWidget.py" line="1621" />
+      <source>Enter the message to be sent:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1688" />
+      <location filename="../IrcChannelWidget.py" line="1636" />
+      <source>Send Query</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1691" />
+      <location filename="../IrcChannelWidget.py" line="1652" />
+      <source>Send Notice</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1678" />
+      <source>Who Is</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1681" />
+      <source>Private Chat</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1695" />
+      <source>Send Ping</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1698" />
+      <source>Ignore User</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1702" />
+      <source>Refresh</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1826" />
+      <location filename="../IrcChannelWidget.py" line="1800" />
+      <source>Who</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1801" />
+      <source>End of WHO list for {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1824" />
+      <source> (Away)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1827" />
+      <source>{0} is {1}@{2} ({3}){4}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2216" />
+      <location filename="../IrcChannelWidget.py" line="2195" />
+      <location filename="../IrcChannelWidget.py" line="2174" />
+      <location filename="../IrcChannelWidget.py" line="2151" />
+      <location filename="../IrcChannelWidget.py" line="2131" />
+      <location filename="../IrcChannelWidget.py" line="2111" />
+      <location filename="../IrcChannelWidget.py" line="2091" />
+      <location filename="../IrcChannelWidget.py" line="2068" />
+      <location filename="../IrcChannelWidget.py" line="2060" />
+      <location filename="../IrcChannelWidget.py" line="2052" />
+      <location filename="../IrcChannelWidget.py" line="2041" />
+      <location filename="../IrcChannelWidget.py" line="2022" />
+      <location filename="../IrcChannelWidget.py" line="1988" />
+      <location filename="../IrcChannelWidget.py" line="1983" />
+      <location filename="../IrcChannelWidget.py" line="1960" />
+      <location filename="../IrcChannelWidget.py" line="1937" />
+      <location filename="../IrcChannelWidget.py" line="1930" />
+      <location filename="../IrcChannelWidget.py" line="1923" />
+      <location filename="../IrcChannelWidget.py" line="1916" />
+      <location filename="../IrcChannelWidget.py" line="1909" />
+      <location filename="../IrcChannelWidget.py" line="1902" />
+      <location filename="../IrcChannelWidget.py" line="1851" />
+      <source>Whois</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1852" />
+      <source>{0} is {1}@{2} ({3}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1903" />
+      <source>{0} is a user on channels: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1910" />
+      <source>{0} has voice on channels: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1917" />
+      <source>{0} is a halfop on channels: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1924" />
+      <source>{0} is an operator on channels: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1931" />
+      <source>{0} is owner of channels: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1938" />
+      <source>{0} is admin on channels: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1961" />
+      <source>{0} is online via {1} ({2}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1984" />
+      <source>{0} is an IRC Operator.</source>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2017" />
+      <source>%n day(s)</source>
+      <translation>
+        <numerusform>1 day</numerusform>
+        <numerusform>%n days</numerusform>
+      </translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2037" />
+      <location filename="../IrcChannelWidget.py" line="2018" />
+      <source>%n hour(s)</source>
+      <translation>
+        <numerusform>1 hour</numerusform>
+        <numerusform>%n hours</numerusform>
+      </translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2049" />
+      <location filename="../IrcChannelWidget.py" line="2038" />
+      <location filename="../IrcChannelWidget.py" line="2019" />
+      <source>%n minute(s)</source>
+      <translation>
+        <numerusform>1 minute</numerusform>
+        <numerusform>%n minutes</numerusform>
+      </translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2050" />
+      <location filename="../IrcChannelWidget.py" line="2039" />
+      <location filename="../IrcChannelWidget.py" line="2020" />
+      <source>%n second(s)</source>
+      <translation>
+        <numerusform>1 seconds</numerusform>
+        <numerusform>%n seconds</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2023" />
+      <source>{0} has been idle for {1}, {2}, {3}, and {4}.</source>
+      <comment>{0} = name of person, {1} = (x days), {2} = (x hours), {3} = (x minutes), {4} = (x seconds)</comment>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2042" />
+      <source>{0} has been idle for {1}, {2}, and {3}.</source>
+      <comment>{0} = name of person, {1} = (x hours), {2} = (x minutes), {3} = (x seconds)</comment>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2053" />
+      <source>{0} has been idle for {1} and {2}.</source>
+      <comment>{0} = name of person, {1} = (x minutes), {3} = (x seconds)</comment>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2061" />
+      <source>{0} has been idle for %n second(s).</source>
+      <translation>
+        <numerusform>{0} has been idle for 1 second.</numerusform>
+        <numerusform>{0} has been idle for %n seconds.</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2069" />
+      <source>{0} has been online since {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2092" />
+      <source>End of WHOIS list for {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2112" />
+      <source>{0} is an identified user.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2132" />
+      <source>{0} is available for help.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2152" />
+      <source>{0} is logged in as {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2175" />
+      <source>{0} is actually using the host {1} (IP: {2}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2196" />
+      <source>{0} is using a secure connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2217" />
+      <source>{0} is connecting from {1} (IP: {2}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2240" />
+      <source>Edit Channel Topic</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2241" />
+      <source>Enter the topic for this channel:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Press to change the topic</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Shows the list of users</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Shows the channel messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Enter a message, send by pressing Return or Enter</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcExtensionPlugin</name>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="190" />
+      <location filename="../../PluginExtensionIrc.py" line="186" />
+      <location filename="../../PluginExtensionIrc.py" line="71" />
+      <source>IRC</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="191" />
+      <source>&amp;IRC</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="192" />
+      <source>Ctrl+Alt+Shift+I</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="198" />
+      <source>Switch the input focus to the IRC window.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="201" />
+      <source>&lt;b&gt;Activate IRC&lt;/b&gt;&lt;p&gt;This switches the input focus to the IRC window.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcIdentitiesEditDialog</name>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>IRC Identities</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Identity:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Select the identity to work on</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to add a new identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to copy the selected identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to rename the selected identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to delete the selected identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>General</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Real Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the real name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Nick Names</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter a nick name to add</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to add the entered nick name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to delete the selected nick name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to move the selected nick name up</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to move the selected nick name down</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Auto Identify</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Service:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the name of the service to identify against</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Service name can be &lt;b&gt;&lt;i&gt;nickserv&lt;/i&gt;&lt;/b&gt; or a network-dependent name such as &lt;b&gt;&lt;i&gt;nickserv@services.dal.net&lt;/i&gt;&lt;/b&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="506" />
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to show the password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Away</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Select to mark the current position in the chat, when you send an AWAY command.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Mark the current position in chat windows when going away</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Away Message:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the message to be sent when going away</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Advanced</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Ident:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the identity to be used to log-on to the server</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Reason for Quit:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter a message to be sent when quitting</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Reason for Part:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter message to be sent when leaving a channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="206" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="188" />
+      <source>Edit Identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="189" />
+      <source>The identity must contain at least one nick name.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="207" />
+      <source>The identity must have a real name.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="259" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="240" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="230" />
+      <source>Add Identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="315" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="273" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="231" />
+      <source>Identity Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="326" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="284" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="241" />
+      <source>An identity named &lt;b&gt;{0}&lt;/b&gt; already exists. You must provide a different name.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="343" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="302" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="260" />
+      <source>The identity has to have a name.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="342" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="301" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="283" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="272" />
+      <source>Copy Identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="325" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="314" />
+      <source>Rename Identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="366" />
+      <source>This identity is in use. If you remove it, the network settings using it will fall back to the default identity. Should it be deleted anyway?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="372" />
+      <source>Do you really want to delete all information for this identity?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="377" />
+      <source>Delete Identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="502" />
+      <source>Press to hide the password</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcIdentity</name>
+    <message>
+      <location filename="../IrcNetworkManager.py" line="26" />
+      <source>Default Identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkManager.py" line="30" />
+      <source>Gone away for now.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkManager.py" line="32" />
+      <location filename="../IrcNetworkManager.py" line="31" />
+      <source>IRC for eric IDE</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcNetworkEditDialog</name>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>IRC Network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Network Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Enter the name of the IRC network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Identity:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Select the identity to be used for the IRC network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to edit the identities</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Server:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to edit the server configuration</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Channels:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Join Automatically</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to add a new channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to edit the selected channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to delete the selected channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Shows the name of the server</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="261" />
+      <location filename="../IrcNetworkEditDialog.py" line="255" />
+      <location filename="../IrcNetworkEditDialog.py" line="70" />
+      <source>Yes</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="263" />
+      <location filename="../IrcNetworkEditDialog.py" line="257" />
+      <location filename="../IrcNetworkEditDialog.py" line="70" />
+      <source>No</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="192" />
+      <source>Delete Channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="193" />
+      <source>Do you really want to delete channel &lt;b&gt;{0}&lt;/b&gt;?</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcNetworkListDialog</name>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>IRC Networks</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to define a new network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;New...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to edit the selected network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;Edit...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to delete the selected network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;Delete</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to  toggle the auto-connect flag of the selected network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;Auto-Connect</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to edit the identities</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Edit &amp;Identities...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="249" />
+      <location filename="../IrcNetworkListDialog.py" line="89" />
+      <source>Yes</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="249" />
+      <location filename="../IrcNetworkListDialog.py" line="89" />
+      <source>No</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="91" />
+      <source>Identity</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="94" />
+      <source>Server</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="97" />
+      <source>Channels</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="252" />
+      <location filename="../IrcNetworkListDialog.py" line="99" />
+      <source>Auto-Connect</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="170" />
+      <source>Delete Irc Network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="171" />
+      <source>Do you really want to delete IRC network &lt;b&gt;{0}&lt;/b&gt;?</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcNetworkWidget</name>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="354" />
+      <source>Press to disconnect from the network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="359" />
+      <source>Press to connect to the selected network</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="450" />
+      <location filename="../IrcNetworkWidget.py" line="433" />
+      <source>Save Messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="435" />
+      <source>HTML Files (*.{0});;Text Files (*.txt);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="451" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="471" />
+      <source>Error saving Messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="472" />
+      <source>&lt;p&gt;The messages contents could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="484" />
+      <source>Copy</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="489" />
+      <source>Cut all</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="494" />
+      <source>Copy all</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="500" />
+      <source>Clear</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="505" />
+      <source>Save</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Shows the network messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Select a network to connect to</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Press to set the user status to AWAY</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Press to edit the networks</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Select a nick name for the channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Enter the channel to join</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Press to join the channel</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcPage</name>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>&lt;b&gt;Configure IRC&lt;/b&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable to show timestamps</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Show Timestamps</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Time Format:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the time format to use</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Date Format</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the date format to use</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show the date in timestamps</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Show Date</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Colors</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Network Messages:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for network messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Nick Names:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for nick names</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Server Messages:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for server messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Own Nick Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for own nick name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Channel Messages:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for channel messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Join Channel:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for join channel messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Error Messages:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for error messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Leave Channel:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for leave channel messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Timestamp:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for timestamps</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Channel Info:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for channel info messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Hyperlink:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for hyperlinks</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable to allow colored text in IRC messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Allow Colored Text in IRC Messages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable to show notifications</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Show Notifications</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show a notification for join and leave events</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Join/Leave Event</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show a notification for every message</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Every Message</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show a notification for every mentioning of your nick</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Mentioning of Own Nick</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select this to enable the automatic lookup of user information for joined channels</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable Automatic User Information Lookup (/WHO)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Max. Number of Users in Channel:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enter the maximum numbers of users in a channel allowed for this function</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Update Interval:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enter the user information update interval</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source> s</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Marker</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to mark the current position, when the chat window is hidden</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Mark Current Position When Hidden</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Marker Foreground:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the foreground color for the marker</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the background color for the marker</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Marker Background:</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcServerEditDialog</name>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>IRC Server</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Server:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Enter the host name of the IRC server</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Enter the port number</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Enter the server password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Select to use an SSL encrypted connection</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Use Encrypted Connection (SSL)</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcUserItem</name>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="136" />
+      <source>{0} (ignored)</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcUtilities</name>
+    <message>
+      <location filename="../IrcUtilities.py" line="162" />
+      <source>anonymous</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="163" />
+      <source>ban mask</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="164" />
+      <source>no colors allowed</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="165" />
+      <source>ban exception mask</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="166" />
+      <source>invite only</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="167" />
+      <source>password protected</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="168" />
+      <source>user limit</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="169" />
+      <source>moderated</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="170" />
+      <source>no messages from outside</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="171" />
+      <source>private</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="172" />
+      <source>quiet</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="173" />
+      <source>reop channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="174" />
+      <source>secret</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="175" />
+      <source>topic protection</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="176" />
+      <source>invitation mask</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>IrcWidget</name>
+    <message>
+      <location filename="../IrcWidget.py" line="86" />
+      <source>Press to leave the current channel</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="225" />
+      <source>SSL Connection</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="226" />
+      <source>An encrypted connection to the IRC network was requested but SSL is not available. Please change the server configuration.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="607" />
+      <location filename="../IrcWidget.py" line="572" />
+      <location filename="../IrcWidget.py" line="563" />
+      <location filename="../IrcWidget.py" line="302" />
+      <location filename="../IrcWidget.py" line="297" />
+      <location filename="../IrcWidget.py" line="290" />
+      <location filename="../IrcWidget.py" line="266" />
+      <location filename="../IrcWidget.py" line="252" />
+      <source>Info</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="253" />
+      <source>Looking for server {0} (port {1}) using an SSL encrypted connection...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="267" />
+      <source>Looking for server {0} (port {1})...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="280" />
+      <source>Disconnect from Server</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="281" />
+      <source>&lt;p&gt;Do you really want to disconnect from &lt;b&gt;{0}&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;All channels will be closed.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="291" />
+      <source>Disconnecting from server {0}...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="298" />
+      <source>Disconnecting from network {0}...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="302" />
+      <source>Disconnecting from server.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="563" />
+      <source>Server found,connecting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="572" />
+      <source>Connected,logging in...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="607" />
+      <source>Server disconnected.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="651" />
+      <source>Message Error</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="652" />
+      <source>Unknown message received from server:&lt;br/&gt;{0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1093" />
+      <location filename="../IrcWidget.py" line="1083" />
+      <location filename="../IrcWidget.py" line="1075" />
+      <location filename="../IrcWidget.py" line="1067" />
+      <location filename="../IrcWidget.py" line="695" />
+      <location filename="../IrcWidget.py" line="687" />
+      <source>CTCP</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="688" />
+      <source>Received CTCP-PING response from {0} with latency of {1} ms.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="696" />
+      <source>Received unknown CTCP-{0} response from {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="724" />
+      <source>Notice</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="734" />
+      <source>You have set your personal modes to &lt;b&gt;[{0}]&lt;/b&gt;.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="738" />
+      <source>{0} has changed your personal modes to &lt;b&gt;[{1}]&lt;/b&gt;.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="742" />
+      <source>Mode</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="750" />
+      <source>You have left channel {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="762" />
+      <source>You are now known as {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="768" />
+      <source>User {0} is now known as {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="774" />
+      <source>Received PONG from {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="779" />
+      <source>Server Error</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="817" />
+      <source>Error</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="836" />
+      <source>Welcome</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="838" />
+      <source>Support</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="840" />
+      <source>User</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="842" />
+      <source>MOTD</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="844" />
+      <source>Away</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="846" />
+      <source>Info ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="850" />
+      <source>Message of the day</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="852" />
+      <source>End of message of the day</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="855" />
+      <source>Server {0} (Version {1}), User-Modes: {2}, Channel-Modes: {3}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="860" />
+      <source>Current users on {0}: {1}, max. {2}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="865" />
+      <source>Current users on the network: {0}, max. {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="869" />
+      <source>You are no longer marked as being away.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="871" />
+      <source>You have been marked as being away.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1002" />
+      <location filename="../IrcWidget.py" line="986" />
+      <location filename="../IrcWidget.py" line="934" />
+      <source>SSL Error</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="935" />
+      <source>Connection to server {0} (port {1}) lost while waiting for user response to an SSL error.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="971" />
+      <location filename="../IrcWidget.py" line="964" />
+      <location filename="../IrcWidget.py" line="959" />
+      <location filename="../IrcWidget.py" line="951" />
+      <location filename="../IrcWidget.py" line="943" />
+      <source>Socket Error</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="944" />
+      <source>The host was not found. Please check the host name and port settings.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="952" />
+      <source>The connection was refused by the peer. Please check the host name and port settings.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="959" />
+      <source>The SSL handshake failed.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="965" />
+      <source>The following network error occurred:&lt;br/&gt;{0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="971" />
+      <source>A network error occurred.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="987" />
+      <source>Could not connect to {0} (port {1}) using an SSL encrypted connection. Either the server does not support SSL (did you use the correct port?) or you rejected the certificate.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1003" />
+      <source>The SSL certificate for the server {0} (port {1}) failed the authenticity check. SSL errors were accepted by you.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1068" />
+      <source>Received Version request from {0}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1076" />
+      <source>Received CTCP-PING request from {0}, sending answer.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1084" />
+      <source>Received CTCP-CLIENTINFO request from {0}, sending answer.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1094" />
+      <source>Received unknown CTCP-{0} request from {1}.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1110" />
+      <source>{0} ({1})</source>
+      <comment>channel name, users count</comment>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1152" />
+      <location filename="../IrcWidget.py" line="1132" />
+      <source>Critical</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1133" />
+      <source>No nickname acceptable to the server configured for &lt;b&gt;{0}&lt;/b&gt;. Disconnecting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1152" />
+      <source>The given nickname is already in use.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.ui" line="0" />
+      <source>Channels</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../IrcWidget.ui" line="0" />
+      <source>Network</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+</TS>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/i18n/irc_es.ts	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,2061 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="es_ES">
+  <context>
+    <name>IrcChannelEditDialog</name>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>IRC Channel</source>
+      <translation>Canal IRC</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Name:</source>
+      <translation>Nombre:</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Enter the channel name</source>
+      <translation>Introduzca el nombre del canal</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Key:</source>
+      <translation>Clave:</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Enter the channel key/password</source>
+      <translation>Introducir la clave/contraseña del canal</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Select to join this channel automatically</source>
+      <translation>Seleccionar para unirse al canal automáticamente</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Join channel automatically</source>
+      <translation>Unirse al canal automáticamente</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcChannelWidget</name>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1685" />
+      <location filename="../IrcChannelWidget.py" line="1620" />
+      <location filename="../IrcChannelWidget.py" line="453" />
+      <source>Send Message</source>
+      <translation>Enviar Mensaje</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="454" />
+      <source>Messages starting with a '/' are not allowed in private chats.</source>
+      <translation>Los mensajes que comienzan con un carácter '/' no están permitidos en chats privados.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="570" />
+      <source>Leave IRC channel</source>
+      <translation>Abandonar el canal IRC</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="571" />
+      <source>Do you really want to leave the IRC channel &lt;b&gt;{0}&lt;/b&gt;?</source>
+      <translation>¿Desea realmente abandonar el canal IRC &lt;b&gt;{0}&lt;/b&gt;?</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="740" />
+      <source>Channel Message</source>
+      <translation>Mensaje en el Canal</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="747" />
+      <source>Nick mentioned</source>
+      <translation>Nick mencionado</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="778" />
+      <source>{0} has joined the channel {1} ({2}).</source>
+      <translation>{0} se ha unido al canal {1} ({2}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="783" />
+      <source>You have joined the channel {0} ({1}).</source>
+      <translation>Usted se ha unido al canal {0} ({1}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="791" />
+      <source>Join Channel</source>
+      <translation>Unirse al Canal</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="811" />
+      <source>{0} has left {1}.</source>
+      <translation>{0} ha abandonado {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="818" />
+      <location filename="../IrcChannelWidget.py" line="815" />
+      <source>{0} has left {1}: {2}.</source>
+      <translation>{0} ha abandonado {1}: {2}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="826" />
+      <source>Leave Channel</source>
+      <translation>Abandonar el Canal</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="846" />
+      <source>{0} has quit {1}.</source>
+      <translation>{0} ha salido de {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="849" />
+      <source>{0} has quit {1}: {2}.</source>
+      <translation>{0} ha salido de {1}: {2}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="857" />
+      <source>Quit</source>
+      <translation>SalirSalir</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="878" />
+      <source>You are now known as {0}.</source>
+      <translation>Usted es conocido como {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="884" />
+      <source>User {0} is now known as {1}.</source>
+      <translation>Usuario {0} es conocido ahora como {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="929" />
+      <source>Away</source>
+      <translation>Ausente</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="930" />
+      <source>{0} is away: {1}</source>
+      <translation>{0} está ausente: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="950" />
+      <source>The channel topic is: "{0}".</source>
+      <translation>El tema del canal es: "{0}".</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="969" />
+      <source>The topic was set by {0} on {1}.</source>
+      <translation>El tema ha sido establecido por {0} en {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="992" />
+      <source>Channel URL: {0}</source>
+      <translation>URL del Canal: {0}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1017" />
+      <source>password protected ({0})</source>
+      <translation>protegido por contraseña ({0})</translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="1020" />
+      <source>limited to %n user(s)</source>
+      <translation>
+        <numerusform>limitado a %n usuario</numerusform>
+        <numerusform>limitado a %n usuarios</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1028" />
+      <source>Channel modes: {0}.</source>
+      <translation>Modos de canal: {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1047" />
+      <source>This channel was created on {0}.</source>
+      <translation>Este canal se creó en {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1084" />
+      <source>{0} sets the channel mode to 'anonymous'.</source>
+      <translation>{0} establece el modo de canal a 'anónimo'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1088" />
+      <source>{0} removes the 'anonymous' mode from the channel.</source>
+      <translation>{0} elimina el modo 'anónimo' del canal.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1093" />
+      <source>{0} sets a ban on {1}.</source>
+      <translation>{0} establece un ban a {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1097" />
+      <source>{0} removes the ban on {1}.</source>
+      <translation>{0} elimina el ban a {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1102" />
+      <source>{0} sets the channel mode to 'no colors allowed'.</source>
+      <translation>{0} establece el modo de canal a 'no se permiten colores'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1106" />
+      <source>{0} sets the channel mode to 'allow color codes'.</source>
+      <translation>{0} establece el modo de canal a 'permitir códigos de color'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1111" />
+      <source>{0} sets a ban exception on {1}.</source>
+      <translation>{0} establece una excepción de ban a {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1115" />
+      <source>{0} removes the ban exception on {1}.</source>
+      <translation>{0} elimina la excepción de ban a {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1120" />
+      <source>{0} sets the channel mode to 'invite only'.</source>
+      <translation>{0} establece el modo de canal a 'invitar solamente'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1124" />
+      <source>{0} removes the 'invite only' mode from the channel.</source>
+      <translation>{0} elimina el modo 'invitar solamente' del canal.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1129" />
+      <source>{0} sets the channel key to '{1}'.</source>
+      <translation>{0} establece la clave de canal a '{1}'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1133" />
+      <source>{0} removes the channel key.</source>
+      <translation>{0} elimina la clave del canal.</translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="1136" />
+      <source>{0} sets the channel limit to %n nick(s).</source>
+      <translation>
+        <numerusform>{0} establece el límite del canal a %n nick.</numerusform>
+        <numerusform>{0} establece el límite del canal a %n nicks.</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1142" />
+      <source>{0} removes the channel limit.</source>
+      <translation>{0} elimina el límite del canal.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1145" />
+      <source>{0} sets the channel mode to 'moderated'.</source>
+      <translation>{0} establece el modo de canal a 'moderado'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1149" />
+      <source>{0} sets the channel mode to 'unmoderated'.</source>
+      <translation>{0} establece el modo de canal a 'no moderado'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1154" />
+      <source>{0} sets the channel mode to 'no messages from outside'.</source>
+      <translation>{0} establece el modo de canal a 'sin mensajes del exterior'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1159" />
+      <source>{0} sets the channel mode to 'allow messages from outside'.</source>
+      <translation>{0} establece el modo de canal a 'permitir mensajes del exterior'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1165" />
+      <source>{0} sets the channel mode to 'private'.</source>
+      <translation>{0} establece el modo de canal a 'privado'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1169" />
+      <source>{0} sets the channel mode to 'public'.</source>
+      <translation>{0} establece el modo de canal a 'público'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1174" />
+      <source>{0} sets the channel mode to 'quiet'.</source>
+      <translation>{0} establece el modo de canal a 'silencioso'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1178" />
+      <source>{0} removes the 'quiet' mode from the channel.</source>
+      <translation>{0} elimina el modo 'silencioso' del canal.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1185" />
+      <source>{0} sets the channel mode to 'secret'.</source>
+      <translation>{0} establece el modo de canal a 'secreto'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1189" />
+      <source>{0} sets the channel mode to 'visible'.</source>
+      <translation>{0} establece el modo de canal a 'visible'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1194" />
+      <source>{0} switches on 'topic protection'.</source>
+      <translation>{0} activa 'tema protegido'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1198" />
+      <source>{0} switches off 'topic protection'.</source>
+      <translation>{0} desactiva 'tema protegido'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1203" />
+      <source>{0} sets invitation mask {1}.</source>
+      <translation>{0} establece máscara de invitación {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1207" />
+      <source>{0} removes the invitation mask {1}.</source>
+      <translation>{0} elimina la máscara de invitación {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1211" />
+      <source>Mode</source>
+      <translation>Modo</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1233" />
+      <source>{0} sets mode for {1}: {2}.</source>
+      <translation>{0} establece el modo para {1}: {2}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1265" />
+      <source>Help</source>
+      <translation>Ayuda</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1318" />
+      <location filename="../IrcChannelWidget.py" line="1308" />
+      <location filename="../IrcChannelWidget.py" line="1300" />
+      <location filename="../IrcChannelWidget.py" line="1292" />
+      <source>CTCP</source>
+      <translation>CTCP</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1293" />
+      <source>Received Version request from {0}.</source>
+      <translation>Recibida Solicitud de Versión desde {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1301" />
+      <source>Received CTCP-PING request from {0}, sending answer.</source>
+      <translation>Recibida solicitud CTCP-PING desde {0}, enviando respuesta.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1309" />
+      <source>Received CTCP-CLIENTINFO request from {0}, sending answer.</source>
+      <translation>Recibida solicitud CTCP-CLIENTINFO desde {0}, enviando respuesta.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1319" />
+      <source>Received unknown CTCP-{0} request from {1}.</source>
+      <translation>Recibida solicitud CTCP desconocida desde {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1419" />
+      <source>--- New From Here ---</source>
+      <translation>--- Nuevo a partir de Aquí ---</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1503" />
+      <location filename="../IrcChannelWidget.py" line="1486" />
+      <source>Save Messages</source>
+      <translation>Guardar Mensajes</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1488" />
+      <source>HTML Files (*.{0});;Text Files (*.txt);;All Files (*)</source>
+      <translation>Archivos HTML (*.{0});;Archivos de Texto (*.txt);;Todos los Archivos (*)</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1504" />
+      <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="../IrcChannelWidget.py" line="1524" />
+      <source>Error saving Messages</source>
+      <translation>Error al guardar Mensajes</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1525" />
+      <source>&lt;p&gt;The messages contents could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Los contenidos de mensajes no se han podido guardar en &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1537" />
+      <source>Copy</source>
+      <translation>Copiar</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1542" />
+      <source>Cut all</source>
+      <translation>Cortar todo</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1547" />
+      <source>Copy all</source>
+      <translation>Copiar todo</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1553" />
+      <source>Clear</source>
+      <translation>Limpiar</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1558" />
+      <source>Save</source>
+      <translation>Guardar</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1562" />
+      <source>Mark Current Position</source>
+      <translation>Marcar Posición Actual</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1565" />
+      <source>Remove Position Marker</source>
+      <translation>Eliminar Posición del Marcador</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1653" />
+      <location filename="../IrcChannelWidget.py" line="1637" />
+      <location filename="../IrcChannelWidget.py" line="1621" />
+      <source>Enter the message to be sent:</source>
+      <translation>Introducir el mensaje a enviar:</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1688" />
+      <location filename="../IrcChannelWidget.py" line="1636" />
+      <source>Send Query</source>
+      <translation>Enviar Consulta</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1691" />
+      <location filename="../IrcChannelWidget.py" line="1652" />
+      <source>Send Notice</source>
+      <translation>Enviar Aviso</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1678" />
+      <source>Who Is</source>
+      <translation>Quien Es</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1681" />
+      <source>Private Chat</source>
+      <translation>Chat Privado</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1695" />
+      <source>Send Ping</source>
+      <translation>Enviar Ping</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1698" />
+      <source>Ignore User</source>
+      <translation>Ignorar Usuario</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1702" />
+      <source>Refresh</source>
+      <translation>Actualizar</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1826" />
+      <location filename="../IrcChannelWidget.py" line="1800" />
+      <source>Who</source>
+      <translation>Quien</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1801" />
+      <source>End of WHO list for {0}.</source>
+      <translation>Fin de lista WHO para {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1824" />
+      <source> (Away)</source>
+      <translation> (No está)</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1827" />
+      <source>{0} is {1}@{2} ({3}){4}</source>
+      <translation>{0} es {1}@{2} ({3}){4}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2216" />
+      <location filename="../IrcChannelWidget.py" line="2195" />
+      <location filename="../IrcChannelWidget.py" line="2174" />
+      <location filename="../IrcChannelWidget.py" line="2151" />
+      <location filename="../IrcChannelWidget.py" line="2131" />
+      <location filename="../IrcChannelWidget.py" line="2111" />
+      <location filename="../IrcChannelWidget.py" line="2091" />
+      <location filename="../IrcChannelWidget.py" line="2068" />
+      <location filename="../IrcChannelWidget.py" line="2060" />
+      <location filename="../IrcChannelWidget.py" line="2052" />
+      <location filename="../IrcChannelWidget.py" line="2041" />
+      <location filename="../IrcChannelWidget.py" line="2022" />
+      <location filename="../IrcChannelWidget.py" line="1988" />
+      <location filename="../IrcChannelWidget.py" line="1983" />
+      <location filename="../IrcChannelWidget.py" line="1960" />
+      <location filename="../IrcChannelWidget.py" line="1937" />
+      <location filename="../IrcChannelWidget.py" line="1930" />
+      <location filename="../IrcChannelWidget.py" line="1923" />
+      <location filename="../IrcChannelWidget.py" line="1916" />
+      <location filename="../IrcChannelWidget.py" line="1909" />
+      <location filename="../IrcChannelWidget.py" line="1902" />
+      <location filename="../IrcChannelWidget.py" line="1851" />
+      <source>Whois</source>
+      <translation>Whois</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1852" />
+      <source>{0} is {1}@{2} ({3}).</source>
+      <translation>{0} es {1}@{2} ({3}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1903" />
+      <source>{0} is a user on channels: {1}</source>
+      <translation>{0} es un usuario en los canales: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1910" />
+      <source>{0} has voice on channels: {1}</source>
+      <translation>{0} tiene voz en los canales: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1917" />
+      <source>{0} is a halfop on channels: {1}</source>
+      <translation>{0} es un halfop en los canales: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1924" />
+      <source>{0} is an operator on channels: {1}</source>
+      <translation>{0} is un operador en los canales: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1931" />
+      <source>{0} is owner of channels: {1}</source>
+      <translation>{0} es propietario de los canales: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1938" />
+      <source>{0} is admin on channels: {1}</source>
+      <translation>{0} es un admin en los canales: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1961" />
+      <source>{0} is online via {1} ({2}).</source>
+      <translation>{0} está online vía {1} ({2}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1984" />
+      <source>{0} is an IRC Operator.</source>
+      <translation>{0} es un Operador IRC.</translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2017" />
+      <source>%n day(s)</source>
+      <translation>
+        <numerusform>%n día</numerusform>
+        <numerusform>%n días</numerusform>
+      </translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2037" />
+      <location filename="../IrcChannelWidget.py" line="2018" />
+      <source>%n hour(s)</source>
+      <translation>
+        <numerusform>%n hora</numerusform>
+        <numerusform>%n horas</numerusform>
+      </translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2049" />
+      <location filename="../IrcChannelWidget.py" line="2038" />
+      <location filename="../IrcChannelWidget.py" line="2019" />
+      <source>%n minute(s)</source>
+      <translation>
+        <numerusform>%n minuto</numerusform>
+        <numerusform>%n minutos</numerusform>
+      </translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2050" />
+      <location filename="../IrcChannelWidget.py" line="2039" />
+      <location filename="../IrcChannelWidget.py" line="2020" />
+      <source>%n second(s)</source>
+      <translation>
+        <numerusform>%n segundo</numerusform>
+        <numerusform>%n segundos</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2023" />
+      <source>{0} has been idle for {1}, {2}, {3}, and {4}.</source>
+      <comment>{0} = name of person, {1} = (x days), {2} = (x hours), {3} = (x minutes), {4} = (x seconds)</comment>
+      <translation>{0} no ha mostrado actividad durante {1}, {2}, {3}, y {4}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2042" />
+      <source>{0} has been idle for {1}, {2}, and {3}.</source>
+      <comment>{0} = name of person, {1} = (x hours), {2} = (x minutes), {3} = (x seconds)</comment>
+      <translation>{0} no ha mostrado actividad durante {1}, {2}, y {3}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2053" />
+      <source>{0} has been idle for {1} and {2}.</source>
+      <comment>{0} = name of person, {1} = (x minutes), {3} = (x seconds)</comment>
+      <translation>{0} no ha mostrado actividad durante {1}, y {2}.</translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2061" />
+      <source>{0} has been idle for %n second(s).</source>
+      <translation>
+        <numerusform>{0} no ha mostrado actividad durante %n segundo.</numerusform>
+        <numerusform>{0} no ha mostrado actividad durante %n segundos.</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2069" />
+      <source>{0} has been online since {1}.</source>
+      <translation>{0} ha estado online desde {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2092" />
+      <source>End of WHOIS list for {0}.</source>
+      <translation>Fin de lista WHOIS para {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2112" />
+      <source>{0} is an identified user.</source>
+      <translation>{0} is an usuario identificado.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2132" />
+      <source>{0} is available for help.</source>
+      <translation>{0} está disponible para ayudar.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2152" />
+      <source>{0} is logged in as {1}.</source>
+      <translation>{0} está conectado como {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2175" />
+      <source>{0} is actually using the host {1} (IP: {2}).</source>
+      <translation>{0} está utilizando en realidad el host {1} (IP: {2}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2196" />
+      <source>{0} is using a secure connection.</source>
+      <translation>{0} está utilizando una conexión segura.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2217" />
+      <source>{0} is connecting from {1} (IP: {2}).</source>
+      <translation>{0} está conectando desde {1} (IP: {2}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2240" />
+      <source>Edit Channel Topic</source>
+      <translation>Editar Tema del Canal</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2241" />
+      <source>Enter the topic for this channel:</source>
+      <translation>Introducir el tema para este canal:</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Press to change the topic</source>
+      <translation>Pulsar para cambiar el tema</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Shows the list of users</source>
+      <translation>Muestra la lista de usuarios</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Shows the channel messages</source>
+      <translation>Muestra los mensajes del canal</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Enter a message, send by pressing Return or Enter</source>
+      <translation>Introducir un mensaje, enviar pulsando Return o Enter</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcExtensionPlugin</name>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="190" />
+      <location filename="../../PluginExtensionIrc.py" line="186" />
+      <location filename="../../PluginExtensionIrc.py" line="71" />
+      <source>IRC</source>
+      <translation>IRC</translation>
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="191" />
+      <source>&amp;IRC</source>
+      <translation>&amp;IRC</translation>
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="192" />
+      <source>Ctrl+Alt+Shift+I</source>
+      <translation>Ctrl+Alt+Shift+I</translation>
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="198" />
+      <source>Switch the input focus to the IRC window.</source>
+      <translation>Cambiar el foco de input a la ventana de IRC.</translation>
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="201" />
+      <source>&lt;b&gt;Activate IRC&lt;/b&gt;&lt;p&gt;This switches the input focus to the IRC window.&lt;/p&gt;</source>
+      <translation>&lt;b&gt;Activar IRC&lt;/b&gt;&lt;p&gt;Cambia el foco de input a la ventana de IRC.&lt;/p&gt;</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcIdentitiesEditDialog</name>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>IRC Identities</source>
+      <translation>Identidades IRC</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Identity:</source>
+      <translation>Identidad:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Select the identity to work on</source>
+      <translation>Seleccionar la identidad con la que trabajar</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to add a new identity</source>
+      <translation>Pulsar para añadir una identidad nueva</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to copy the selected identity</source>
+      <translation>Pulsar para copiar la identidad seleccionada</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to rename the selected identity</source>
+      <translation>Pulsar para renombrar la identidad seleccionada</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to delete the selected identity</source>
+      <translation>Pulsar para borrar la identidad seleccionada</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>General</source>
+      <translation>General</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Real Name:</source>
+      <translation>Nombre Real:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the real name</source>
+      <translation>Introduzca el nombre real</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Nick Names</source>
+      <translation>Sobrenombres (nicknames)</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter a nick name to add</source>
+      <translation>Seleccionar un sobrenombre para añadir</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to add the entered nick name</source>
+      <translation>Pulsar para añadir el sobrenombre introducido</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to delete the selected nick name</source>
+      <translation>Pulsar para borrar el sobrenombre seleccionado</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to move the selected nick name up</source>
+      <translation>Pulsar para mover hacia arriba el sobrenombre seleccionado</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to move the selected nick name down</source>
+      <translation>Pulsar para mover hacia abajo el sobrenombre seleccionado</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Auto Identify</source>
+      <translation>Autoidentificar</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Service:</source>
+      <translation>Servicio:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the name of the service to identify against</source>
+      <translation>IIntroducir el nombre del servicio contra el que identificarse</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Service name can be &lt;b&gt;&lt;i&gt;nickserv&lt;/i&gt;&lt;/b&gt; or a network-dependent name such as &lt;b&gt;&lt;i&gt;nickserv@services.dal.net&lt;/i&gt;&lt;/b&gt;</source>
+      <translation>El nombre de Servicio puede ser &lt;b&gt;&lt;i&gt;nickserv&lt;/i&gt;&lt;/b&gt; or un nombre dependiente de red tal como &lt;b&gt;&lt;i&gt;nickserv@services.dal.net&lt;/i&gt;&lt;/b&gt;</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation>Contraseña:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the password</source>
+      <translation>Introducir la contraseña</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="506" />
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to show the password</source>
+      <translation>Pulsar para mostrar la contraseña</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Away</source>
+      <translation>Ausente</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Select to mark the current position in the chat, when you send an AWAY command.</source>
+      <translation>Seleccionar para marcar la posición actual en el chat cuando se envíe un comando AWAY.</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Mark the current position in chat windows when going away</source>
+      <translation>Marcar la posición actual en la ventana de chat al ausentarse</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Away Message:</source>
+      <translation>Mensaje de Ausencia:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the message to be sent when going away</source>
+      <translation>Introducir el mensaje para enviar al ausentarse</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Advanced</source>
+      <translation>Avanzado</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Ident:</source>
+      <translation>Ident:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the identity to be used to log-on to the server</source>
+      <translation>Introducir la identidad para usar al conectarse al servidor</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Reason for Quit:</source>
+      <translation>Razón para Salir:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter a message to be sent when quitting</source>
+      <translation>Introducir un mensaje para enviar al salir</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Reason for Part:</source>
+      <translation>Razón para Irse:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter message to be sent when leaving a channel</source>
+      <translation>Introducir el mensaje para enviar al abandonar un canal</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="206" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="188" />
+      <source>Edit Identity</source>
+      <translation>Editar Identidad</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="189" />
+      <source>The identity must contain at least one nick name.</source>
+      <translation>La identidad debe contener al menos un sobrenombre.</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="207" />
+      <source>The identity must have a real name.</source>
+      <translation>La identidad debe tener un nombre real.</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="259" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="240" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="230" />
+      <source>Add Identity</source>
+      <translation>Añadir Identidad</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="315" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="273" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="231" />
+      <source>Identity Name:</source>
+      <translation>Nombre de Identidad:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="326" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="284" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="241" />
+      <source>An identity named &lt;b&gt;{0}&lt;/b&gt; already exists. You must provide a different name.</source>
+      <translation>Una identidad nombrada &lt;b&gt;{0}&lt;/b&gt; ya existe. Debe proporcionarse un nombre distinto.</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="343" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="302" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="260" />
+      <source>The identity has to have a name.</source>
+      <translation>La identidad tiene que tener un nombre.</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="342" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="301" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="283" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="272" />
+      <source>Copy Identity</source>
+      <translation>Copiar Identidad</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="325" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="314" />
+      <source>Rename Identity</source>
+      <translation>Renombrar Identidad</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="366" />
+      <source>This identity is in use. If you remove it, the network settings using it will fall back to the default identity. Should it be deleted anyway?</source>
+      <translation>Esta identidad está en uso. Si es eliminada, los ajustes de red que la están utilizando recurrirán a la identidad por defecto. ¿Borrarla de todos modos?</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="372" />
+      <source>Do you really want to delete all information for this identity?</source>
+      <translation>¿Realmente quiere borrar estas toda la información para esta identidad?</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="377" />
+      <source>Delete Identity</source>
+      <translation>Borrar Identidad</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="502" />
+      <source>Press to hide the password</source>
+      <translation>Pulsar para ocultar la contraseña</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcIdentity</name>
+    <message>
+      <location filename="../IrcNetworkManager.py" line="26" />
+      <source>Default Identity</source>
+      <translation>Identidad por Defecto</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkManager.py" line="30" />
+      <source>Gone away for now.</source>
+      <translation>Ausente por ahora.</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkManager.py" line="32" />
+      <location filename="../IrcNetworkManager.py" line="31" />
+      <source>IRC for eric IDE</source>
+      <translation>IRC para eric IDE</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcNetworkEditDialog</name>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>IRC Network</source>
+      <translation>Red IRC</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Network Name:</source>
+      <translation>Nombre de Red:</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Enter the name of the IRC network</source>
+      <translation>Introducir el nombre de la red IRC</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Identity:</source>
+      <translation>Identidad:</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Select the identity to be used for the IRC network</source>
+      <translation>Seleccionar la identidad a utilizar para la erd IRC</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to edit the identities</source>
+      <translation>Pulsar para editar las identidades</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Server:</source>
+      <translation>Servidor:</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to edit the server configuration</source>
+      <translation>Pulsar para editar la configuración del servidor</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Channels:</source>
+      <translation>Canales:</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Channel</source>
+      <translation>Canal</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Join Automatically</source>
+      <translation>Unirse Automáticamente</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to add a new channel</source>
+      <translation>Pulsar para añadir un nuevo canal</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to edit the selected channel</source>
+      <translation>Pulsar para editar el canal seleccionado</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to delete the selected channel</source>
+      <translation>Pulsar para borrar el canal seleccionado</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Shows the name of the server</source>
+      <translation>Muestra el nombre del servidor</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="261" />
+      <location filename="../IrcNetworkEditDialog.py" line="255" />
+      <location filename="../IrcNetworkEditDialog.py" line="70" />
+      <source>Yes</source>
+      <translation>Si</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="263" />
+      <location filename="../IrcNetworkEditDialog.py" line="257" />
+      <location filename="../IrcNetworkEditDialog.py" line="70" />
+      <source>No</source>
+      <translation>No</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="192" />
+      <source>Delete Channel</source>
+      <translation>Borrar Canal</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="193" />
+      <source>Do you really want to delete channel &lt;b&gt;{0}&lt;/b&gt;?</source>
+      <translation>¿Desea realmente borrar el canal &lt;b&gt;{0}&lt;/b&gt;?</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcNetworkListDialog</name>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>IRC Networks</source>
+      <translation>Redes IRC</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to define a new network</source>
+      <translation>Pulsar para definir una nueva red</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;New...</source>
+      <translation>&amp;Nuevo...</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to edit the selected network</source>
+      <translation>Pulsar para editar la red seleccionada</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;Edit...</source>
+      <translation>&amp;Editar...</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to delete the selected network</source>
+      <translation>Pulsar para borrar la red seleccionada</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;Delete</source>
+      <translation>&amp;Borrar</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to  toggle the auto-connect flag of the selected network</source>
+      <translation>Pulsar para conmutar el flag de autoconexión de la red seleccionada</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;Auto-Connect</source>
+      <translation>&amp;Autoconectar</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to edit the identities</source>
+      <translation>Pulsar para editar las identidades</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Edit &amp;Identities...</source>
+      <translation>Editar &amp;Identidades...</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="249" />
+      <location filename="../IrcNetworkListDialog.py" line="89" />
+      <source>Yes</source>
+      <translation>Si</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="249" />
+      <location filename="../IrcNetworkListDialog.py" line="89" />
+      <source>No</source>
+      <translation>No</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="91" />
+      <source>Identity</source>
+      <translation>Identidad</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="94" />
+      <source>Server</source>
+      <translation>Servidor</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="97" />
+      <source>Channels</source>
+      <translation>Canales</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="252" />
+      <location filename="../IrcNetworkListDialog.py" line="99" />
+      <source>Auto-Connect</source>
+      <translation>Autoconectar</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="170" />
+      <source>Delete Irc Network</source>
+      <translation>Borrar Red IRC</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="171" />
+      <source>Do you really want to delete IRC network &lt;b&gt;{0}&lt;/b&gt;?</source>
+      <translation>¿Desea realmente borrar la red IRC &lt;b&gt;{0}&lt;/b&gt;?</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcNetworkWidget</name>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="354" />
+      <source>Press to disconnect from the network</source>
+      <translation>Pulsar para desconectar de la red</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="359" />
+      <source>Press to connect to the selected network</source>
+      <translation>Pulsar para conectar a la red seleccionada</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="450" />
+      <location filename="../IrcNetworkWidget.py" line="433" />
+      <source>Save Messages</source>
+      <translation>Guardar Mensajes</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="435" />
+      <source>HTML Files (*.{0});;Text Files (*.txt);;All Files (*)</source>
+      <translation>Archivos HTML (*.{0});;Archivos de Texto (*.txt);;Todos los Archivos (*)</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="451" />
+      <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="../IrcNetworkWidget.py" line="471" />
+      <source>Error saving Messages</source>
+      <translation>Error al guardar Mensajes</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="472" />
+      <source>&lt;p&gt;The messages contents could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Los contenidos de mensajes no se han podido guardar en &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="484" />
+      <source>Copy</source>
+      <translation>Copiar</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="489" />
+      <source>Cut all</source>
+      <translation>Cortar todo</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="494" />
+      <source>Copy all</source>
+      <translation>Copiar todo</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="500" />
+      <source>Clear</source>
+      <translation>Limpiar</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="505" />
+      <source>Save</source>
+      <translation>Guardar</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Shows the network messages</source>
+      <translation>Muestra los mensajes de red</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Select a network to connect to</source>
+      <translation>Seleccionar una red para conectarse</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Press to set the user status to AWAY</source>
+      <translation>Pulsar para establecer el status de usuario como AWAY (ausente)</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Press to edit the networks</source>
+      <translation>Pulsar para editar las redes</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Select a nick name for the channel</source>
+      <translation>Seleccionar un sobrenombre para el canal</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Enter the channel to join</source>
+      <translation>Introducir el canal al que unirse</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Press to join the channel</source>
+      <translation>Pulsar para unirse al canal</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcPage</name>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>&lt;b&gt;Configure IRC&lt;/b&gt;</source>
+      <translation>&lt;b&gt;Configurar IRC&lt;/b&gt;</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable to show timestamps</source>
+      <translation>Habilitar para mostrar indicadores de tiempo</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Show Timestamps</source>
+      <translation>Mostrar Indicadores de Tiempo</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Time Format:</source>
+      <translation>Formato de Tiempo:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the time format to use</source>
+      <translation>Seleccionar el formato de tiempo a utilizar</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Date Format</source>
+      <translation>Formato de Fecha</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the date format to use</source>
+      <translation>Seleccionar el formato de fecha a utilizar</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show the date in timestamps</source>
+      <translation>Seleccionar para mostrar la fecha en los indicadores de tiempo</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Show Date</source>
+      <translation>Mostrar Fecha</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Colors</source>
+      <translation>Colores</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Network Messages:</source>
+      <translation>Mensajes de Red:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for network messages</source>
+      <translation>Seleccionar el color para mensajes de red</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Nick Names:</source>
+      <translation>Sobrenombres (Nick Names):</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for nick names</source>
+      <translation>Seleccionar el color para los sobrenombres</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Server Messages:</source>
+      <translation>Mensajes del Servidor:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for server messages</source>
+      <translation>Seleccionar el color para mensajes del servidor</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Own Nick Name:</source>
+      <translation>Sombrenombre Propio:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for own nick name</source>
+      <translation>Seleccionar el color para el sobrenombre propio</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Channel Messages:</source>
+      <translation>Mensajes del Canal:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for channel messages</source>
+      <translation>Seleccionar el color para mensajes del canal</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Join Channel:</source>
+      <translation>Unirse al Canal:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for join channel messages</source>
+      <translation>Seleccionar el color para mensajes de unión al canal</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Error Messages:</source>
+      <translation>Mensajes de Error:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for error messages</source>
+      <translation>Seleccionar el color para mensajes de error</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Leave Channel:</source>
+      <translation>Abandonar Canal:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for leave channel messages</source>
+      <translation>Seleccionar el color para mensajes de abandonar el canal</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Timestamp:</source>
+      <translation>Indicador de Tiempo:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for timestamps</source>
+      <translation>Seleccionar el color para los indicadores de tiempo</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Channel Info:</source>
+      <translation>Info del Canal:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for channel info messages</source>
+      <translation>Seleccionar el color para mensajes de info del canal</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Hyperlink:</source>
+      <translation>Hiperenlace:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for hyperlinks</source>
+      <translation>Seleccionar el color para hiperenlaces</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable to allow colored text in IRC messages</source>
+      <translation>Habilitar para permitir texto coloreado en mensajes IRC</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Allow Colored Text in IRC Messages</source>
+      <translation>Permitir texto coloreado en mensajes IRC</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable to show notifications</source>
+      <translation>Habilitar para mostrar notificaciones</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Show Notifications</source>
+      <translation>Mostrar notificaciones</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show a notification for join and leave events</source>
+      <translation>Seleccionar para mostrar una notificación para los eventos de unirse y abandonar</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Join/Leave Event</source>
+      <translation>Evento Unirse/Abandonar</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show a notification for every message</source>
+      <translation>Seleccionar para mostrar una notificación para cada mensaje</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Every Message</source>
+      <translation>Todos los Mensajes</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show a notification for every mentioning of your nick</source>
+      <translation>Seleccionar para mostrar una notificación cada vez que su sobrenombre es mencionado</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Mentioning of Own Nick</source>
+      <translation>Mencion de Nick Propio</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select this to enable the automatic lookup of user information for joined channels</source>
+      <translation>Seleccionar para habilitar la búsqueda automática de información de usuario para los canales a los que se une</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable Automatic User Information Lookup (/WHO)</source>
+      <translation>Habilitar Búsqueda Automática de Información del Usuario (/WHO)</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Max. Number of Users in Channel:</source>
+      <translation>Máx. Número de Usuarios en el Canal:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enter the maximum numbers of users in a channel allowed for this function</source>
+      <translation>Introducir el máximo número de usuarios en un canal permitidos para esta función</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Update Interval:</source>
+      <translation>Intervalo de Actualización:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enter the user information update interval</source>
+      <translation>Introducir el intervalo de actualización de información de usuario</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source> s</source>
+      <translation> s</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Marker</source>
+      <translation>Marcador</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to mark the current position, when the chat window is hidden</source>
+      <translation>Seleccionar para marcar la posición actual cuando la ventana de chat es ocultada</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Mark Current Position When Hidden</source>
+      <translation>Marcar Posición Actual al Ocultar</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Marker Foreground:</source>
+      <translation>Color de Primer Plano para el Marcador:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the foreground color for the marker</source>
+      <translation>Seleccionar el color de primer plano para el marcador</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the background color for the marker</source>
+      <translation>Seleccionar el color de fondo para el marcador</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Marker Background:</source>
+      <translation>Color Fondo para el Marcador:</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcServerEditDialog</name>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>IRC Server</source>
+      <translation>Servidor IRC</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Server:</source>
+      <translation>Servidor:</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Enter the host name of the IRC server</source>
+      <translation>Introduzca el nombre de host del servidor IRC</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation>Puerto:</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Enter the port number</source>
+      <translation>Introduzca el número de puerto</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation>Contraseña:</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Enter the server password</source>
+      <translation>Introducir la contraseña del servidor</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Select to use an SSL encrypted connection</source>
+      <translation>Seleccionar para utilizar una conexión encriptada con SSL</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Use Encrypted Connection (SSL)</source>
+      <translation>Usar Conexión Encriptada (SSL)</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcUserItem</name>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="136" />
+      <source>{0} (ignored)</source>
+      <translation>{0} (ignorado)</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcUtilities</name>
+    <message>
+      <location filename="../IrcUtilities.py" line="162" />
+      <source>anonymous</source>
+      <translation>anónimo</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="163" />
+      <source>ban mask</source>
+      <translation>mascara de ban</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="164" />
+      <source>no colors allowed</source>
+      <translation>no se permiten colores</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="165" />
+      <source>ban exception mask</source>
+      <translation>máscara de excepción de mask</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="166" />
+      <source>invite only</source>
+      <translation>invitar solo</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="167" />
+      <source>password protected</source>
+      <translation>protegido por contraseña</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="168" />
+      <source>user limit</source>
+      <translation>límite de usuarios</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="169" />
+      <source>moderated</source>
+      <translation>moderado</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="170" />
+      <source>no messages from outside</source>
+      <translation>no mensajes desde afuera</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="171" />
+      <source>private</source>
+      <translation>privado</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="172" />
+      <source>quiet</source>
+      <translation>silencioso</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="173" />
+      <source>reop channel</source>
+      <translation>reop de canal</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="174" />
+      <source>secret</source>
+      <translation>secreto</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="175" />
+      <source>topic protection</source>
+      <translation>protección de tema</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="176" />
+      <source>invitation mask</source>
+      <translation>máscara de invitación</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcWidget</name>
+    <message>
+      <location filename="../IrcWidget.py" line="86" />
+      <source>Press to leave the current channel</source>
+      <translation>Pulsar para abandonar el canal actual</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="225" />
+      <source>SSL Connection</source>
+      <translation>Conexión SSL</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="226" />
+      <source>An encrypted connection to the IRC network was requested but SSL is not available. Please change the server configuration.</source>
+      <translation>Se ha solicitado una conexión encriptada pero SSL no está disponible. Por favor, cambie la configuración del servidor.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="607" />
+      <location filename="../IrcWidget.py" line="572" />
+      <location filename="../IrcWidget.py" line="563" />
+      <location filename="../IrcWidget.py" line="302" />
+      <location filename="../IrcWidget.py" line="297" />
+      <location filename="../IrcWidget.py" line="290" />
+      <location filename="../IrcWidget.py" line="266" />
+      <location filename="../IrcWidget.py" line="252" />
+      <source>Info</source>
+      <translation>Info</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="253" />
+      <source>Looking for server {0} (port {1}) using an SSL encrypted connection...</source>
+      <translation>Buscando el servidor {0} (puerto {1}) utilizando una conexión encriptada a través de SSL...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="267" />
+      <source>Looking for server {0} (port {1})...</source>
+      <translation>Buscando servidor {0} (puerto {1})...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="280" />
+      <source>Disconnect from Server</source>
+      <translation>Desconectar del Servidor</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="281" />
+      <source>&lt;p&gt;Do you really want to disconnect from &lt;b&gt;{0}&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;All channels will be closed.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;¿Desea realmente desconectar de &lt;b&gt;{0}&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Se cerrarán todos los canales.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="291" />
+      <source>Disconnecting from server {0}...</source>
+      <translation>Desconectando del servidor {0}...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="298" />
+      <source>Disconnecting from network {0}...</source>
+      <translation>Desconectando de la red {0}...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="302" />
+      <source>Disconnecting from server.</source>
+      <translation>Desconectando del servidor.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="563" />
+      <source>Server found,connecting...</source>
+      <translation>Servidor encontrado, conectando...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="572" />
+      <source>Connected,logging in...</source>
+      <translation>Conectado, validándose...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="607" />
+      <source>Server disconnected.</source>
+      <translation>Servidor desconectado.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="651" />
+      <source>Message Error</source>
+      <translation>Error de Mensaje</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="652" />
+      <source>Unknown message received from server:&lt;br/&gt;{0}</source>
+      <translation>Mensaje desconocido recibido del servidor: &lt;/br&gt;{0}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1093" />
+      <location filename="../IrcWidget.py" line="1083" />
+      <location filename="../IrcWidget.py" line="1075" />
+      <location filename="../IrcWidget.py" line="1067" />
+      <location filename="../IrcWidget.py" line="695" />
+      <location filename="../IrcWidget.py" line="687" />
+      <source>CTCP</source>
+      <translation>CTCP</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="688" />
+      <source>Received CTCP-PING response from {0} with latency of {1} ms.</source>
+      <translation>Recibida respuesta CTCP-PING desde {0} con una latencia de {1} ms.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="696" />
+      <source>Received unknown CTCP-{0} response from {1}.</source>
+      <translation>Recibida respuesta CTCP-{0} desconocida desde {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="724" />
+      <source>Notice</source>
+      <translation>Aviso</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="734" />
+      <source>You have set your personal modes to &lt;b&gt;[{0}]&lt;/b&gt;.</source>
+      <translation>Usted ha establecido sus modos personales a &lt;b&gt;[{0}]&lt;/b&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="738" />
+      <source>{0} has changed your personal modes to &lt;b&gt;[{1}]&lt;/b&gt;.</source>
+      <translation>{0} ha cambiado los modos personales de usted a &lt;b&gt;[{1}]&lt;/b&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="742" />
+      <source>Mode</source>
+      <translation>Modo</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="750" />
+      <source>You have left channel {0}.</source>
+      <translation>Ha dejado el canal {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="762" />
+      <source>You are now known as {0}.</source>
+      <translation>Usted es conocido como {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="768" />
+      <source>User {0} is now known as {1}.</source>
+      <translation>Usuario {0} es conocido ahora como {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="774" />
+      <source>Received PONG from {0}</source>
+      <translation>Recibido PONG desde {0}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="779" />
+      <source>Server Error</source>
+      <translation>Error de Servidor</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="817" />
+      <source>Error</source>
+      <translation>Error</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="836" />
+      <source>Welcome</source>
+      <translation>Bienvenido</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="838" />
+      <source>Support</source>
+      <translation>Soporte</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="840" />
+      <source>User</source>
+      <translation>Usuario</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="842" />
+      <source>MOTD</source>
+      <translation>MOTD</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="844" />
+      <source>Away</source>
+      <translation>Ausente</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="846" />
+      <source>Info ({0})</source>
+      <translation>Info ({0})</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="850" />
+      <source>Message of the day</source>
+      <translation>Mensaje del día</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="852" />
+      <source>End of message of the day</source>
+      <translation>Fin de mensaje del día</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="855" />
+      <source>Server {0} (Version {1}), User-Modes: {2}, Channel-Modes: {3}</source>
+      <translation>Servidor {0} (Versión {1}), Modos de Usuario: {2}, Modos de Canal: {3}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="860" />
+      <source>Current users on {0}: {1}, max. {2}</source>
+      <translation>Usuarios actuales en {0}: {1}, máx. {2}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="865" />
+      <source>Current users on the network: {0}, max. {1}</source>
+      <translation>Usuarios actuales en la red: {0}, máx. {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="869" />
+      <source>You are no longer marked as being away.</source>
+      <translation>Usted ya no está marcado como ausente.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="871" />
+      <source>You have been marked as being away.</source>
+      <translation>Usted ha sido marcado como ausente.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1002" />
+      <location filename="../IrcWidget.py" line="986" />
+      <location filename="../IrcWidget.py" line="934" />
+      <source>SSL Error</source>
+      <translation>Error de SSL</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="935" />
+      <source>Connection to server {0} (port {1}) lost while waiting for user response to an SSL error.</source>
+      <translation>Conexión al servidor {0} (puerto {1}) perdida mientras se esperaba respuesta de usuario a un error SSL.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="971" />
+      <location filename="../IrcWidget.py" line="964" />
+      <location filename="../IrcWidget.py" line="959" />
+      <location filename="../IrcWidget.py" line="951" />
+      <location filename="../IrcWidget.py" line="943" />
+      <source>Socket Error</source>
+      <translation>Error de Socket</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="944" />
+      <source>The host was not found. Please check the host name and port settings.</source>
+      <translation>El host no ha sido encontrado. Por favor, compruebe los ajustes de nombre de host y puerto.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="952" />
+      <source>The connection was refused by the peer. Please check the host name and port settings.</source>
+      <translation>La conexión ha sido rechazada por el otro extremo. Por favor, compruebe los ajustes de nombre de host y puerto.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="959" />
+      <source>The SSL handshake failed.</source>
+      <translation>Ha fallado el SSL handshake.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="965" />
+      <source>The following network error occurred:&lt;br/&gt;{0}</source>
+      <translation>Ha ocurrido el siguiente error de red: &lt;br/&gt;{0}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="971" />
+      <source>A network error occurred.</source>
+      <translation>Ha ocurrido un error de red.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="987" />
+      <source>Could not connect to {0} (port {1}) using an SSL encrypted connection. Either the server does not support SSL (did you use the correct port?) or you rejected the certificate.</source>
+      <translation>No se ha podido conectar a {0} (puerto {1}) utilizando una conexión encriptada sobre SSL. O bien el servidor no soporta SSL (¿se ha utilizado el puerto correcto?) o bien usted ha rechazado el certificado.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1003" />
+      <source>The SSL certificate for the server {0} (port {1}) failed the authenticity check. SSL errors were accepted by you.</source>
+      <translation>El certificado SSL para el servidor {0} (puerto {1}) ha fallado la comprobación de autenticidad. Los errores SSL han sido aceptados por usted.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1068" />
+      <source>Received Version request from {0}.</source>
+      <translation>Se ha recibido una solicitud de Versión de {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1076" />
+      <source>Received CTCP-PING request from {0}, sending answer.</source>
+      <translation>Recibida solicitud CTCP-PING desde {0}, enviando respuesta.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1084" />
+      <source>Received CTCP-CLIENTINFO request from {0}, sending answer.</source>
+      <translation>Recibida solicitud CTCP-CLIENTINFO desde {0}, enviando respuesta.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1094" />
+      <source>Received unknown CTCP-{0} request from {1}.</source>
+      <translation>Recibida solicitud CTCP desconocida desde {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1110" />
+      <source>{0} ({1})</source>
+      <comment>channel name, users count</comment>
+      <translation>{0} ({1})</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1152" />
+      <location filename="../IrcWidget.py" line="1132" />
+      <source>Critical</source>
+      <translation>Crítico</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1133" />
+      <source>No nickname acceptable to the server configured for &lt;b&gt;{0}&lt;/b&gt;. Disconnecting...</source>
+      <translation>No hay un sobrenombre que el servidor acepte configurado para &lt;b&gt;{0}&lt;/b&gt;. Desconectando...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1152" />
+      <source>The given nickname is already in use.</source>
+      <translation>El sobrenombre proporcionado ya está en uso.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.ui" line="0" />
+      <source>Channels</source>
+      <translation>Canales</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.ui" line="0" />
+      <source>Network</source>
+      <translation>Red</translation>
+    </message>
+  </context>
+</TS>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/i18n/irc_ru.ts	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,2068 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ru_RU">
+  <context>
+    <name>IrcChannelEditDialog</name>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>IRC Channel</source>
+      <translation>IRC канал</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Name:</source>
+      <translation>Имя:</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Enter the channel name</source>
+      <translation>Введите имя канала</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Key:</source>
+      <translation>Ключ:</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Enter the channel key/password</source>
+      <translation>Введите ключ/пароль для канала</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Select to join this channel automatically</source>
+      <translation>Разрешить автоматическое подключение к каналу</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelEditDialog.ui" line="0" />
+      <source>Join channel automatically</source>
+      <translation>Автоматически подключиться к каналу</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcChannelWidget</name>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1685" />
+      <location filename="../IrcChannelWidget.py" line="1620" />
+      <location filename="../IrcChannelWidget.py" line="453" />
+      <source>Send Message</source>
+      <translation>Отправить сообщение</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="454" />
+      <source>Messages starting with a '/' are not allowed in private chats.</source>
+      <translation>В приватных разговорах сообщения, начинающиеся с '/', не разрешаются.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="570" />
+      <source>Leave IRC channel</source>
+      <translation>Уйти с IRC канала</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="571" />
+      <source>Do you really want to leave the IRC channel &lt;b&gt;{0}&lt;/b&gt;?</source>
+      <translation>Вы действительно хотите уйти с канала &lt;b&gt;{0}&lt;/b&gt;?</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="740" />
+      <source>Channel Message</source>
+      <translation>Сообщение в канале</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="747" />
+      <source>Nick mentioned</source>
+      <translation>Упомянутый ник</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="778" />
+      <source>{0} has joined the channel {1} ({2}).</source>
+      <translation>{0} присоединился к каналу {1} ({2}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="783" />
+      <source>You have joined the channel {0} ({1}).</source>
+      <translation>Вы присоединились к каналу {0} ({1}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="791" />
+      <source>Join Channel</source>
+      <translation>Подключиться к каналу</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="811" />
+      <source>{0} has left {1}.</source>
+      <translation>{0} отсоединился {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="818" />
+      <location filename="../IrcChannelWidget.py" line="815" />
+      <source>{0} has left {1}: {2}.</source>
+      <translation>{0} отсоединился {1}: {2}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="826" />
+      <source>Leave Channel</source>
+      <translation>Уйти с канала</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="846" />
+      <source>{0} has quit {1}.</source>
+      <translation>{0} отсоединился {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="849" />
+      <source>{0} has quit {1}: {2}.</source>
+      <translation>{0} отсоединился {1}: {2}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="857" />
+      <source>Quit</source>
+      <translation>Выйти</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="878" />
+      <source>You are now known as {0}.</source>
+      <translation>Вы теперь {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="884" />
+      <source>User {0} is now known as {1}.</source>
+      <translation>Пользователь {0} сменил псевдоним на {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="929" />
+      <source>Away</source>
+      <translation>Отошел</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="930" />
+      <source>{0} is away: {1}</source>
+      <translation>{0} вдали: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="950" />
+      <source>The channel topic is: "{0}".</source>
+      <translation>Тема канала: "{0}".</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="969" />
+      <source>The topic was set by {0} on {1}.</source>
+      <translation>Тему отрыл {0} {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="992" />
+      <source>Channel URL: {0}</source>
+      <translation>URL канала: {0}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1017" />
+      <source>password protected ({0})</source>
+      <translation>защищён паролем ({0})</translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="1020" />
+      <source>limited to %n user(s)</source>
+      <translation>
+        <numerusform>ограничивается %n пользователем</numerusform>
+        <numerusform>ограничивается %n пользователями</numerusform>
+        <numerusform>ограничивается %n пользователями</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1028" />
+      <source>Channel modes: {0}.</source>
+      <translation>Режимы канала: {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1047" />
+      <source>This channel was created on {0}.</source>
+      <translation>Этот канал был открыт {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1084" />
+      <source>{0} sets the channel mode to 'anonymous'.</source>
+      <translation>{0} устанавливает 'анонимный' режим для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1088" />
+      <source>{0} removes the 'anonymous' mode from the channel.</source>
+      <translation>{0} отменяет 'анонимный' режим для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1093" />
+      <source>{0} sets a ban on {1}.</source>
+      <translation>{0} устанавливает запрет на {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1097" />
+      <source>{0} removes the ban on {1}.</source>
+      <translation>{0} снимает запрет на {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1102" />
+      <source>{0} sets the channel mode to 'no colors allowed'.</source>
+      <translation>{0} устанавливает 'цвета запрещены' режим для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1106" />
+      <source>{0} sets the channel mode to 'allow color codes'.</source>
+      <translation>{0} устанавливает 'цвета разрешены' режим для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1111" />
+      <source>{0} sets a ban exception on {1}.</source>
+      <translation>{0} устанавливает ислючение на запрет на {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1115" />
+      <source>{0} removes the ban exception on {1}.</source>
+      <translation>{0} отменяет ислючение на запрет на {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1120" />
+      <source>{0} sets the channel mode to 'invite only'.</source>
+      <translation>{0} устанавливает 'только по приглашению' режим для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1124" />
+      <source>{0} removes the 'invite only' mode from the channel.</source>
+      <translation>{0} отменяет 'только по приглашению' режим для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1129" />
+      <source>{0} sets the channel key to '{1}'.</source>
+      <translation>{0} устанавливает ключ '{1}' для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1133" />
+      <source>{0} removes the channel key.</source>
+      <translation>{0} удаляет ключ для канала.</translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="1136" />
+      <source>{0} sets the channel limit to %n nick(s).</source>
+      <translation>
+        <numerusform>{0} устанавливает ограничение канала в %n ник.</numerusform>
+        <numerusform>{0} устанавливает ограничение канала в %n ника.</numerusform>
+        <numerusform>{0} устанавливает ограничение канала в %n ников.</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1142" />
+      <source>{0} removes the channel limit.</source>
+      <translation>{0} снимает ограничение на число пользователей канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1145" />
+      <source>{0} sets the channel mode to 'moderated'.</source>
+      <translation>{0} устанавливает 'контролируемый' режим для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1149" />
+      <source>{0} sets the channel mode to 'unmoderated'.</source>
+      <translation>{0} устанавливает 'неконтролируемый' режим для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1154" />
+      <source>{0} sets the channel mode to 'no messages from outside'.</source>
+      <translation>{0} устанавливает 'внешние сообщения запрещены' режим для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1159" />
+      <source>{0} sets the channel mode to 'allow messages from outside'.</source>
+      <translation>{0} устанавливает режим 'внешние сообщения разрешены' для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1165" />
+      <source>{0} sets the channel mode to 'private'.</source>
+      <translation>{0} устанавливает 'приватный' режим для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1169" />
+      <source>{0} sets the channel mode to 'public'.</source>
+      <translation>{0} устанавливает ''public' режим для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1174" />
+      <source>{0} sets the channel mode to 'quiet'.</source>
+      <translation>{0} устанавливает 'тихий' режим для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1178" />
+      <source>{0} removes the 'quiet' mode from the channel.</source>
+      <translation>{0} отменяет 'тихий' режим для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1185" />
+      <source>{0} sets the channel mode to 'secret'.</source>
+      <translation>{0} устанавливает 'секретный' режим для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1189" />
+      <source>{0} sets the channel mode to 'visible'.</source>
+      <translation>{0} устанавливает 'открытый' режим для канала.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1194" />
+      <source>{0} switches on 'topic protection'.</source>
+      <translation>{0} включает 'тема защищена'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1198" />
+      <source>{0} switches off 'topic protection'.</source>
+      <translation>{0} выключает 'тема защищена'.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1203" />
+      <source>{0} sets invitation mask {1}.</source>
+      <translation>{0} устанавливает шаблон для приглашений {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1207" />
+      <source>{0} removes the invitation mask {1}.</source>
+      <translation>{0} отменяет шаблон для приглашений {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1211" />
+      <source>Mode</source>
+      <translation>Режим</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1233" />
+      <source>{0} sets mode for {1}: {2}.</source>
+      <translation>{0} устанавливает режим для {1}: {2}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1265" />
+      <source>Help</source>
+      <translation>Справка</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1318" />
+      <location filename="../IrcChannelWidget.py" line="1308" />
+      <location filename="../IrcChannelWidget.py" line="1300" />
+      <location filename="../IrcChannelWidget.py" line="1292" />
+      <source>CTCP</source>
+      <translation>CTCP (Клиент-клиент протокол)</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1293" />
+      <source>Received Version request from {0}.</source>
+      <translation>Получен запрос версии от {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1301" />
+      <source>Received CTCP-PING request from {0}, sending answer.</source>
+      <translation>CTCP-PING запрос от {0}, отправление ответа.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1309" />
+      <source>Received CTCP-CLIENTINFO request from {0}, sending answer.</source>
+      <translation>CTCP-CLIENTINFO запрос от {0}, отправление ответа.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1319" />
+      <source>Received unknown CTCP-{0} request from {1}.</source>
+      <translation>Неизвестный CTCP-{0} запрос от {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1419" />
+      <source>--- New From Here ---</source>
+      <translation>--- Здесь новые сообщения ---</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1503" />
+      <location filename="../IrcChannelWidget.py" line="1486" />
+      <source>Save Messages</source>
+      <translation>Сохранить сообщения</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1488" />
+      <source>HTML Files (*.{0});;Text Files (*.txt);;All Files (*)</source>
+      <translation>Файлы HTML (*.{0});;Файлы текстовые (*.txt);;Все файлы (*)</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1504" />
+      <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;Файл &lt;b&gt;{0}&lt;/b&gt; уже существует. Переписать?&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1524" />
+      <source>Error saving Messages</source>
+      <translation>Ошибка при сохранении сообщений</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1525" />
+      <source>&lt;p&gt;The messages contents could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Невозможно записать сообщения в файл &lt;b&gt;{0}&lt;/b&gt;:&lt;br&gt;Причина: {1}.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1537" />
+      <source>Copy</source>
+      <translation>Копировать</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1542" />
+      <source>Cut all</source>
+      <translation>Вырезать всё</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1547" />
+      <source>Copy all</source>
+      <translation>Копировать всё</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1553" />
+      <source>Clear</source>
+      <translation>Очистить</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1558" />
+      <source>Save</source>
+      <translation>Сохранить</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1562" />
+      <source>Mark Current Position</source>
+      <translation>Пометить текущую позицию</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1565" />
+      <source>Remove Position Marker</source>
+      <translation>Удалить маркер позиции</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1653" />
+      <location filename="../IrcChannelWidget.py" line="1637" />
+      <location filename="../IrcChannelWidget.py" line="1621" />
+      <source>Enter the message to be sent:</source>
+      <translation>Введите сообщение для отправки:</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1688" />
+      <location filename="../IrcChannelWidget.py" line="1636" />
+      <source>Send Query</source>
+      <translation>Отправить запрос</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1691" />
+      <location filename="../IrcChannelWidget.py" line="1652" />
+      <source>Send Notice</source>
+      <translation>Отправить уведомление</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1678" />
+      <source>Who Is</source>
+      <translation>Кто это</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1681" />
+      <source>Private Chat</source>
+      <translation>Приватный чат</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1695" />
+      <source>Send Ping</source>
+      <translation>Отправить Ping</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1698" />
+      <source>Ignore User</source>
+      <translation>Игнорировать пользователя</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1702" />
+      <source>Refresh</source>
+      <translation>Освежить</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1826" />
+      <location filename="../IrcChannelWidget.py" line="1800" />
+      <source>Who</source>
+      <translation>Кто</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1801" />
+      <source>End of WHO list for {0}.</source>
+      <translation>Конец списка для {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1824" />
+      <source> (Away)</source>
+      <translation> (отсутствует)</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1827" />
+      <source>{0} is {1}@{2} ({3}){4}</source>
+      <translation>{0} это {1}@{2} ({3}){4}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2216" />
+      <location filename="../IrcChannelWidget.py" line="2195" />
+      <location filename="../IrcChannelWidget.py" line="2174" />
+      <location filename="../IrcChannelWidget.py" line="2151" />
+      <location filename="../IrcChannelWidget.py" line="2131" />
+      <location filename="../IrcChannelWidget.py" line="2111" />
+      <location filename="../IrcChannelWidget.py" line="2091" />
+      <location filename="../IrcChannelWidget.py" line="2068" />
+      <location filename="../IrcChannelWidget.py" line="2060" />
+      <location filename="../IrcChannelWidget.py" line="2052" />
+      <location filename="../IrcChannelWidget.py" line="2041" />
+      <location filename="../IrcChannelWidget.py" line="2022" />
+      <location filename="../IrcChannelWidget.py" line="1988" />
+      <location filename="../IrcChannelWidget.py" line="1983" />
+      <location filename="../IrcChannelWidget.py" line="1960" />
+      <location filename="../IrcChannelWidget.py" line="1937" />
+      <location filename="../IrcChannelWidget.py" line="1930" />
+      <location filename="../IrcChannelWidget.py" line="1923" />
+      <location filename="../IrcChannelWidget.py" line="1916" />
+      <location filename="../IrcChannelWidget.py" line="1909" />
+      <location filename="../IrcChannelWidget.py" line="1902" />
+      <location filename="../IrcChannelWidget.py" line="1851" />
+      <source>Whois</source>
+      <translation>Whois</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1852" />
+      <source>{0} is {1}@{2} ({3}).</source>
+      <translation>{0} это {1}@{2} ({3}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1903" />
+      <source>{0} is a user on channels: {1}</source>
+      <translation>{0} это пользователь в каналах: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1910" />
+      <source>{0} has voice on channels: {1}</source>
+      <translation>{0} обладает голосом в каналах: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1917" />
+      <source>{0} is a halfop on channels: {1}</source>
+      <translation>{0} это помощник оператора в каналах: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1924" />
+      <source>{0} is an operator on channels: {1}</source>
+      <translation>{0} это оператор в каналах: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1931" />
+      <source>{0} is owner of channels: {1}</source>
+      <translation>{0} это владелец каналов: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1938" />
+      <source>{0} is admin on channels: {1}</source>
+      <translation>{0} это администратор в каналах: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1961" />
+      <source>{0} is online via {1} ({2}).</source>
+      <translation>{0} в режиме онлайн через {1} ({2}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="1984" />
+      <source>{0} is an IRC Operator.</source>
+      <translation>{0} это IRC оператор.</translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2017" />
+      <source>%n day(s)</source>
+      <translation>
+        <numerusform>%n день</numerusform>
+        <numerusform>%n дня</numerusform>
+        <numerusform>%n дней</numerusform>
+      </translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2037" />
+      <location filename="../IrcChannelWidget.py" line="2018" />
+      <source>%n hour(s)</source>
+      <translation>
+        <numerusform>%n час</numerusform>
+        <numerusform>%n часа</numerusform>
+        <numerusform>%n часов</numerusform>
+      </translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2049" />
+      <location filename="../IrcChannelWidget.py" line="2038" />
+      <location filename="../IrcChannelWidget.py" line="2019" />
+      <source>%n minute(s)</source>
+      <translation>
+        <numerusform>%n минуту</numerusform>
+        <numerusform>%n минуты</numerusform>
+        <numerusform>%n минут</numerusform>
+      </translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2050" />
+      <location filename="../IrcChannelWidget.py" line="2039" />
+      <location filename="../IrcChannelWidget.py" line="2020" />
+      <source>%n second(s)</source>
+      <translation>
+        <numerusform>%n секунду</numerusform>
+        <numerusform>%n секунды</numerusform>
+        <numerusform>%n секунд</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2023" />
+      <source>{0} has been idle for {1}, {2}, {3}, and {4}.</source>
+      <comment>{0} = name of person, {1} = (x days), {2} = (x hours), {3} = (x minutes), {4} = (x seconds)</comment>
+      <translation>{0} не появлялся {1}, {2}, {3}, и {4}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2042" />
+      <source>{0} has been idle for {1}, {2}, and {3}.</source>
+      <comment>{0} = name of person, {1} = (x hours), {2} = (x minutes), {3} = (x seconds)</comment>
+      <translation>{0} не появлялся {1}, {2}, и {3}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2053" />
+      <source>{0} has been idle for {1} and {2}.</source>
+      <comment>{0} = name of person, {1} = (x minutes), {3} = (x seconds)</comment>
+      <translation>{0} не появлялся {1} и {2}.</translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../IrcChannelWidget.py" line="2061" />
+      <source>{0} has been idle for %n second(s).</source>
+      <translation>
+        <numerusform>{0} бездействует %n секунду.</numerusform>
+        <numerusform>{0} бездействует %n секунды.</numerusform>
+        <numerusform>{0} бездействует %n секунд.</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2069" />
+      <source>{0} has been online since {1}.</source>
+      <translation>{0} присутствует с {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2092" />
+      <source>End of WHOIS list for {0}.</source>
+      <translation>Конец WHOIS списка для {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2112" />
+      <source>{0} is an identified user.</source>
+      <translation>{0} является реальным пользователем.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2132" />
+      <source>{0} is available for help.</source>
+      <translation>{0} готов помочь.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2152" />
+      <source>{0} is logged in as {1}.</source>
+      <translation>{0} вошёл как {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2175" />
+      <source>{0} is actually using the host {1} (IP: {2}).</source>
+      <translation>{0} использует компьютер {1} (IP: {2}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2196" />
+      <source>{0} is using a secure connection.</source>
+      <translation>{0} использует безопасное соединение.</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2217" />
+      <source>{0} is connecting from {1} (IP: {2}).</source>
+      <translation>{0} подсоединился с {1} (IP: {2}).</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2240" />
+      <source>Edit Channel Topic</source>
+      <translation>Изменить тему канала</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="2241" />
+      <source>Enter the topic for this channel:</source>
+      <translation>Введите тему для канала:</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Press to change the topic</source>
+      <translation>Сменить тему</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Shows the list of users</source>
+      <translation>Отображение списка пользователей</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Shows the channel messages</source>
+      <translation>Отображение сообщений в канале</translation>
+    </message>
+    <message>
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <location filename="../IrcChannelWidget.ui" line="0" />
+      <source>Enter a message, send by pressing Return or Enter</source>
+      <translation>Введите сообщение. Для его отправки нажмите Return или Enter</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcExtensionPlugin</name>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="190" />
+      <location filename="../../PluginExtensionIrc.py" line="186" />
+      <location filename="../../PluginExtensionIrc.py" line="71" />
+      <source>IRC</source>
+      <translation>IRC</translation>
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="191" />
+      <source>&amp;IRC</source>
+      <translation>&amp;IRC</translation>
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="192" />
+      <source>Ctrl+Alt+Shift+I</source>
+      <translation>Ctrl+Alt+Shift+I</translation>
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="198" />
+      <source>Switch the input focus to the IRC window.</source>
+      <translation>Переключить фокус ввода в окно IRC.</translation>
+    </message>
+    <message>
+      <location filename="../../PluginExtensionIrc.py" line="201" />
+      <source>&lt;b&gt;Activate IRC&lt;/b&gt;&lt;p&gt;This switches the input focus to the IRC window.&lt;/p&gt;</source>
+      <translation>&lt;b&gt;Активировать IRC&lt;/b&gt;&lt;p&gt;Переключить фокус ввода в окно IRC.&lt;/p&gt;</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcIdentitiesEditDialog</name>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>IRC Identities</source>
+      <translation>IRC пользователи</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Identity:</source>
+      <translation>Пользователь:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Select the identity to work on</source>
+      <translation>Выберите пользователя для работы</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to add a new identity</source>
+      <translation>Добавить нового пользователя</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to copy the selected identity</source>
+      <translation>Копировать выбранного пользователя</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to rename the selected identity</source>
+      <translation>Переименовать выбранного пользователя</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to delete the selected identity</source>
+      <translation>Удалить выбранного пользователя</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>General</source>
+      <translation>Основные</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Real Name:</source>
+      <translation>Действительное имя:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the real name</source>
+      <translation>Введите действительное имя пользователя</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Nick Names</source>
+      <translation>Псевдонимы</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter a nick name to add</source>
+      <translation>Введите псевдоним для добавления</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to add the entered nick name</source>
+      <translation>Добавить введенный псевдоним</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to delete the selected nick name</source>
+      <translation>Удалить выбранный псевдоним</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to move the selected nick name up</source>
+      <translation>Выбранный псевдоним вверх</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to move the selected nick name down</source>
+      <translation>Выбранный псевдоним вниз</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Auto Identify</source>
+      <translation>Автоидентификация</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Service:</source>
+      <translation>Сервис:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the name of the service to identify against</source>
+      <translation>Введите еще раз имя сервиса для идентификации</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Service name can be &lt;b&gt;&lt;i&gt;nickserv&lt;/i&gt;&lt;/b&gt; or a network-dependent name such as &lt;b&gt;&lt;i&gt;nickserv@services.dal.net&lt;/i&gt;&lt;/b&gt;</source>
+      <translation>Имя сервиса может быть или &lt;b&gt;&lt;i&gt;nickserv&lt;/i&gt;&lt;/b&gt; или сетевое имя, например &lt;b&gt;&lt;i&gt;nickserv@services.dal.net&lt;/i&gt;&lt;/b&gt;</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation>Пароль:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the password</source>
+      <translation>Введите пароль</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="506" />
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Press to show the password</source>
+      <translation>Показать пароль</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Away</source>
+      <translation>Отошел</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Select to mark the current position in the chat, when you send an AWAY command.</source>
+      <translation>Разрешить отмечать текущую позицию в чате при посылке команды AWAY.</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Mark the current position in chat windows when going away</source>
+      <translation>Отмечать текущую позицию в окне чата когда собираетесь уходить</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Away Message:</source>
+      <translation>Сообщение об отсутствии:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the message to be sent when going away</source>
+      <translation>Создайте сообщение о вашем отсутствии</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Advanced</source>
+      <translation>Расширенные</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Ident:</source>
+      <translation>Пользователь:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter the identity to be used to log-on to the server</source>
+      <translation>Задайте пользователя для входа на сервер</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Reason for Quit:</source>
+      <translation>Причина для выхода:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter a message to be sent when quitting</source>
+      <translation>Создайте сообщение которое будет отправлено при выходе</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Reason for Part:</source>
+      <translation>Причина для расставания:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.ui" line="0" />
+      <source>Enter message to be sent when leaving a channel</source>
+      <translation>Создайте сообщение, которое будет отправлено при выходе из канала</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="206" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="188" />
+      <source>Edit Identity</source>
+      <translation>Редактировать пользователя</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="189" />
+      <source>The identity must contain at least one nick name.</source>
+      <translation>У пользователя должен быть по крайней мере один псевдоним.</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="207" />
+      <source>The identity must have a real name.</source>
+      <translation>У пользователя должно быть реальное имя.</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="259" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="240" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="230" />
+      <source>Add Identity</source>
+      <translation>Добавить пользователя</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="315" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="273" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="231" />
+      <source>Identity Name:</source>
+      <translation>Имя для идентификации:</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="326" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="284" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="241" />
+      <source>An identity named &lt;b&gt;{0}&lt;/b&gt; already exists. You must provide a different name.</source>
+      <translation>Пользователь с именем &lt;b&gt;{0}&lt;/b&gt; уже существует. Выберите другое имя.</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="343" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="302" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="260" />
+      <source>The identity has to have a name.</source>
+      <translation>У пользователя должно быть имя.</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="342" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="301" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="283" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="272" />
+      <source>Copy Identity</source>
+      <translation>Копировать пользователя</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="325" />
+      <location filename="../IrcIdentitiesEditDialog.py" line="314" />
+      <source>Rename Identity</source>
+      <translation>Переименовать пользователя</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="366" />
+      <source>This identity is in use. If you remove it, the network settings using it will fall back to the default identity. Should it be deleted anyway?</source>
+      <translation>Данный пользователь уже используется. Если Вы удалите его, то использующая его сеть перейдёт на пользователя по умолчанию. Удалить?</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="372" />
+      <source>Do you really want to delete all information for this identity?</source>
+      <translation>Вы действительно хотите удалить всю информацию о этом пользователе?</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="377" />
+      <source>Delete Identity</source>
+      <translation>Удалить пользователя</translation>
+    </message>
+    <message>
+      <location filename="../IrcIdentitiesEditDialog.py" line="502" />
+      <source>Press to hide the password</source>
+      <translation>Скрыть пароль</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcIdentity</name>
+    <message>
+      <location filename="../IrcNetworkManager.py" line="26" />
+      <source>Default Identity</source>
+      <translation>Пользователь по умолчанию</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkManager.py" line="30" />
+      <source>Gone away for now.</source>
+      <translation>Отошел.</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkManager.py" line="32" />
+      <location filename="../IrcNetworkManager.py" line="31" />
+      <source>IRC for eric IDE</source>
+      <translation>IRC для eric IDE</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcNetworkEditDialog</name>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>IRC Network</source>
+      <translation>Сеть IRC</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Network Name:</source>
+      <translation>Сетевое имя:</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Enter the name of the IRC network</source>
+      <translation>Задайте имя сети IRC</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Identity:</source>
+      <translation>Пользователь:</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Select the identity to be used for the IRC network</source>
+      <translation>Задайте пользователя для сети IRC</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to edit the identities</source>
+      <translation>Редактировать пользователей</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Server:</source>
+      <translation>Сервер:</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to edit the server configuration</source>
+      <translation>Редактировать конфигурацию сервера</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Channels:</source>
+      <translation>Каналы:</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Channel</source>
+      <translation>Канал</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Join Automatically</source>
+      <translation>Автоматическое подключение</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to add a new channel</source>
+      <translation>Добавить новый канал</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to edit the selected channel</source>
+      <translation>Редактировать выбранный канал</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Press to delete the selected channel</source>
+      <translation>Удалить выбранный канал</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.ui" line="0" />
+      <source>Shows the name of the server</source>
+      <translation>Отображение имени сервера</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="261" />
+      <location filename="../IrcNetworkEditDialog.py" line="255" />
+      <location filename="../IrcNetworkEditDialog.py" line="70" />
+      <source>Yes</source>
+      <translation>Да</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="263" />
+      <location filename="../IrcNetworkEditDialog.py" line="257" />
+      <location filename="../IrcNetworkEditDialog.py" line="70" />
+      <source>No</source>
+      <translation>Нет</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="192" />
+      <source>Delete Channel</source>
+      <translation>Удалить канал</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkEditDialog.py" line="193" />
+      <source>Do you really want to delete channel &lt;b&gt;{0}&lt;/b&gt;?</source>
+      <translation>Вы действительно хотите удалить канал &lt;b&gt;{0}&lt;/b&gt;?</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcNetworkListDialog</name>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>IRC Networks</source>
+      <translation>Сети IRC</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to define a new network</source>
+      <translation>Добавить новую сеть</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;New...</source>
+      <translation>&amp;Новый...</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to edit the selected network</source>
+      <translation>Редактировать выбранную сеть</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;Edit...</source>
+      <translation>&amp;Правка...</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to delete the selected network</source>
+      <translation>Удалить выбранную сеть</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;Delete</source>
+      <translation>&amp;Удалить</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to  toggle the auto-connect flag of the selected network</source>
+      <translation>Включить/Выключить флаг автоподключения выбранной сети</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>&amp;Auto-Connect</source>
+      <translation>&amp;Автосоединение</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Press to edit the identities</source>
+      <translation>Редактировать пользователей</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.ui" line="0" />
+      <source>Edit &amp;Identities...</source>
+      <translation>Правка п&amp;ользователя...</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="249" />
+      <location filename="../IrcNetworkListDialog.py" line="89" />
+      <source>Yes</source>
+      <translation>Да</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="249" />
+      <location filename="../IrcNetworkListDialog.py" line="89" />
+      <source>No</source>
+      <translation>Нет</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="91" />
+      <source>Identity</source>
+      <translation>Идентичность</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="94" />
+      <source>Server</source>
+      <translation>Сервер</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="97" />
+      <source>Channels</source>
+      <translation>Каналы</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="252" />
+      <location filename="../IrcNetworkListDialog.py" line="99" />
+      <source>Auto-Connect</source>
+      <translation>Автосоединение</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="170" />
+      <source>Delete Irc Network</source>
+      <translation>Удалить сеть IRC</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkListDialog.py" line="171" />
+      <source>Do you really want to delete IRC network &lt;b&gt;{0}&lt;/b&gt;?</source>
+      <translation>Вы действительно хотите удалить IRC сеть &lt;b&gt;{0}&lt;/b&gt;?</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcNetworkWidget</name>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="354" />
+      <source>Press to disconnect from the network</source>
+      <translation>Отсоединиться от сети</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="359" />
+      <source>Press to connect to the selected network</source>
+      <translation>Подключиться к выбранной сети</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="450" />
+      <location filename="../IrcNetworkWidget.py" line="433" />
+      <source>Save Messages</source>
+      <translation>Сохранить сообщения</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="435" />
+      <source>HTML Files (*.{0});;Text Files (*.txt);;All Files (*)</source>
+      <translation>Файлы HTML (*.{0});;Файлы текстовые (*.txt);;Все файлы (*)</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="451" />
+      <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;Файл &lt;b&gt;{0}&lt;/b&gt; уже существует. Переписать?&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="471" />
+      <source>Error saving Messages</source>
+      <translation>Ошибка при сохранении сообщений</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="472" />
+      <source>&lt;p&gt;The messages contents could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Невозможно записать сообщения в файл &lt;b&gt;{0}&lt;/b&gt;:&lt;br&gt;Причина: {1}.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="484" />
+      <source>Copy</source>
+      <translation>Копировать</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="489" />
+      <source>Cut all</source>
+      <translation>Вырезать всё</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="494" />
+      <source>Copy all</source>
+      <translation>Копировать всё</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="500" />
+      <source>Clear</source>
+      <translation>Очистить</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.py" line="505" />
+      <source>Save</source>
+      <translation>Сохранить</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Shows the network messages</source>
+      <translation>Отображение сетевых сообщений</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Select a network to connect to</source>
+      <translation>Выберите сеть для подключения</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Press to set the user status to AWAY</source>
+      <translation>Установить статус пользователя - ОТСУТСТВУЕТ</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Press to edit the networks</source>
+      <translation>Редактировать сети</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Select a nick name for the channel</source>
+      <translation>Выберите псевдоним для канала</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Enter the channel to join</source>
+      <translation>Введите канал для подсоединения</translation>
+    </message>
+    <message>
+      <location filename="../IrcNetworkWidget.ui" line="0" />
+      <source>Press to join the channel</source>
+      <translation>Подсоединиться к каналу</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcPage</name>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>&lt;b&gt;Configure IRC&lt;/b&gt;</source>
+      <translation>&lt;b&gt;Настроить IRC&lt;/b&gt;</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable to show timestamps</source>
+      <translation>Разрешить показывать временную метку</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Show Timestamps</source>
+      <translation>Показывать временную метку</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Time Format:</source>
+      <translation>Формат времени:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the time format to use</source>
+      <translation>Выберите формат времени</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Date Format</source>
+      <translation>Формат даты</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the date format to use</source>
+      <translation>Выберите формат даты</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show the date in timestamps</source>
+      <translation>Разрешить показывать дату во временной метке</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Show Date</source>
+      <translation>Показывать дату</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Colors</source>
+      <translation>Цвет</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Network Messages:</source>
+      <translation>Сетевые сообщения:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for network messages</source>
+      <translation>Выберите цвет для отображения сетевых сообщений</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Nick Names:</source>
+      <translation>Псевдоним:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for nick names</source>
+      <translation>Выберите цвет для отображения псевдонима</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Server Messages:</source>
+      <translation>Серверные сообщения:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for server messages</source>
+      <translation>Выберите цвет для отображения сообщений сервера</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Own Nick Name:</source>
+      <translation>Свой псевдоним:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for own nick name</source>
+      <translation>Выберите цвет для отображения собственного псевдонима</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Channel Messages:</source>
+      <translation>Сообщение в канале:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for channel messages</source>
+      <translation>Задайте цвет для отображения сообщений в канале</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Join Channel:</source>
+      <translation>Зайти на канал:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for join channel messages</source>
+      <translation>Выберите цвет для отображения сообщений о присоединении канала</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Error Messages:</source>
+      <translation>Сообщение об ошибке:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for error messages</source>
+      <translation>Выберите цвет для отображения сообщений об ошибке</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Leave Channel:</source>
+      <translation>Уйти с канала:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for leave channel messages</source>
+      <translation>Выберите цвет для отображения сообщений об отключении канала</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Timestamp:</source>
+      <translation>Временная метка:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for timestamps</source>
+      <translation>Выберите цвет для временных меток</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Channel Info:</source>
+      <translation>Информация о канале:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for channel info messages</source>
+      <translation>Задайте цвет для отображения информационных сообщений в канале</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Hyperlink:</source>
+      <translation>Гиперссылка:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the color for hyperlinks</source>
+      <translation>Выберите цвет для отображения гиперссылок</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable to allow colored text in IRC messages</source>
+      <translation>Разрешить использование цветного текста в IRC сообщениях</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Allow Colored Text in IRC Messages</source>
+      <translation>Разрешить цвет</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable to show notifications</source>
+      <translation>Разрешить показ уведомлений</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Show Notifications</source>
+      <translation>Показывать уведомления</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show a notification for join and leave events</source>
+      <translation>Показывать уведомления о подсоединении или отсоединении пользователей</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Join/Leave Event</source>
+      <translation>Подсоединение/отсоединение</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show a notification for every message</source>
+      <translation>Показывать уведомления о каждом сообщении</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Every Message</source>
+      <translation>Каждое сообщение</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to show a notification for every mentioning of your nick</source>
+      <translation>Показывать уведомления о каждом упоминании вашего псевдонима</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Mentioning of Own Nick</source>
+      <translation>Упоминание вашего псевдонима</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select this to enable the automatic lookup of user information for joined channels</source>
+      <translation>Разрешить автоматический поиск информации о пользователях подключившихся каналов</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enable Automatic User Information Lookup (/WHO)</source>
+      <translation>Разрешать автоматический поиск информации пользователей (/WHO)</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Max. Number of Users in Channel:</source>
+      <translation>Максимальное количество пользователей в канале:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enter the maximum numbers of users in a channel allowed for this function</source>
+      <translation>Задайте максимальное количество пользователей в канале</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Update Interval:</source>
+      <translation>Интервал обновления:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Enter the user information update interval</source>
+      <translation>Задайте интервал обновления информации о пользователях</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source> s</source>
+      <translation> сек</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Marker</source>
+      <translation>Маркер</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select to mark the current position, when the chat window is hidden</source>
+      <translation>Пометить текущую позицию, когда окно разговора скрыто</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Mark Current Position When Hidden</source>
+      <translation>Помечать текущую позицию</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Marker Foreground:</source>
+      <translation>Цвет маркера:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the foreground color for the marker</source>
+      <translation>Выберите цвет маркера</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Select the background color for the marker</source>
+      <translation>Задайте цвет фона маркера</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/IrcPage.ui" line="0" />
+      <source>Marker Background:</source>
+      <translation>Фон маркера:</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcServerEditDialog</name>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>IRC Server</source>
+      <translation>IRC cервер</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Server:</source>
+      <translation>Сервер:</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Enter the host name of the IRC server</source>
+      <translation>Введите имя хоста IRC сервера</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation>Порт:</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Enter the port number</source>
+      <translation>Введите номер порта</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation>Пароль:</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Enter the server password</source>
+      <translation>Введите пароль</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Select to use an SSL encrypted connection</source>
+      <translation>Разрешить использовать шифрованное SSL соединение</translation>
+    </message>
+    <message>
+      <location filename="../IrcServerEditDialog.ui" line="0" />
+      <source>Use Encrypted Connection (SSL)</source>
+      <translation>Использовать SSL</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcUserItem</name>
+    <message>
+      <location filename="../IrcChannelWidget.py" line="136" />
+      <source>{0} (ignored)</source>
+      <translation>{0} (проигнорировано)</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcUtilities</name>
+    <message>
+      <location filename="../IrcUtilities.py" line="162" />
+      <source>anonymous</source>
+      <translation>анонимный</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="163" />
+      <source>ban mask</source>
+      <translation>шаблон запрета</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="164" />
+      <source>no colors allowed</source>
+      <translation>цвета запрещены</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="165" />
+      <source>ban exception mask</source>
+      <translation>маска исключений из запрета</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="166" />
+      <source>invite only</source>
+      <translation>только по приглашению</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="167" />
+      <source>password protected</source>
+      <translation>защищён паролем</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="168" />
+      <source>user limit</source>
+      <translation>ограниченное число пользователей</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="169" />
+      <source>moderated</source>
+      <translation>контролируемый</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="170" />
+      <source>no messages from outside</source>
+      <translation>внешние сообщения запрещены</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="171" />
+      <source>private</source>
+      <translation>приватный</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="172" />
+      <source>quiet</source>
+      <translation>тихий</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="173" />
+      <source>reop channel</source>
+      <translation>повторно открыть канал</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="174" />
+      <source>secret</source>
+      <translation>секретный</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="175" />
+      <source>topic protection</source>
+      <translation>защита темы</translation>
+    </message>
+    <message>
+      <location filename="../IrcUtilities.py" line="176" />
+      <source>invitation mask</source>
+      <translation>шаблон приглашения</translation>
+    </message>
+  </context>
+  <context>
+    <name>IrcWidget</name>
+    <message>
+      <location filename="../IrcWidget.py" line="86" />
+      <source>Press to leave the current channel</source>
+      <translation>Отключиться от текущего канала</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="225" />
+      <source>SSL Connection</source>
+      <translation>SSL соединение</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="226" />
+      <source>An encrypted connection to the IRC network was requested but SSL is not available. Please change the server configuration.</source>
+      <translation>Было запрошено шифрованное соединение к IRC сети, но SSL не доступен. Пожалуйста, измените настройки сервера.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="607" />
+      <location filename="../IrcWidget.py" line="572" />
+      <location filename="../IrcWidget.py" line="563" />
+      <location filename="../IrcWidget.py" line="302" />
+      <location filename="../IrcWidget.py" line="297" />
+      <location filename="../IrcWidget.py" line="290" />
+      <location filename="../IrcWidget.py" line="266" />
+      <location filename="../IrcWidget.py" line="252" />
+      <source>Info</source>
+      <translation>Информация</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="253" />
+      <source>Looking for server {0} (port {1}) using an SSL encrypted connection...</source>
+      <translation>Поиск сервера {0} (порт {1}) используя шифрованное SSL соединение...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="267" />
+      <source>Looking for server {0} (port {1})...</source>
+      <translation>Поиск сервера {0} (порт {1})...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="280" />
+      <source>Disconnect from Server</source>
+      <translation>Отключение от сервера</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="281" />
+      <source>&lt;p&gt;Do you really want to disconnect from &lt;b&gt;{0}&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;All channels will be closed.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Вы действительно хотите отключиться от &lt;b&gt;{0}&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Все каналы будут закрыты.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="291" />
+      <source>Disconnecting from server {0}...</source>
+      <translation>Отключение от сервера {0}...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="298" />
+      <source>Disconnecting from network {0}...</source>
+      <translation>Отключение от сети {0}...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="302" />
+      <source>Disconnecting from server.</source>
+      <translation>Отключение от сервера.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="563" />
+      <source>Server found,connecting...</source>
+      <translation>Сервер найден, соединение...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="572" />
+      <source>Connected,logging in...</source>
+      <translation>Соединение выполнено, вход...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="607" />
+      <source>Server disconnected.</source>
+      <translation>Сервер отсоединился.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="651" />
+      <source>Message Error</source>
+      <translation>Ошибка сообщения</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="652" />
+      <source>Unknown message received from server:&lt;br/&gt;{0}</source>
+      <translation>Неизвестное сообщение от сервера:&lt;br/&gt;{0}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1093" />
+      <location filename="../IrcWidget.py" line="1083" />
+      <location filename="../IrcWidget.py" line="1075" />
+      <location filename="../IrcWidget.py" line="1067" />
+      <location filename="../IrcWidget.py" line="695" />
+      <location filename="../IrcWidget.py" line="687" />
+      <source>CTCP</source>
+      <translation>CTCP (Клиент-клиент протокол)</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="688" />
+      <source>Received CTCP-PING response from {0} with latency of {1} ms.</source>
+      <translation>Получен CTCP-PING ответ от {0} с задержкой {1} мс.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="696" />
+      <source>Received unknown CTCP-{0} response from {1}.</source>
+      <translation>Получен неизвестный CTCP- {0} ответ от {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="724" />
+      <source>Notice</source>
+      <translation>Уведомление</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="734" />
+      <source>You have set your personal modes to &lt;b&gt;[{0}]&lt;/b&gt;.</source>
+      <translation>Ваши персональные режимы установлены: &lt;b&gt;[{0}]&lt;/b&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="738" />
+      <source>{0} has changed your personal modes to &lt;b&gt;[{1}]&lt;/b&gt;.</source>
+      <translation>{0} изменил ваши персональные режимы на: &lt;b&gt;[{1}]&lt;/b&gt;.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="742" />
+      <source>Mode</source>
+      <translation>Режим</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="750" />
+      <source>You have left channel {0}.</source>
+      <translation>Вы отключились от канала {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="762" />
+      <source>You are now known as {0}.</source>
+      <translation>Вы теперь {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="768" />
+      <source>User {0} is now known as {1}.</source>
+      <translation>Пользователь {0} сменил псевдоним на {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="774" />
+      <source>Received PONG from {0}</source>
+      <translation>Получен PONG из {0}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="779" />
+      <source>Server Error</source>
+      <translation>Ошибка сервера</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="817" />
+      <source>Error</source>
+      <translation>Ошибка</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="836" />
+      <source>Welcome</source>
+      <translation>Добро пожаловать</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="838" />
+      <source>Support</source>
+      <translation>Поддержка</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="840" />
+      <source>User</source>
+      <translation>Пользователь</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="842" />
+      <source>MOTD</source>
+      <translation>MOTD</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="844" />
+      <source>Away</source>
+      <translation>Отсутствует</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="846" />
+      <source>Info ({0})</source>
+      <translation>Инфо ({0})</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="850" />
+      <source>Message of the day</source>
+      <translation>Сообщение дня</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="852" />
+      <source>End of message of the day</source>
+      <translation>Конец сообщения дня</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="855" />
+      <source>Server {0} (Version {1}), User-Modes: {2}, Channel-Modes: {3}</source>
+      <translation>Сервер {0} (Версия {1}), Пользовательские режимы: {2}, Режимы каналов: {3}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="860" />
+      <source>Current users on {0}: {1}, max. {2}</source>
+      <translation>Текущее число пользователей на {0}: {1}, максимум: {2}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="865" />
+      <source>Current users on the network: {0}, max. {1}</source>
+      <translation>Текущее число пользователей в сети {0}, максимум: {1}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="869" />
+      <source>You are no longer marked as being away.</source>
+      <translation>Вы больше не отмечены как отсутствующий.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="871" />
+      <source>You have been marked as being away.</source>
+      <translation>Вы отмечены как отсутствующий.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1002" />
+      <location filename="../IrcWidget.py" line="986" />
+      <location filename="../IrcWidget.py" line="934" />
+      <source>SSL Error</source>
+      <translation>Ошибка SSL</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="935" />
+      <source>Connection to server {0} (port {1}) lost while waiting for user response to an SSL error.</source>
+      <translation>Соединение с сервером {0} (порт {1}) потеряно.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="971" />
+      <location filename="../IrcWidget.py" line="964" />
+      <location filename="../IrcWidget.py" line="959" />
+      <location filename="../IrcWidget.py" line="951" />
+      <location filename="../IrcWidget.py" line="943" />
+      <source>Socket Error</source>
+      <translation>Ошибка соединения</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="944" />
+      <source>The host was not found. Please check the host name and port settings.</source>
+      <translation>Хост не найден. Пожалуйста проверьте имя хоста и парамеры порта.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="952" />
+      <source>The connection was refused by the peer. Please check the host name and port settings.</source>
+      <translation>Сервер отказал в подключении. Пожалуйста проверьте имя хоста и парамеры порта.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="959" />
+      <source>The SSL handshake failed.</source>
+      <translation>Неудачное SSL соединение.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="965" />
+      <source>The following network error occurred:&lt;br/&gt;{0}</source>
+      <translation>Сетевая ошибка:&lt;br/&gt;{0}</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="971" />
+      <source>A network error occurred.</source>
+      <translation>Сетевая ошибка.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="987" />
+      <source>Could not connect to {0} (port {1}) using an SSL encrypted connection. Either the server does not support SSL (did you use the correct port?) or you rejected the certificate.</source>
+      <translation>Ошибка подключения к {0} (порт {1}) с использованием SSL. Либо сервер не поддерживает SSL (Вы выбрали правильный порт?), либо неправильный сертификат.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1003" />
+      <source>The SSL certificate for the server {0} (port {1}) failed the authenticity check. SSL errors were accepted by you.</source>
+      <translation>SSL сертификат сервера {0} (порт {1}) не прошел проверку на подлинность. Возможно Вы приняли ошибки SSL.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1068" />
+      <source>Received Version request from {0}.</source>
+      <translation>Получен запрос версии от {0}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1076" />
+      <source>Received CTCP-PING request from {0}, sending answer.</source>
+      <translation>CTCP-PING запрос от {0}, отправление ответа.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1084" />
+      <source>Received CTCP-CLIENTINFO request from {0}, sending answer.</source>
+      <translation>CTCP-CLIENTINFO запрос от {0}, отправление ответа.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1094" />
+      <source>Received unknown CTCP-{0} request from {1}.</source>
+      <translation>Неизвестный CTCP-{0} запрос от {1}.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1110" />
+      <source>{0} ({1})</source>
+      <comment>channel name, users count</comment>
+      <translation>{0} ({1})</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1152" />
+      <location filename="../IrcWidget.py" line="1132" />
+      <source>Critical</source>
+      <translation>Критическая</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1133" />
+      <source>No nickname acceptable to the server configured for &lt;b&gt;{0}&lt;/b&gt;. Disconnecting...</source>
+      <translation>На сервере нет приемлимых псевдонимов, сконфигурированных для &lt;b&gt;{0}&lt;/b&gt;. Отключение...</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.py" line="1152" />
+      <source>The given nickname is already in use.</source>
+      <translation>Данный псевдоним уже используется.</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.ui" line="0" />
+      <source>Channels</source>
+      <translation>Каналы</translation>
+    </message>
+    <message>
+      <location filename="../IrcWidget.ui" line="0" />
+      <source>Network</source>
+      <translation>Сеть</translation>
+    </message>
+  </context>
+</TS>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/dark/ircAdmin.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path class="ColorScheme-Text" d="m10.999 1a5.0449 5 0 0 0-5.045 5 5.0449 5 0 0 0 5.045 5 5.0449 5 0 0 0 5.045-5 5.0449 5 0 0 0-5.045-5zm0 1.25a3.7837 3.75 0 0 1 3.7837 3.75 3.7837 3.75 0 0 1-3.7837 3.75 3.7837 3.75 0 0 1-3.7837-3.75 3.7837 3.75 0 0 1 3.7837-3.75zm0 10a10.09 10 0 0 0-9.9988 8.75h1.2711a8.8286 8.75 0 0 1 8.7277-7.5 8.8286 8.75 0 0 1 8.7301 7.5h1.2711a10.09 10 0 0 0-10.001-8.75z" color="#eff0f1" fill="#b380ff"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/dark/ircAway.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path d="m12 9.375c1.4542 0 2.625 1.1708 2.625 2.625s-1.1708 2.625-2.625 2.625-2.625-1.1708-2.625-2.625 1.1708-2.625 2.625-2.625m0-0.375c-1.662 0-3 1.338-3 3s1.338 3 3 3 3-1.338 3-3-1.338-3-3-3" color="#eff0f1" fill="currentColor"/><path d="m11.625 9.75v2.625h2.25v-0.375h-1.875v-2.25h-0.375" color="#eff0f1"/><path d="m11.676 14.609c-0.98596-0.11724-1.8391-0.81419-2.1675-1.7707-0.085023-0.24762-0.10104-0.34997-0.11494-0.7343-0.013821-0.38222-0.00604-0.48655 0.053982-0.72391 0.31598-1.2495 1.451-2.0848 2.7166-1.9992 0.95688 0.064746 1.761 0.60101 2.183 1.4558 0.18682 0.37842 0.24603 0.60733 0.26894 1.0397 0.04233 0.79897-0.2394 1.4823-0.84592 2.0517-0.54678 0.51333-1.3385 0.77073-2.0941 0.68088zm2.218-2.4292 0.0098-0.20599h-1.8818v-2.2443l-0.41198 0.01962-0.0086 1.2853c-0.0047 0.70691-0.0014 1.3041 0.0074 1.327 0.01257 0.03275 0.25855 0.03985 1.1457 0.03304l1.1297-0.0087z" fill="#fff" stroke="#232629" stroke-width=".032958"/><path d="m11.703 14.574c-0.98355-0.090547-1.8772-0.8374-2.1839-1.8252-0.10396-0.33484-0.12883-0.9398-0.052908-1.2873 0.16507-0.75558 0.69558-1.4375 1.3916-1.7888 0.60674-0.30625 1.3231-0.34421 2.0134-0.10672 0.34839 0.11985 0.58439 0.26258 0.87099 0.52673 0.26792 0.24695 0.44825 0.50058 0.6203 0.87247 0.17382 0.37573 0.2126 0.56642 0.21191 1.0421-7.15e-4 0.49575-0.05105 0.71329-0.26692 1.1535-0.13267 0.27058-0.19874 0.35838-0.48646 0.64649-0.29947 0.29988-0.36768 0.35016-0.67864 0.50024-0.48668 0.23488-0.917 0.31454-1.4394 0.26645zm2.1154-2.1671c0.09672-0.02057 0.09909-0.02589 0.10862-0.24329l0.0097-0.22226h-1.8816v-2.2442l-0.44494 0.0195-0.02228 0.14831c-0.03041 0.20249-0.03216 2.446-0.0019 2.4933 0.01332 0.02083 0.06129 0.04477 0.10661 0.05319 0.12597 0.02341 2.0134 0.01938 2.1258-0.0045z" fill="#fff" stroke="#232629" stroke-width=".032958"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/dark/ircCloseChannel.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-NegativeText {
+                color:#da4453;
+            }</style></defs><g class="ColorScheme-NegativeText" transform="matrix(1.25 0 0 1.25 -2.75 -2.75)" color="#da4453" fill="currentColor"><path d="m11 3c4.432 0 8 3.568 8 8 0 1.442-0.383 2.79-1.045 3.955l-0.738-0.738a6.985 6.985 0 0 0 0.783-3.217c0-3.878-3.122-7-7-7a6.985 6.985 0 0 0-3.217 0.783l-0.738-0.738a7.982 7.982 0 0 1 3.955-1.045m-6.955 4.045 0.738 0.738a6.985 6.985 0 0 0-0.783 3.217c0 3.878 3.122 7 7 7a6.985 6.985 0 0 0 3.217-0.783l0.738 0.738a7.982 7.982 0 0 1-3.955 1.045c-4.432 0-8-3.568-8-8 0-1.442 0.383-2.79 1.045-3.955"/><path d="m7.5 9.998h7v2h-7z"/></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/dark/ircConfigure.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg fill="none" version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><path d="m3.5818 21c-0.3372-0.004723-0.66996-0.077708-0.97823-0.21466-0.30829-0.13696-0.5857-0.33502-0.81556-0.58217-0.44726-0.40814-0.72464-0.96999-0.7769-1.5738-0.059321-0.6241 0.12134-1.2473 0.50511-1.7425 1.7235-1.8209 5.1228-5.2262 7.5954-7.6513-0.52611-1.4252-0.50153-2.996 0.068943-4.404 0.4691-1.1715 1.3033-2.16 2.3785-2.8183 0.84344-0.55957 1.8129-0.89962 2.8206-0.98937 1.0077-0.08974 2.0217 0.073644 2.9506 0.47539l0.88157 0.3825-4.094 4.2234 1.7924 1.8009 4.2054-4.1172 0.38186 0.88586c0.32186 0.74686 0.49257 1.5503 0.50214 2.3638 0.0096 0.81344-0.14214 1.6207-0.44643 2.3749-0.30171 0.7458-0.74986 1.4233-1.3179 1.9922-0.32186 0.31551-0.67757 0.59434-1.0607 0.8314-0.79271 0.53032-1.6997 0.86463-2.6464 0.97546-0.94686 0.11082-1.9064-5e-3 -2.7998-0.33796-1.5684 1.5937-5.4834 5.5423-7.598 7.5197-0.42419 0.38596-0.97553 0.60163-1.5485 0.60564zm11.339-18.672c-0.93972-0.00236-1.8589 0.275-2.6409 0.79687-0.30499 0.18654-0.58824 0.4066-0.84451 0.65608-0.68156 0.68825-1.1367 1.5688-1.3045 2.5236-0.16777 0.95476-0.04011 1.9381 0.36586 2.8181l0.19357 0.42499-0.33277 0.32539c-2.4832 2.4278-6.0986 6.039-7.8367 7.8771-0.15476 0.23083-0.22096 0.5099-0.18634 0.78567 0.0346 0.27591 0.16766 0.52993 0.3746 0.71511 0.11926 0.13309 0.26457 0.24028 0.42691 0.3147 0.14309 0.06483 0.29774 0.10003 0.45474 0.10361 0.23844-6e-3 0.46673-0.09803 0.643-0.25888 2.2472-2.1011 6.5891-6.4945 7.8632-7.7855l0.32747-0.33071 0.4216 0.19258c0.73393 0.34273 1.5438 0.48946 2.3511 0.42592 0.80728-0.06353 1.5844-0.33516 2.256-0.7885 0.30557-0.18872 0.58886-0.41148 0.84443-0.66405 0.44257-0.44209 0.79229-0.96843 1.0287-1.548 0.23628-0.57958 0.35443-1.2007 0.34757-1.8267 0-0.30863-0.03057-0.61651-0.09157-0.91906l-3.6817 3.5992-3.6445-3.6457 3.5928-3.7054c-0.30571-0.059533-0.61657-0.088455-0.928-0.086323z" fill="#eff0f1" stroke-width="1.4298"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/dark/ircConnect.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path class="ColorScheme-Text" d="m20.116 1-4.375 4.375-1.875-1.875-9.1162 9.1162 1.875 1.875-5.625 5.625 0.88379 0.88379 5.625-5.625 1.875 1.875 9.1162-9.1162-1.875-1.875 4.375-4.375z" color="#eff0f1" fill="currentColor"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/dark/ircDisconnect.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }
+      .ColorScheme-NegativeText {
+        color:#da4453;
+      }</style></defs><path class="ColorScheme-Text" d="m20.116 1-4.375 4.375-1.875-1.875-4.7412 4.7412 4.6338 4.6338 4.7412-4.7412-1.875-1.875 4.375-4.375zm-11.875 8.125-3.4912 3.4912 1.875 1.875-5.625 5.625 0.88379 0.88379 5.625-5.625 1.875 1.875 3.4912-3.4912-2.7588-2.7588z" color="#eff0f1" fill="currentColor"/><path class="ColorScheme-NegativeText" d="m14.834 14-0.83398 0.83398 1.666 1.666-1.666 1.666 0.83398 0.83398 1.666-1.666 1.666 1.666 0.83398-0.83398-1.666-1.666 1.666-1.666-0.83398-0.83398-1.666 1.666-1.666-1.666z" fill="currentColor"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/dark/ircEditTopic.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path class="ColorScheme-Text" d="m6 1v5h-5v1.25h5v7.5h-5v1.25h5v5h1.25v-5h3.75v-1.25h-3.75v-7.5h7.5v3.75h1.25v-3.75h5v-1.25h-5v-5h-1.25v5h-7.5v-5z" color="#eff0f1" fill="currentColor"/><path class="ColorScheme-Text" d="m18.374 12.25-6.1239 6.1239v2.6261h2.6261l6.1239-6.1239zm-1.4939 2.545 1.5751 1.5751-2.3142 2.3157v-0.49276l-0.73914 0.01566h-0.7548v-1.182l1.051-1.0496zm-2.9722 2.9708v1.182h1.4783l0.01566 0.47567-0.78756 0.78898h-1.051l-0.52551-0.52551v-1.051z" color="#eff0f1" fill="currentColor"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/dark/ircHalfOp.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path d="m10.998 1a5.0449 5 0 0 0-5.0449 5 5.0449 5 0 0 0 5.0449 5 5.0449 5 0 0 0 5.0449-5 5.0449 5 0 0 0-5.0449-5zm0 1.25a3.7837 3.75 0 0 1 3.7852 3.75 3.7837 3.75 0 0 1-3.7852 3.75 3.7837 3.75 0 0 1-3.7832-3.75 3.7837 3.75 0 0 1 3.7832-3.75zm0 10a10.09 10 0 0 0-9.998 8.75h1.2715a8.8286 8.75 0 0 1 8.7266-7.5 8.8286 8.75 0 0 1 3.877 0.9043h2.3555a10.09 10 0 0 0-6.2324-2.1543z" color="#eff0f1" fill="#87de87"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/dark/ircJoinChannel.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path class="ColorScheme-Text" d="m6 1v5h-5v1.25h5v7.5h-5v1.25h5v5h1.25v-5h3.75v-1.25h-3.75v-7.5h7.5v3.75h1.25v-3.75h5v-1.25h-5v-5h-1.25v5h-7.5v-5z" color="#eff0f1" fill="currentColor"/><path d="m16.625 12.25c-2.4238 0-4.375 1.9512-4.375 4.375s1.9512 4.375 4.375 4.375 4.375-1.9512 4.375-4.375-1.9512-4.375-4.375-4.375z" fill="#2ecc71"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/dark/ircNormal.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path class="ColorScheme-Text" d="m10.999 1a5.0449 5 0 0 0-5.045 5 5.0449 5 0 0 0 5.045 5 5.0449 5 0 0 0 5.045-5 5.0449 5 0 0 0-5.045-5zm0 1.25a3.7837 3.75 0 0 1 3.7837 3.75 3.7837 3.75 0 0 1-3.7837 3.75 3.7837 3.75 0 0 1-3.7837-3.75 3.7837 3.75 0 0 1 3.7837-3.75zm0 10a10.09 10 0 0 0-9.9988 8.75h1.2711a8.8286 8.75 0 0 1 8.7277-7.5 8.8286 8.75 0 0 1 8.7301 7.5h1.2711a10.09 10 0 0 0-10.001-8.75z" color="#eff0f1" fill="currentColor"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/dark/ircOp.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path class="ColorScheme-Text" d="m10.999 1a5.0449 5 0 0 0-5.045 5 5.0449 5 0 0 0 5.045 5 5.0449 5 0 0 0 5.045-5 5.0449 5 0 0 0-5.045-5zm0 1.25a3.7837 3.75 0 0 1 3.7837 3.75 3.7837 3.75 0 0 1-3.7837 3.75 3.7837 3.75 0 0 1-3.7837-3.75 3.7837 3.75 0 0 1 3.7837-3.75zm0 10a10.09 10 0 0 0-9.9988 8.75h1.2711a8.8286 8.75 0 0 1 8.7277-7.5 8.8286 8.75 0 0 1 8.7301 7.5h1.2711a10.09 10 0 0 0-10.001-8.75z" color="#eff0f1" fill="#87de87"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/dark/ircOwner.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path class="ColorScheme-Text" d="m10.999 1a5.0449 5 0 0 0-5.045 5 5.0449 5 0 0 0 5.045 5 5.0449 5 0 0 0 5.045-5 5.0449 5 0 0 0-5.045-5zm0 1.25a3.7837 3.75 0 0 1 3.7837 3.75 3.7837 3.75 0 0 1-3.7837 3.75 3.7837 3.75 0 0 1-3.7837-3.75 3.7837 3.75 0 0 1 3.7837-3.75zm0 10a10.09 10 0 0 0-9.9988 8.75h1.2711a8.8286 8.75 0 0 1 8.7277-7.5 8.8286 8.75 0 0 1 8.7301 7.5h1.2711a10.09 10 0 0 0-10.001-8.75z" color="#eff0f1" fill="#de8787"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/dark/ircUserAway.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1.2557 0 0 1.25 -532.39 -659.97)" fill="#fdbc4b"><path d="m432.71 528.79a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 1a3 3 0 0 1 3 3 3 3 0 0 1-3 3 3 3 0 0 1-3-3 3 3 0 0 1 3-3"/><path transform="translate(420.71 524.79)" d="m12 13a8 8 0 0 0-7.9277 7h1.0078a7 7 0 0 1 6.9199-6 7 7 0 0 1 1 0.08008v-1.0098a8 8 0 0 0-1-0.07031"/><path d="m440.71 536.79-8 4 2 1 1 3 1-2 2 1z" fill-rule="evenodd"/></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/dark/ircUserPresent.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1.2557 0 0 1.25 -532.39 -659.97)"><g fill="#43be80"><path d="m432.71 528.79a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 1a3 3 0 0 1 3 3 3 3 0 0 1-3 3 3 3 0 0 1-3-3 3 3 0 0 1 3-3"/><path transform="translate(421.71 525.79)" d="m11 12a8 8 0 0 0-7.9277 7h1.0078a7 7 0 0 1 6.9199-6 7 7 0 0 1 1 0.08008v-1.0098a8 8 0 0 0-1-0.07031"/><circle cx="437.21" cy="541.29" r="3.5"/></g><path d="m438.71 539.79 1 1-3 3-2-2 1-1 1 1z" fill="#fff" fill-rule="evenodd"/></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/dark/ircVoice.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path class="ColorScheme-Text" d="m15 4-12 3.418v6.1641l1 0.28516v2.4336l6 1.6992v-2.4238l5 1.4238v-13zm4.0293 0.42773-0.77148 0.63086c1.1373 1.7722 1.7419 3.8337 1.7422 5.9395-4e-3 2.1039-0.61142 4.1625-1.75 5.9316l0.7832 0.64258c1.2816-1.9532 1.9651-4.2381 1.9668-6.5742-4e-3 -2.3352-0.6885-4.6186-1.9707-6.5703zm-5.0293 0.90039v10.344l-10-2.8477v-4.6484l10-2.8477zm2.6895 1.0156-0.78125 0.63867c0.71179 1.2188 1.0885 2.6042 1.0918 4.0156-2e-3 1.4119-0.3784 2.798-1.0898 4.0176l0.78125 0.64062c0.85323-1.4042 1.3058-3.0151 1.3086-4.6582-4e-3 -1.6419-0.45732-3.2515-1.3105-4.6543zm-14.689 1.3594-1 0.28516v5.0234l1 0.28516v-5.5937zm3 6.4492 4 1.1387v1.4258l-4-1.1328v-1.4316z" fill="currentColor"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/irc.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="i" x2="0" y1="34" y2="4" gradientUnits="userSpaceOnUse"><stop stop-color="#7cbaf8" offset="0"/><stop stop-color="#f4fcff" offset="1"/></linearGradient><linearGradient id="e" x1="405.57" x2="427.57" y1="509.8" y2="533.8" gradientUnits="userSpaceOnUse"><stop stop-opacity=".286" offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><linearGradient id="h" x1="412.57" x2="425.57" y1="514.8" y2="527.8" gradientUnits="userSpaceOnUse" xlink:href="#e"/><linearGradient id="g" x2="0" y1="44" y2="4" gradientTransform="matrix(-1,0,0,1,432.57,499.8)" gradientUnits="userSpaceOnUse"><stop stop-color="#2f74c8" offset="0"/><stop stop-color="#4699d7" offset="1"/></linearGradient><linearGradient id="f" x1="405.57" x2="427.57" y1="509.8" y2="533.8" gradientUnits="userSpaceOnUse" xlink:href="#e"/></defs><g transform="matrix(.5 0 0 .5 -193.28 -250.9)" fill-rule="evenodd"><path d="m428.57 503.8v30h-20l-11 10v-10h-9v-30z" fill="url(#g)"/><path d="m402.57 534.8-6-6v-3l-3-3v-9h4l1 1v-1l20-6 10 7.461v18.539h-26z" fill="url(#f)" opacity=".2"/><path d="m419.57 521.8 9 9v-11l-5-5h-4z" fill="url(#h)" opacity=".2"/><path transform="translate(384.57,499.8)" d="m34 8-20 6v9l20 6v-15zm-25 6v9h4v-9zm26 1v7h4v-7zm-23 9v5h3v-5z" fill="url(#i)"/></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/irc128.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="i" x2="0" y1="34" y2="4" gradientUnits="userSpaceOnUse"><stop stop-color="#7cbaf8" offset="0"/><stop stop-color="#f4fcff" offset="1"/></linearGradient><linearGradient id="e" x1="405.57" x2="427.57" y1="509.8" y2="533.8" gradientUnits="userSpaceOnUse"><stop stop-opacity=".286" offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><linearGradient id="h" x1="412.57" x2="425.57" y1="514.8" y2="527.8" gradientUnits="userSpaceOnUse" xlink:href="#e"/><linearGradient id="g" x2="0" y1="44" y2="4" gradientTransform="matrix(-1,0,0,1,432.57,499.8)" gradientUnits="userSpaceOnUse"><stop stop-color="#2f74c8" offset="0"/><stop stop-color="#4699d7" offset="1"/></linearGradient><linearGradient id="f" x1="405.57" x2="427.57" y1="509.8" y2="533.8" gradientUnits="userSpaceOnUse" xlink:href="#e"/></defs><g transform="matrix(3 0 0 3 -1161.7 -1507.4)" fill-rule="evenodd"><path d="m428.57 503.8v30h-20l-11 10v-10h-9v-30z" fill="url(#g)"/><path d="m402.57 534.8-6-6v-3l-3-3v-9h4l1 1v-1l20-6 10 7.461v18.539h-26z" fill="url(#f)" opacity=".2"/><path d="m419.57 521.8 9 9v-11l-5-5h-4z" fill="url(#h)" opacity=".2"/><path transform="translate(384.57,499.8)" d="m34 8-20 6v9l20 6v-15zm-25 6v9h4v-9zm26 1v7h4v-7zm-23 9v5h3v-5z" fill="url(#i)"/></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/irc48.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="i" x2="0" y1="34" y2="4" gradientUnits="userSpaceOnUse"><stop stop-color="#7cbaf8" offset="0"/><stop stop-color="#f4fcff" offset="1"/></linearGradient><linearGradient id="e" x1="405.57" x2="427.57" y1="509.8" y2="533.8" gradientUnits="userSpaceOnUse"><stop stop-opacity=".286" offset="0"/><stop stop-opacity="0" offset="1"/></linearGradient><linearGradient id="h" x1="412.57" x2="425.57" y1="514.8" y2="527.8" gradientUnits="userSpaceOnUse" xlink:href="#e"/><linearGradient id="g" x2="0" y1="44" y2="4" gradientTransform="matrix(-1,0,0,1,432.57,499.8)" gradientUnits="userSpaceOnUse"><stop stop-color="#2f74c8" offset="0"/><stop stop-color="#4699d7" offset="1"/></linearGradient><linearGradient id="f" x1="405.57" x2="427.57" y1="509.8" y2="533.8" gradientUnits="userSpaceOnUse" xlink:href="#e"/></defs><g transform="matrix(1.1 0 0 1.1 -425.43 -552.18)" fill-rule="evenodd"><path d="m428.57 503.8v30h-20l-11 10v-10h-9v-30z" fill="url(#g)"/><path d="m402.57 534.8-6-6v-3l-3-3v-9h4l1 1v-1l20-6 10 7.461v18.539h-26z" fill="url(#f)" opacity=".2"/><path d="m419.57 521.8 9 9v-11l-5-5h-4z" fill="url(#h)" opacity=".2"/><path transform="translate(384.57,499.8)" d="m34 8-20 6v9l20 6v-15zm-25 6v9h4v-9zm26 1v7h4v-7zm-23 9v5h3v-5z" fill="url(#i)"/></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/light/ircAdmin.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path class="ColorScheme-Text" d="m10.999 1a5.0449 5 0 0 0-5.045 5 5.0449 5 0 0 0 5.045 5 5.0449 5 0 0 0 5.045-5 5.0449 5 0 0 0-5.045-5zm0 1.25a3.7837 3.75 0 0 1 3.7837 3.75 3.7837 3.75 0 0 1-3.7837 3.75 3.7837 3.75 0 0 1-3.7837-3.75 3.7837 3.75 0 0 1 3.7837-3.75zm0 10a10.09 10 0 0 0-9.9988 8.75h1.2711a8.8286 8.75 0 0 1 8.7277-7.5 8.8286 8.75 0 0 1 8.7301 7.5h1.2711a10.09 10 0 0 0-10.001-8.75z" color="#eff0f1" fill="#95f"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/light/ircAway.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path d="m12 9.375c1.4542 0 2.625 1.1708 2.625 2.625s-1.1708 2.625-2.625 2.625-2.625-1.1708-2.625-2.625 1.1708-2.625 2.625-2.625m0-0.375c-1.662 0-3 1.338-3 3s1.338 3 3 3 3-1.338 3-3-1.338-3-3-3" color="#eff0f1" fill="#232629"/><path d="m11.625 9.75v2.625h2.25v-0.375h-1.875v-2.25h-0.375" color="#eff0f1"/><path d="m11.676 14.609c-0.98596-0.11724-1.8391-0.81419-2.1675-1.7707-0.085023-0.24762-0.10104-0.34997-0.11494-0.7343-0.013821-0.38222-0.00604-0.48655 0.053982-0.72391 0.31598-1.2495 1.451-2.0848 2.7166-1.9992 0.95688 0.064746 1.761 0.60101 2.183 1.4558 0.18682 0.37842 0.24603 0.60733 0.26894 1.0397 0.04233 0.79897-0.2394 1.4823-0.84592 2.0517-0.54678 0.51333-1.3385 0.77073-2.0941 0.68088zm2.218-2.4292 0.0098-0.20599h-1.8818v-2.2443l-0.41198 0.01962-0.0086 1.2853c-0.0047 0.70691-0.0014 1.3041 0.0074 1.327 0.01257 0.03275 0.25855 0.03985 1.1457 0.03304l1.1297-0.0087z" fill="#fff" stroke="#232629" stroke-width=".032958"/><path d="m11.703 14.574c-0.98355-0.090547-1.8772-0.8374-2.1839-1.8252-0.10396-0.33484-0.12883-0.9398-0.052908-1.2873 0.16507-0.75558 0.69558-1.4375 1.3916-1.7888 0.60674-0.30625 1.3231-0.34421 2.0134-0.10672 0.34839 0.11985 0.58439 0.26258 0.87099 0.52673 0.26792 0.24695 0.44825 0.50058 0.6203 0.87247 0.17382 0.37573 0.2126 0.56642 0.21191 1.0421-7.15e-4 0.49575-0.05105 0.71329-0.26692 1.1535-0.13267 0.27058-0.19874 0.35838-0.48646 0.64649-0.29947 0.29988-0.36768 0.35016-0.67864 0.50024-0.48668 0.23488-0.917 0.31454-1.4394 0.26645zm2.1154-2.1671c0.09672-0.02057 0.09909-0.02589 0.10862-0.24329l0.0097-0.22226h-1.8816v-2.2442l-0.44494 0.0195-0.02228 0.14831c-0.03041 0.20249-0.03216 2.446-0.0019 2.4933 0.01332 0.02083 0.06129 0.04477 0.10661 0.05319 0.12597 0.02341 2.0134 0.01938 2.1258-0.0045z" fill="#fff" stroke="#232629" stroke-width=".032958"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/light/ircCloseChannel.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-NegativeText {
+                color:#da4453;
+            }</style></defs><g class="ColorScheme-NegativeText" transform="matrix(1.25 0 0 1.25 -2.75 -2.75)" color="#da4453" fill="currentColor"><path d="m11 3c4.432 0 8 3.568 8 8 0 1.442-0.383 2.79-1.045 3.955l-0.738-0.738a6.985 6.985 0 0 0 0.783-3.217c0-3.878-3.122-7-7-7a6.985 6.985 0 0 0-3.217 0.783l-0.738-0.738a7.982 7.982 0 0 1 3.955-1.045m-6.955 4.045 0.738 0.738a6.985 6.985 0 0 0-0.783 3.217c0 3.878 3.122 7 7 7a6.985 6.985 0 0 0 3.217-0.783l0.738 0.738a7.982 7.982 0 0 1-3.955 1.045c-4.432 0-8-3.568-8-8 0-1.442 0.383-2.79 1.045-3.955"/><path d="m7.5 9.998h7v2h-7z"/></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/light/ircConfigure.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg fill="none" version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><path d="m3.5818 21c-0.3372-0.004723-0.66996-0.077708-0.97823-0.21466-0.30829-0.13696-0.5857-0.33502-0.81556-0.58217-0.44726-0.40814-0.72464-0.96999-0.7769-1.5738-0.059321-0.6241 0.12134-1.2473 0.50511-1.7425 1.7235-1.8209 5.1228-5.2262 7.5954-7.6513-0.52611-1.4252-0.50153-2.996 0.068943-4.404 0.4691-1.1715 1.3033-2.16 2.3785-2.8183 0.84344-0.55957 1.8129-0.89962 2.8206-0.98937 1.0077-0.08974 2.0217 0.073644 2.9506 0.47539l0.88157 0.3825-4.094 4.2234 1.7924 1.8009 4.2054-4.1172 0.38186 0.88586c0.32186 0.74686 0.49257 1.5503 0.50214 2.3638 0.0096 0.81344-0.14214 1.6207-0.44643 2.3749-0.30171 0.7458-0.74986 1.4233-1.3179 1.9922-0.32186 0.31551-0.67757 0.59434-1.0607 0.8314-0.79271 0.53032-1.6997 0.86463-2.6464 0.97546-0.94686 0.11082-1.9064-5e-3 -2.7998-0.33796-1.5684 1.5937-5.4834 5.5423-7.598 7.5197-0.42419 0.38596-0.97553 0.60163-1.5485 0.60564zm11.339-18.672c-0.93972-0.00236-1.8589 0.275-2.6409 0.79687-0.30499 0.18654-0.58824 0.4066-0.84451 0.65608-0.68156 0.68825-1.1367 1.5688-1.3045 2.5236-0.16777 0.95476-0.04011 1.9381 0.36586 2.8181l0.19357 0.42499-0.33277 0.32539c-2.4832 2.4278-6.0986 6.039-7.8367 7.8771-0.15476 0.23083-0.22096 0.5099-0.18634 0.78567 0.0346 0.27591 0.16766 0.52993 0.3746 0.71511 0.11926 0.13309 0.26457 0.24028 0.42691 0.3147 0.14309 0.06483 0.29774 0.10003 0.45474 0.10361 0.23844-6e-3 0.46673-0.09803 0.643-0.25888 2.2472-2.1011 6.5891-6.4945 7.8632-7.7855l0.32747-0.33071 0.4216 0.19258c0.73393 0.34273 1.5438 0.48946 2.3511 0.42592 0.80728-0.06353 1.5844-0.33516 2.256-0.7885 0.30557-0.18872 0.58886-0.41148 0.84443-0.66405 0.44257-0.44209 0.79229-0.96843 1.0287-1.548 0.23628-0.57958 0.35443-1.2007 0.34757-1.8267 0-0.30863-0.03057-0.61651-0.09157-0.91906l-3.6817 3.5992-3.6445-3.6457 3.5928-3.7054c-0.30571-0.059533-0.61657-0.088455-0.928-0.086323z" fill="#232629" stroke-width="1.4298"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/light/ircConnect.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path class="ColorScheme-Text" d="m20.116 1-4.375 4.375-1.875-1.875-9.1162 9.1162 1.875 1.875-5.625 5.625 0.88379 0.88379 5.625-5.625 1.875 1.875 9.1162-9.1162-1.875-1.875 4.375-4.375z" color="#eff0f1" fill="#232629"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/light/ircDisconnect.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }
+      .ColorScheme-NegativeText {
+        color:#da4453;
+      }</style></defs><path class="ColorScheme-Text" d="m20.116 1-4.375 4.375-1.875-1.875-4.7412 4.7412 4.6338 4.6338 4.7412-4.7412-1.875-1.875 4.375-4.375zm-11.875 8.125-3.4912 3.4912 1.875 1.875-5.625 5.625 0.88379 0.88379 5.625-5.625 1.875 1.875 3.4912-3.4912-2.7588-2.7588z" color="#eff0f1" fill="#232629"/><path class="ColorScheme-NegativeText" d="M 14.334374,13 13,14.334374 15.665626,17 13,19.665626 14.334374,21 17,18.334374 19.665626,21 21,19.665626 18.334374,17 21,14.334374 19.665626,13 17,15.665626 Z" color="#da4453" fill="currentColor"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/light/ircEditTopic.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path class="ColorScheme-Text" d="m6 1v5h-5v1.25h5v7.5h-5v1.25h5v5h1.25v-5h3.75v-1.25h-3.75v-7.5h7.5v3.75h1.25v-3.75h5v-1.25h-5v-5h-1.25v5h-7.5v-5z" color="#eff0f1" fill="#232629"/><path class="ColorScheme-Text" d="m18.374 12.25-6.1239 6.1239v2.6261h2.6261l6.1239-6.1239zm-1.4939 2.545 1.5751 1.5751-2.3142 2.3157v-0.49276l-0.73914 0.01566h-0.7548v-1.182l1.051-1.0496zm-2.9722 2.9708v1.182h1.4783l0.01566 0.47567-0.78756 0.78898h-1.051l-0.52551-0.52551v-1.051z" color="#eff0f1" fill="#232629"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/light/ircHalfOp.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path d="m10.998 1a5.0449 5 0 0 0-5.0449 5 5.0449 5 0 0 0 5.0449 5 5.0449 5 0 0 0 5.0449-5 5.0449 5 0 0 0-5.0449-5zm0 1.25a3.7837 3.75 0 0 1 3.7852 3.75 3.7837 3.75 0 0 1-3.7852 3.75 3.7837 3.75 0 0 1-3.7832-3.75 3.7837 3.75 0 0 1 3.7832-3.75zm0 10a10.09 10 0 0 0-9.998 8.75h1.2715a8.8286 8.75 0 0 1 8.7266-7.5 8.8286 8.75 0 0 1 3.9805 0.95312h2.3125a10.09 10 0 0 0-6.293-2.2031z" color="#eff0f1" fill="#2ca05a"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/light/ircJoinChannel.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path class="ColorScheme-Text" d="m6 1v5h-5v1.25h5v7.5h-5v1.25h5v5h1.25v-5h3.75v-1.25h-3.75v-7.5h7.5v3.75h1.25v-3.75h5v-1.25h-5v-5h-1.25v5h-7.5v-5z" color="#eff0f1" fill="#232629"/><path d="m16.625 12.25c-2.4238 0-4.375 1.9512-4.375 4.375s1.9512 4.375 4.375 4.375 4.375-1.9512 4.375-4.375-1.9512-4.375-4.375-4.375z" fill="#2ecc71"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/light/ircNormal.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path class="ColorScheme-Text" d="m10.999 1a5.0449 5 0 0 0-5.045 5 5.0449 5 0 0 0 5.045 5 5.0449 5 0 0 0 5.045-5 5.0449 5 0 0 0-5.045-5zm0 1.25a3.7837 3.75 0 0 1 3.7837 3.75 3.7837 3.75 0 0 1-3.7837 3.75 3.7837 3.75 0 0 1-3.7837-3.75 3.7837 3.75 0 0 1 3.7837-3.75zm0 10a10.09 10 0 0 0-9.9988 8.75h1.2711a8.8286 8.75 0 0 1 8.7277-7.5 8.8286 8.75 0 0 1 8.7301 7.5h1.2711a10.09 10 0 0 0-10.001-8.75z" color="#eff0f1" fill="#232629"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/light/ircOp.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path class="ColorScheme-Text" d="m10.999 1a5.0449 5 0 0 0-5.045 5 5.0449 5 0 0 0 5.045 5 5.0449 5 0 0 0 5.045-5 5.0449 5 0 0 0-5.045-5zm0 1.25a3.7837 3.75 0 0 1 3.7837 3.75 3.7837 3.75 0 0 1-3.7837 3.75 3.7837 3.75 0 0 1-3.7837-3.75 3.7837 3.75 0 0 1 3.7837-3.75zm0 10a10.09 10 0 0 0-9.9988 8.75h1.2711a8.8286 8.75 0 0 1 8.7277-7.5 8.8286 8.75 0 0 1 8.7301 7.5h1.2711a10.09 10 0 0 0-10.001-8.75z" color="#eff0f1" fill="#2ca05a"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/light/ircOwner.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path class="ColorScheme-Text" d="m10.999 1a5.0449 5 0 0 0-5.045 5 5.0449 5 0 0 0 5.045 5 5.0449 5 0 0 0 5.045-5 5.0449 5 0 0 0-5.045-5zm0 1.25a3.7837 3.75 0 0 1 3.7837 3.75 3.7837 3.75 0 0 1-3.7837 3.75 3.7837 3.75 0 0 1-3.7837-3.75 3.7837 3.75 0 0 1 3.7837-3.75zm0 10a10.09 10 0 0 0-9.9988 8.75h1.2711a8.8286 8.75 0 0 1 8.7277-7.5 8.8286 8.75 0 0 1 8.7301 7.5h1.2711a10.09 10 0 0 0-10.001-8.75z" color="#eff0f1" fill="#c83737"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/light/ircUserAway.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1.2557 0 0 1.25 -532.39 -659.97)" fill="#ff9000"><path d="m432.71 528.79a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 1a3 3 0 0 1 3 3 3 3 0 0 1-3 3 3 3 0 0 1-3-3 3 3 0 0 1 3-3"/><path transform="translate(420.71 524.79)" d="m12 13a8 8 0 0 0-7.9277 7h1.0078a7 7 0 0 1 6.9199-6 7 7 0 0 1 1 0.08008v-1.0098a8 8 0 0 0-1-0.07031"/><path d="m440.71 536.79-8 4 2 1 1 3 1-2 2 1z" fill-rule="evenodd"/></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/light/ircUserPresent.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1.2557 0 0 1.25 -532.39 -659.97)"><g fill="#43be80"><path d="m432.71 528.79a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 1a3 3 0 0 1 3 3 3 3 0 0 1-3 3 3 3 0 0 1-3-3 3 3 0 0 1 3-3"/><path transform="translate(421.71 525.79)" d="m11 12a8 8 0 0 0-7.9277 7h1.0078a7 7 0 0 1 6.9199-6 7 7 0 0 1 1 0.08008v-1.0098a8 8 0 0 0-1-0.07031"/><circle cx="437.21" cy="541.29" r="3.5"/></g><path d="m438.71 539.79 1 1-3 3-2-2 1-1 1 1z" fill="#fff" fill-rule="evenodd"/></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/light/ircVoice.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><defs><style type="text/css">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style></defs><path class="ColorScheme-Text" d="m15 4-12 3.418v6.1641l1 0.28516v2.4336l6 1.6992v-2.4238l5 1.4238v-13zm4.0293 0.42773-0.77148 0.63086c1.1373 1.7722 1.7419 3.8337 1.7422 5.9395-4e-3 2.1039-0.61142 4.1625-1.75 5.9316l0.7832 0.64258c1.2816-1.9532 1.9651-4.2381 1.9668-6.5742-4e-3 -2.3352-0.6885-4.6186-1.9707-6.5703zm-5.0293 0.90039v10.344l-10-2.8477v-4.6484l10-2.8477zm2.6895 1.0156-0.78125 0.63867c0.71179 1.2188 1.0885 2.6042 1.0918 4.0156-2e-3 1.4119-0.3784 2.798-1.0898 4.0176l0.78125 0.64062c0.85323-1.4042 1.3058-3.0151 1.3086-4.6582-4e-3 -1.6419-0.45732-3.2515-1.3105-4.6543zm-14.689 1.3594-1 0.28516v5.0234l1 0.28516v-5.5937zm3 6.4492 4 1.1387v1.4258l-4-1.1328v-1.4316z" fill="#232629"/></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/sbIrc48.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   viewBox="0 0 48 48"
+   id="svg31"
+   sodipodi:docname="sbIrc48.svg"
+   inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
+  <metadata
+     id="metadata35">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1650"
+     inkscape:window-height="1051"
+     id="namedview33"
+     showgrid="false"
+     inkscape:zoom="14.895833"
+     inkscape:cx="24"
+     inkscape:cy="24"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg31" />
+  <defs
+     id="defs19">
+    <linearGradient
+       id="i"
+       x2="0"
+       y1="34"
+       y2="4"
+       gradientUnits="userSpaceOnUse">
+      <stop
+         stop-color="#7cbaf8"
+         offset="0"
+         id="stop2" />
+      <stop
+         stop-color="#f4fcff"
+         offset="1"
+         id="stop4" />
+    </linearGradient>
+    <linearGradient
+       id="e"
+       x1="405.57"
+       x2="427.57"
+       y1="509.8"
+       y2="533.8"
+       gradientUnits="userSpaceOnUse">
+      <stop
+         stop-opacity=".286"
+         offset="0"
+         id="stop7" />
+      <stop
+         stop-opacity="0"
+         offset="1"
+         id="stop9" />
+    </linearGradient>
+    <linearGradient
+       id="h"
+       x1="412.57"
+       x2="425.57"
+       y1="514.8"
+       y2="527.8"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#e" />
+    <linearGradient
+       id="g"
+       x2="0"
+       y1="44"
+       y2="4"
+       gradientTransform="matrix(-1,0,0,1,432.57,499.8)"
+       gradientUnits="userSpaceOnUse">
+      <stop
+         stop-color="#2f74c8"
+         offset="0"
+         id="stop13" />
+      <stop
+         stop-color="#4699d7"
+         offset="1"
+         id="stop15" />
+    </linearGradient>
+    <linearGradient
+       id="f"
+       x1="405.57"
+       x2="427.57"
+       y1="509.8"
+       y2="533.8"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#e" />
+  </defs>
+  <g
+     transform="translate(-384.57,-499.8)"
+     fill-rule="evenodd"
+     id="g29">
+    <path
+       d="m 428.57,503.8 v 30 h -20 l -11,10 v -10 h -9 v -30 z"
+       fill="url(#g)"
+       id="path21"
+       style="fill:url(#g)" />
+    <path
+       d="m 402.57,534.8 -6,-6 v -3 l -3,-3 v -9 h 4 l 1,1 v -1 l 20,-6 10,7.461 V 533.8 h -26 z"
+       fill="url(#f)"
+       opacity="0.2"
+       id="path23"
+       style="fill:url(#f)" />
+    <path
+       d="m 419.57,521.8 9,9 v -11 l -5,-5 h -4 z"
+       fill="url(#h)"
+       opacity="0.2"
+       id="path25"
+       style="fill:url(#h)" />
+    <path
+       transform="translate(384.57,499.8)"
+       d="m 34,8 -20,6 v 9 l 20,6 V 14 Z M 9,14 v 9 h 4 v -9 z m 26,1 v 7 h 4 v -7 z m -23,9 v 5 h 3 v -5 z"
+       fill="url(#i)"
+       id="path27"
+       style="fill:url(#i)" />
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExtensionIrc/icons/sbIrc96.svg	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   viewBox="0 0 96 96"
+   id="svg31"
+   sodipodi:docname="sbIrc96.svg"
+   inkscape:version="0.92.0 r15299"
+   width="96"
+   height="96">
+  <metadata
+     id="metadata35">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1650"
+     inkscape:window-height="1051"
+     id="namedview33"
+     showgrid="false"
+     inkscape:zoom="14.895833"
+     inkscape:cx="24"
+     inkscape:cy="24"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg31" />
+  <defs
+     id="defs19">
+    <linearGradient
+       id="i"
+       x2="0"
+       y1="34"
+       y2="4"
+       gradientUnits="userSpaceOnUse">
+      <stop
+         stop-color="#7cbaf8"
+         offset="0"
+         id="stop2" />
+      <stop
+         stop-color="#f4fcff"
+         offset="1"
+         id="stop4" />
+    </linearGradient>
+    <linearGradient
+       id="e"
+       x1="405.57001"
+       x2="427.57001"
+       y1="509.79999"
+       y2="533.79999"
+       gradientUnits="userSpaceOnUse">
+      <stop
+         stop-opacity=".286"
+         offset="0"
+         id="stop7" />
+      <stop
+         stop-opacity="0"
+         offset="1"
+         id="stop9" />
+    </linearGradient>
+    <linearGradient
+       id="h"
+       x1="412.57001"
+       x2="425.57001"
+       y1="514.79999"
+       y2="527.79999"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#e" />
+    <linearGradient
+       id="g"
+       x2="0"
+       y1="44"
+       y2="4"
+       gradientTransform="matrix(-1,0,0,1,432.57,499.8)"
+       gradientUnits="userSpaceOnUse">
+      <stop
+         stop-color="#2f74c8"
+         offset="0"
+         id="stop13" />
+      <stop
+         stop-color="#4699d7"
+         offset="1"
+         id="stop15" />
+    </linearGradient>
+    <linearGradient
+       id="f"
+       x1="405.57001"
+       x2="427.57001"
+       y1="509.79999"
+       y2="533.79999"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#e" />
+  </defs>
+  <g
+     transform="matrix(2.1,0,0,2.1,-809.997,-1051.98)"
+     id="g29"
+     style="fill-rule:evenodd">
+    <path
+       d="m 428.57,503.8 v 30 h -20 l -11,10 v -10 h -9 v -30 z"
+       id="path21"
+       style="fill:url(#g)"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m 402.57,534.8 -6,-6 v -3 l -3,-3 v -9 h 4 l 1,1 v -1 l 20,-6 10,7.461 V 533.8 h -26 z"
+       id="path23"
+       style="opacity:0.2;fill:url(#f)"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m 419.57,521.8 9,9 v -11 l -5,-5 h -4 z"
+       id="path25"
+       style="opacity:0.2;fill:url(#h)"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="translate(384.57,499.8)"
+       d="m 34,8 -20,6 v 9 l 20,6 V 14 Z M 9,14 v 9 h 4 v -9 z m 26,1 v 7 h 4 v -7 z m -23,9 v 5 h 3 v -5 z"
+       id="path27"
+       style="fill:url(#i)"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
--- a/PluginExtensionIrc.py	Fri Apr 18 12:57:19 2025 +0200
+++ b/PluginExtensionIrc.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,360 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a plug-in providing IRC communication capability.
+"""
+
+import logging
+import os
+
+from PyQt6.QtCore import QCoreApplication, QObject, Qt, QTranslator
+from PyQt6.QtGui import QIcon, QKeySequence, QPixmap
+
+from eric7 import EricUtilities, Preferences
+from eric7.EricGui import EricPixmapCache
+from eric7.EricGui.EricAction import EricAction
+from eric7.EricWidgets.EricApplication import ericApp
+from eric7.UI.UserInterface import UserInterfaceSide
+
+# Start-Of-Header
+__header__ = {
+    "name": "IRC Extension Plugin",
+    "author": "Detlev Offenbach <detlev@die-offenbachs.de>",
+    "autoactivate": True,
+    "deactivateable": True,
+    "version": "10.x",
+    "className": "IrcExtensionPlugin",
+    "packageName": "ExtensionIrc",
+    "shortDescription": "This plug-in adds a widget to communicate via IRC messa",
+    "longDescription": (
+        "This plug-in adds a widget to communicate via IRC messages. It replaces"
+        " the formerly integrated variant."
+    ),
+    "needsRestart": False,
+    "hasCompiledForms": True,
+    "pyqtApi": 2,
+}
+# End-Of-Header
+
+error = ""  # noqa: U-200
+
+ircExtensionPluginObject = None
+
+
+def createIrcPage(configDlg):  # noqa: U-100
+    """
+    Function to create the IRC configuration page.
+
+    @param configDlg reference to the configuration dialog
+    @type ConfigurationWidget
+    @return reference to the configuration page
+    @rtype TranslatorPage
+    """
+    global ircExtensionPluginObject
+    from ExtensionIrc.ConfigurationPage.IrcPage import IrcPage  # noqa: I-101, I-102
+
+    page = IrcPage(ircExtensionPluginObject)
+    return page
+
+
+def getConfigData():
+    """
+    Function returning data as required by the configuration dialog.
+
+    @return dictionary containing the relevant data
+    @rtype dict
+    """
+    return {
+        "ircPage": [
+            QCoreApplication.translate("IrcExtensionPlugin", "IRC"),
+            os.path.join("ExtensionIrc", "icons", "irc"),
+            createIrcPage,
+            None,
+            None,
+        ],
+    }
+
+
+def prepareUninstall():
+    """
+    Function to prepare for an un-installation.
+    """
+    Preferences.getSettings().remove(IrcExtensionPlugin.PreferencesKey)
+
+
+class IrcExtensionPlugin(QObject):
+    """
+    Class documentation goes here.
+    """
+
+    PreferencesKey = "IRC"
+
+    def __init__(self, ui):
+        """
+        Constructor
+
+        @param ui reference to the user interface object
+        @type UI.UserInterface
+        """
+        super().__init__(ui)
+        self.__ui = ui
+        self.__initialize()
+
+        self.__defaults = {
+            "ShowTimestamps": True,
+            "TimestampIncludeDate": False,
+            "TimeFormat": "hh:mm",
+            "DateFormat": "yyyy-MM-dd",
+            "NetworkMessageColour": "#000055",
+            "ServerMessageColour": "#91640A",
+            "ErrorMessageColour": "#FF0000",
+            "TimestampColour": "#709070",
+            "HyperlinkColour": "#0000FF",
+            "ChannelMessageColour": "#000000",
+            "OwnNickColour": "#000000",
+            "NickColour": "#18B33C",
+            "JoinChannelColour": "#72D672",
+            "LeaveChannelColour": "#B00000",
+            "ChannelInfoColour": "#9E54B3",
+            "EnableIrcColours": True,
+            "IrcColor0": "#FFFF00",
+            "IrcColor1": "#000000",
+            "IrcColor2": "#000080",
+            "IrcColor3": "#008000",
+            "IrcColor4": "#FF0000",
+            "IrcColor5": "#A52A2A",
+            "IrcColor6": "#800080",
+            "IrcColor7": "#FF8000",
+            "IrcColor8": "#808000",
+            "IrcColor9": "#00FF00",
+            "IrcColor10": "#008080",
+            "IrcColor11": "#00FFFF",
+            "IrcColor12": "#0000FF",
+            "IrcColor13": "#FFC0CB",
+            "IrcColor14": "#A0A0A0",
+            "IrcColor15": "#C0C0C0",
+            "ShowNotifications": True,
+            "NotifyJoinPart": True,
+            "NotifyMessage": False,
+            "NotifyNick": False,
+            "AutoUserInfoLookup": True,
+            "AutoUserInfoMax": 200,
+            "AutoUserInfoInterval": 90,
+            "MarkPositionWhenHidden": True,
+            "MarkerLineForegroundColour": "#000000",  # Black on
+            "MarkerLineBackgroundColour": "#ffff00",  # Yellow
+        }
+
+        self.__translator = None
+        self.__loadTranslator()
+
+    def __initialize(self):
+        """
+        Private slot to (re)initialize the plugin.
+        """
+        self.__irc = None
+
+    def activate(self):
+        """
+        Public method to activate this plug-in.
+
+        @return tuple of None and activation status
+        @rtype bool
+        """
+        global error, ircExtensionPluginObject
+        error = ""  # clear previous error
+        ircExtensionPluginObject = self
+
+        # Create the IRC user interface
+        logging.getLogger(__name__).debug("Creating IRC Widget...")
+        from ExtensionIrc.IrcWidget import IrcWidget  # noqa: I-101, I-102
+
+        usesDarkPalette = ericApp().usesDarkPalette()
+        self.__iconType = "dark" if usesDarkPalette else "light"
+
+        self.__irc = IrcWidget(plugin=self)
+        iconName = "sbIrc96" if self.__ui.getLayoutType() == "Sidebars" else "irc"
+        self.__ui.addSideWidget(
+            UserInterfaceSide.Right,
+            self.__irc,
+            self.getIcon(iconName),
+            self.tr("IRC"),
+        )
+
+        self.__activateAct = EricAction(
+            self.tr("IRC"),
+            self.tr("&IRC"),
+            QKeySequence(self.tr("Ctrl+Alt+Shift+I")),
+            0,
+            self,
+            "irc_widget_activate",
+        )
+        self.__activateAct.setStatusTip(
+            self.tr("Switch the input focus to the IRC window.")
+        )
+        self.__activateAct.setWhatsThis(
+            self.tr(
+                """<b>Activate IRC</b>"""
+                """<p>This switches the input focus to the IRC window.</p>"""
+            )
+        )
+        self.__activateAct.triggered.connect(self.__activateWidget)
+
+        self.__ui.addEricActions([self.__activateAct], "ui")
+        menu = self.__ui.getMenu("subwindow")
+        menu.addAction(self.__activateAct)
+
+        ericApp().getObject("PluginManager").shutdown.connect(self.__irc.shutdown)
+
+        self.__irc.autoConnected.connect(self.__activateWidget)
+        self.__irc.autoConnect()
+
+        return None, True
+
+    def deactivate(self):
+        """
+        Public method to deactivate this plug-in.
+        """
+        menu = self.__ui.getMenu("subwindow")
+        menu.removeAction(self.__activateAct)
+        self.__ui.removeEricActions([self.__activateAct], "ui")
+        self.__ui.removeSideWidget(self.__irc)
+
+        self.__initialize()
+
+    def __getIconPaths(self, iconName):
+        """
+        Private method to generate a list of paths to check for the requested icon name.
+
+        @param iconName name of the icon
+        @type str
+        @return list of icon path names
+        @rtype list of str
+        """
+        return [
+            os.path.join("ExtensionIrc", "icons", self.__iconType, iconName),
+            os.path.join("ExtensionIrc", "icons", iconName),  # without icon type
+        ]
+
+    def getIcon(self, iconName):
+        """
+        Public method to get a named icon.
+
+        @param iconName name of the icon
+        @type str
+        @return requested icon
+        @rtype QIcon
+        """
+        icon = QIcon()
+
+        for iconPath in self.__getIconPaths(iconName):
+            icon = EricPixmapCache.getIcon(iconPath)
+            if not icon.isNull():
+                break
+
+        return icon
+
+    def getPixmap(self, pixmapName):
+        """
+        Public method to get a named pixmap.
+
+        @param pixmapName name of the pixmap
+        @type str
+        @return requested pixmap
+        @rtype QPixmap
+        """
+        pixmap = QPixmap()
+
+        for pixPath in self.__getIconPaths(pixmapName):
+            pixmap = EricPixmapCache.getPixmap(pixPath)
+            if not pixmap.isNull():
+                break
+
+        return pixmap
+
+    def __loadTranslator(self):
+        """
+        Private method to load the translation file.
+        """
+        if self.__ui is not None:
+            loc = self.__ui.getLocale()
+            if loc and loc != "C":
+                locale_dir = os.path.join(
+                    os.path.dirname(__file__), "ExtensionIrc", "i18n"
+                )
+                translation = "icr_{0}".format(loc)
+                translator = QTranslator(None)
+                loaded = translator.load(translation, locale_dir)
+                if loaded:
+                    self.__translator = translator
+                    ericApp().installTranslator(self.__translator)
+                else:
+                    print(  # noqa: M-801
+                        "Warning: translation file '{0}' could not be"
+                        " loaded.".format(translation)
+                    )
+                    print("Using default.")  # noqa: M-801
+
+    def __activateWidget(self):
+        """
+        Private slot to handle the activation of the MQTT Monitor.
+        """
+        uiLayoutType = self.__ui.getLayoutType()
+
+        if uiLayoutType == "Toolboxes":
+            self.__ui.rToolboxDock.show()
+            self.__ui.rToolbox.setCurrentWidget(self.irc)
+        elif uiLayoutType == "Sidebars":
+            self.__ui.activateLeftRightSidebarWidget(self.__irc)
+        self.__irc.setFocus(Qt.FocusReason.ActiveWindowFocusReason)
+
+    def getPreferences(self, key):
+        """
+        Public method to retrieve the various settings values.
+
+        @param key the key of the value to get
+        @type str
+        @return the requested setting value
+        @rtype Any
+        """
+        if key in [
+            "TimestampIncludeDate",
+            "ShowTimestamps",
+            "ShowNotifications",
+            "NotifyJoinPart",
+            "NotifyMessage",
+            "NotifyNick",
+            "EnableIrcColours",
+            "AutoUserInfoLookup",
+            "MarkPositionWhenHidden",
+        ]:
+            return EricUtilities.toBool(
+                Preferences.Prefs.settings.value(
+                    self.PreferencesKey + "/" + key, self.__defaults[key]
+                )
+            )
+        elif key in ["AutoUserInfoMax", "AutoUserInfoInterval"]:
+            return int(
+                Preferences.Prefs.settings.value(
+                    self.PreferencesKey + "/" + key, self.__defaults[key]
+                )
+            )
+        else:
+            return Preferences.Prefs.settings.value(
+                self.PreferencesKey + "/" + key, self.__defaults[key]
+            )
+        return None
+
+    def setPreferences(self, key, value):
+        """
+        Public method to store the various settings values.
+
+        @param key the key of the setting to be set
+        @type str
+        @param value the value to be set
+        @type Any
+        """
+        Preferences.Prefs.settings.setValue(self.PreferencesKey + "/" + key, value)
--- a/PluginIrc.epj	Fri Apr 18 12:57:19 2025 +0200
+++ b/PluginIrc.epj	Fri Apr 18 18:36:48 2025 +0200
@@ -5,7 +5,149 @@
   },
   "project": {
     "AUTHOR": "Detlev Offenbach",
-    "CHECKERSPARMS": {},
+    "CHECKERSPARMS": {
+      "Pep8Checker": {
+        "AnnotationsChecker": {
+          "AllowStarArgAny": false,
+          "AllowUntypedDefs": false,
+          "AllowUntypedNested": false,
+          "CheckFutureAnnotations": false,
+          "DispatchDecorators": [
+            "singledispatch",
+            "singledispatchmethod"
+          ],
+          "ExemptedTypingSymbols": [
+            ""
+          ],
+          "ForceFutureAnnotations": false,
+          "MaximumComplexity": 3,
+          "MaximumLength": 7,
+          "MinimumCoverage": 75,
+          "MypyInitReturn": false,
+          "OverloadDecorators": [
+            "overload"
+          ],
+          "RespectTypeIgnore": false,
+          "SuppressDummyArgs": false,
+          "SuppressNoneReturning": true
+        },
+        "BlankLines": [
+          2,
+          1
+        ],
+        "BuiltinsChecker": {
+          "bytes": [
+            "unicode"
+          ],
+          "chr": [
+            "unichr"
+          ],
+          "str": [
+            "unicode"
+          ]
+        },
+        "CommentedCodeChecker": {
+          "Aggressive": false,
+          "WhiteList": [
+            "pylint",
+            "pyright",
+            "noqa",
+            "type:\\s*ignore",
+            "fmt:\\s*(on|off)",
+            "TODO",
+            "FIXME",
+            "WARNING",
+            "NOTE",
+            "TEST",
+            "DOCU",
+            "XXX",
+            "- "
+          ]
+        },
+        "CopyrightAuthor": "",
+        "CopyrightMinFileSize": 0,
+        "DocstringType": "eric_black",
+        "EnabledCheckerCategories": "PYD, C, D, E, I, L, M, NO, N, Y, U, W",
+        "ExcludeFiles": "*/Ui_*.py",
+        "ExcludeMessages": "M-201,C-101,E-203,E-265,E-266,E-305,E-402,M-251,M-701,M-702,M-811,M-834,M-852,N-802,N-803,N-807,N-808,N-821,U-101,W-293,W-503,Y-119,Y-401,Y-402",
+        "FixCodes": "",
+        "FixIssues": false,
+        "FutureChecker": "",
+        "HangClosing": false,
+        "ImportsChecker": {
+          "ApplicationPackageNames": [
+            "PluginExtensionIrc",
+            "eric7"
+          ],
+          "BanRelativeImports": "",
+          "BannedModules": []
+        },
+        "IncludeMessages": "",
+        "LineComplexity": 25,
+        "LineComplexityScore": 10,
+        "MaxCodeComplexity": 10,
+        "MaxDocLineLength": 88,
+        "MaxLineLength": 88,
+        "NameOrderChecker": {
+          "ApplicationPackageNames": [
+            "PluginExtensionIrc",
+            "eric7"
+          ],
+          "CombinedAsImports": true,
+          "SortCaseSensitive": false,
+          "SortFromFirst": false,
+          "SortIgnoringStyle": false,
+          "SortOrder": "natural"
+        },
+        "NoFixCodes": "E-501",
+        "RepeatMessages": true,
+        "SecurityChecker": {
+          "CheckTypedException": false,
+          "HardcodedTmpDirectories": [
+            "/tmp",
+            "/var/tmp",
+            "/dev/shm",
+            "~/tmp"
+          ],
+          "InsecureHashes": [
+            "md4",
+            "md5",
+            "sha",
+            "sha1"
+          ],
+          "InsecureSslProtocolVersions": [
+            "PROTOCOL_SSLv2",
+            "SSLv2_METHOD",
+            "SSLv23_METHOD",
+            "PROTOCOL_SSLv3",
+            "PROTOCOL_TLSv1",
+            "SSLv3_METHOD",
+            "TLSv1_METHOD"
+          ],
+          "WeakKeySizeDsaHigh": "1024",
+          "WeakKeySizeDsaMedium": "2048",
+          "WeakKeySizeEcHigh": "160",
+          "WeakKeySizeEcMedium": "224",
+          "WeakKeySizeRsaHigh": "1024",
+          "WeakKeySizeRsaMedium": "2048"
+        },
+        "ShowIgnored": false,
+        "UnusedChecker": {
+          "IgnoreAbstract": true,
+          "IgnoreDunderGlobals": true,
+          "IgnoreDunderMethods": true,
+          "IgnoreEventHandlerMethods": true,
+          "IgnoreLambdas": false,
+          "IgnoreNestedFunctions": false,
+          "IgnoreOverload": true,
+          "IgnoreOverride": true,
+          "IgnoreSlotMethods": true,
+          "IgnoreStubs": true,
+          "IgnoreVariadicNames": false
+        },
+        "ValidEncodings": "latin-1, utf-8"
+      }
+    },
     "DESCRIPTION": "This plug-in adds a widget to communicate via IRC messages.",
     "DOCSTRING": "ericdoc",
     "DOCUMENTATIONPARMS": {},
@@ -38,7 +180,17 @@
       "README.*": "OTHERS",
       "makefile": "OTHERS"
     },
-    "FORMS": [],
+    "FORMS": [
+      "ExtensionIrc/ConfigurationPage/IrcPage.ui",
+      "ExtensionIrc/IrcChannelEditDialog.ui",
+      "ExtensionIrc/IrcChannelWidget.ui",
+      "ExtensionIrc/IrcIdentitiesEditDialog.ui",
+      "ExtensionIrc/IrcNetworkEditDialog.ui",
+      "ExtensionIrc/IrcNetworkListDialog.ui",
+      "ExtensionIrc/IrcNetworkWidget.ui",
+      "ExtensionIrc/IrcServerEditDialog.ui",
+      "ExtensionIrc/IrcWidget.ui"
+    ],
     "HASH": "aa5424fb92d673ccba3f71c16dd4d2538a19154f",
     "IDLPARAMS": {
       "DefinedNames": [],
@@ -60,9 +212,45 @@
     "MIXEDLANGUAGE": false,
     "OTHERS": [
       ".hgignore",
-      "PluginIrc.epj"
+      "PluginIrc.epj",
+      "pyproject.toml"
     ],
-    "OTHERTOOLSPARMS": {},
+    "OTHERTOOLSPARMS": {
+      "Black": {
+        "exclude": "/(\\.direnv|\\.eggs|\\.git|\\.hg|\\.ipynb_checkpoints|\\.mypy_cache|\\.nox|\\.pytest_cache|\\.ruff_cache|\\.tox|\\.svn|\\.venv|\\.vscode|__pypackages__|_build|buck-out|build|dist|venv)/",
+        "extend-exclude": "/(\n    Ui_.*\\.py\n)",
+        "force-exclude": "",
+        "line-length": 88,
+        "skip-magic-trailing-comma": false,
+        "skip-string-normalization": false,
+        "source": "project",
+        "target-version": [
+          "py313",
+          "py312",
+          "py311",
+          "py310",
+          "py39"
+        ]
+      },
+      "isort": {
+        "config_source": "project",
+        "extend_skip_glob": [
+          "*/Ui_*.py"
+        ],
+        "known_first_party": [
+          "ExtensionIrc",
+          "eric7"
+        ],
+        "profile": "black",
+        "sort_order": "natural",
+        "supported_extensions": [
+          "pyi",
+          "pxd",
+          "pyx",
+          "py"
+        ]
+      }
+    },
     "PACKAGERSPARMS": {},
     "PROGLANGUAGE": "Python3",
     "PROJECTTYPE": "E7Plugin",
@@ -76,6 +264,29 @@
     },
     "RESOURCES": [],
     "SOURCES": [
+      "ExtensionIrc/ConfigurationPage/IrcPage.py",
+      "ExtensionIrc/ConfigurationPage/Ui_IrcPage.py",
+      "ExtensionIrc/ConfigurationPage/__init__.py",
+      "ExtensionIrc/IrcChannelEditDialog.py",
+      "ExtensionIrc/IrcChannelWidget.py",
+      "ExtensionIrc/IrcIdentitiesEditDialog.py",
+      "ExtensionIrc/IrcMessageEdit.py",
+      "ExtensionIrc/IrcNetworkEditDialog.py",
+      "ExtensionIrc/IrcNetworkListDialog.py",
+      "ExtensionIrc/IrcNetworkManager.py",
+      "ExtensionIrc/IrcNetworkWidget.py",
+      "ExtensionIrc/IrcServerEditDialog.py",
+      "ExtensionIrc/IrcUtilities.py",
+      "ExtensionIrc/IrcWidget.py",
+      "ExtensionIrc/Ui_IrcChannelEditDialog.py",
+      "ExtensionIrc/Ui_IrcChannelWidget.py",
+      "ExtensionIrc/Ui_IrcIdentitiesEditDialog.py",
+      "ExtensionIrc/Ui_IrcNetworkEditDialog.py",
+      "ExtensionIrc/Ui_IrcNetworkListDialog.py",
+      "ExtensionIrc/Ui_IrcNetworkWidget.py",
+      "ExtensionIrc/Ui_IrcServerEditDialog.py",
+      "ExtensionIrc/Ui_IrcWidget.py",
+      "ExtensionIrc/__init__.py",
       "PluginExtensionIrc.py",
       "__init__.py"
     ],
@@ -86,7 +297,13 @@
     "TESTING_FRAMEWORK": "",
     "TRANSLATIONEXCEPTIONS": [],
     "TRANSLATIONPATTERN": "ExtensionIrc/i18n/irc_%language%.ts",
-    "TRANSLATIONS": [],
+    "TRANSLATIONS": [
+      "ExtensionIrc/i18n/irc_de.ts",
+      "ExtensionIrc/i18n/irc_empty.ts",
+      "ExtensionIrc/i18n/irc_en.ts",
+      "ExtensionIrc/i18n/irc_es.ts",
+      "ExtensionIrc/i18n/irc_ru.ts"
+    ],
     "TRANSLATIONSBINPATH": "",
     "TRANSLATIONSOURCESTARTPATH": "",
     "UICPARAMS": {
--- a/__init__.py	Fri Apr 18 12:57:19 2025 +0200
+++ b/__init__.py	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package implementing the IRC plug-in.
+"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pyproject.toml	Fri Apr 18 18:36:48 2025 +0200
@@ -0,0 +1,17 @@
+
+[tool.isort]
+profile = "black"
+sort_order = "natural"
+supported_extensions = ["pyi", "pxd", "pyx", "py"]
+combine_as_imports = true
+extend_skip_glob = ["*/Ui_*.py"]
+known_first_party = ["ExtensionIrc", "eric7"]
+
+[tool.black]
+target-version = ["py313", "py312", "py311", "py310", "py39"]
+line-length = 88
+extend-exclude = '''
+/(
+    Ui_.*\.py
+)
+'''

eric ide

mercurial