From: Marcus Eggenberger Date: Sat, 12 Jul 2008 13:21:49 +0000 (+0200) Subject: Merge branch 'network-sync' X-Git-Tag: 0.3.0~275 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=a33e42aee121185f479667b2104a15fc2033762e;hp=671e451cf1c10a6e3f442af82b58bfc4de0cb5a2 Merge branch 'network-sync' --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 16dac306..29fd9630 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,9 +14,9 @@ project(QuasselIRC) # Target scopes don't work in older versions cmake_minimum_required(VERSION 2.4.7 FATAL_ERROR) -# This would suppress annoying warnings on cmake-2.6, but we can't use it -# with 2.4, so... DUH! -# cmake_policy(SET CMP0003 OLD) # suppress linker warnings +if(COMMAND cmake_policy) + cmake_policy(SET CMP0003 OLD) # suppress linker warnings +endif(COMMAND cmake_policy) # Use our own (well, KDE's) version of some modules # In particular cmake's FindQt4 and FindOpenSSL are quite buggy @@ -32,7 +32,8 @@ option(DEPLOY "Mac OS X only! Adds required libs to bundle resources and option(SPUTDEV "Do not use!" OFF) set(QT "" CACHE STRING "Path to a Qt installation to use instead of the system Qt") - +set(LINGUAS "" CACHE STRING "Space-separated List of locales specifying languages that should be compiled") + if(STATIC) set(CMAKE_BUILD_TYPE Release) endif(STATIC) @@ -69,6 +70,9 @@ endif(SPUTDEV) # Set up OpenSSL find_package(OpenSSL) +if(NOT OPENSSL_FOUND) + add_definitions(-DQT_NO_OPENSSL) +endif(NOT OPENSSL_FOUND) # Select a Qt installation here, if you don't want to use system Qt if(QT) @@ -111,8 +115,11 @@ endif(WANT_QTCLIENT OR WANT_MONO) # Make sure version.gen exists before building mod_common add_dependencies(mod_common genversion_run) +# Generate binary translation files +include(QuasselGenerateTranslations) +quassel_generate_i18n_resource(RC_I18N ${LINGUAS}) + # Add resources -qt4_add_resources(RC_I18N i18n/i18n.qrc) qt4_add_resources(RC_ICONS src/icons/icons.qrc) qt4_add_resources(RC_QUASSEL_ICONS src/icons/quassel-icons.qrc) qt4_add_resources(RC_SQL src/core/sql.qrc) diff --git a/INSTALL b/INSTALL index e6c74bef..a4739382 100644 --- a/INSTALL +++ b/INSTALL @@ -40,6 +40,11 @@ Quassel recognizes the following options: -DWANT_(CORE|QTCLIENT|MONO)=(ON|OFF) Allow to choose which Quassel binaries to build. +-DLINGUAS=" + Allow to choose which languages should be compiled into the binary. + is a space-separated list of language codes. + Example: -DLINGUAS="de en_US" + -DQT=/path/to/qt Use a non-system Qt installation. This is for example useful if you have a static Qt installed in some local dir. diff --git a/cmake/modules/FindQt4.cmake b/cmake/modules/FindQt4.cmake index d778da6f..dc4969b2 100644 --- a/cmake/modules/FindQt4.cmake +++ b/cmake/modules/FindQt4.cmake @@ -1142,10 +1142,20 @@ IF (QT4_QMAKE_FOUND) ENDMACRO(QT4_GET_MOC_INC_DIRS) + # Added by Sput to provide definitions to moc calls + MACRO (QT4_GET_MOC_DEFINES _moc_DEFINES) + SET(${_moc_DEFINES}) + GET_DIRECTORY_PROPERTY(_defines COMPILE_DEFINITIONS) + FOREACH(_current ${_defines}) + SET(${_moc_DEFINES} ${${_moc_DEFINES}} -D${_current}) + ENDFOREACH(_current ${_defines}) + + ENDMACRO(QT4_GET_MOC_DEFINES) MACRO (QT4_GENERATE_MOC infile outfile ) # get include dirs - QT4_GET_MOC_INC_DIRS(moc_includes) + # QT4_GET_MOC_INC_DIRS(moc_includes) # Not needed... + QT4_GET_MOC_DEFINES(moc_defines) GET_FILENAME_COMPONENT(abs_infile ${infile} ABSOLUTE) @@ -1161,7 +1171,7 @@ IF (QT4_QMAKE_FOUND) ELSE (MSVC_IDE) ADD_CUSTOM_COMMAND(OUTPUT ${outfile} COMMAND ${QT_MOC_EXECUTABLE} - ARGS ${moc_includes} -o ${outfile} ${abs_infile} + ARGS ${moc_includes} ${moc_defines} -o ${outfile} ${abs_infile} DEPENDS ${abs_infile}) ENDIF (MSVC_IDE) @@ -1175,7 +1185,8 @@ IF (QT4_QMAKE_FOUND) MACRO (QT4_WRAP_CPP outfiles ) # get include dirs - QT4_GET_MOC_INC_DIRS(moc_includes) + # QT4_GET_MOC_INC_DIRS(moc_includes) # Not needed + QT4_GET_MOC_DEFINES(moc_defines) QT4_EXTRACT_OPTIONS(moc_files moc_options ${ARGN}) FOREACH (it ${moc_files}) @@ -1185,7 +1196,7 @@ IF (QT4_QMAKE_FOUND) SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/moc_${outfile}.cxx) ADD_CUSTOM_COMMAND(OUTPUT ${outfile} COMMAND ${QT_MOC_EXECUTABLE} - ARGS ${moc_includes} ${moc_options} -o ${outfile} ${it} + ARGS ${moc_includes} ${moc_defines} ${moc_options} -o ${outfile} ${it} DEPENDS ${it}) SET(${outfiles} ${${outfiles}} ${outfile}) ENDFOREACH(it) @@ -1343,7 +1354,9 @@ IF (QT4_QMAKE_FOUND) ENDMACRO(QT4_ADD_DBUS_ADAPTOR) MACRO(QT4_AUTOMOC) - QT4_GET_MOC_INC_DIRS(_moc_INCS) + # QT4_GET_MOC_INC_DIRS(_moc_INCS) + QT4_GET_MOC_DEFINES(_moc_DEFINES) + SET(_matching_FILES ) FOREACH (_current_FILE ${ARGN}) @@ -1375,7 +1388,7 @@ IF (QT4_QMAKE_FOUND) SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_current_MOC}) ADD_CUSTOM_COMMAND(OUTPUT ${_moc} COMMAND ${QT_MOC_EXECUTABLE} - ARGS ${_moc_INCS} ${_header} -o ${_moc} + ARGS ${_moc_INCS} ${_moc_DEFINES} ${_header} -o ${_moc} DEPENDS ${_header} ) @@ -1456,6 +1469,11 @@ IF (QT4_QMAKE_FOUND) # Trolltech said they'd consider exporting it for all platforms in future releases. SET(QT_DEFINITIONS ${QT_DEFINITIONS} -DQT_SHARED) ENDIF(NOT QT_CONFIG MATCHES "static") + + # OpenSSL + IF(NOT QT_QCONFIG MATCHES "openssl") + SET(QT_DEFINITIONS ${QT_DEFINITIONS} -DQT_NO_OPENSSL) + ENDIF(NOT QT_QCONFIG MATCHES "openssl") ## system png IF(QT_QCONFIG MATCHES "system-png") diff --git a/cmake/modules/QuasselGenerateTranslations.cmake b/cmake/modules/QuasselGenerateTranslations.cmake new file mode 100644 index 00000000..99c87a3b --- /dev/null +++ b/cmake/modules/QuasselGenerateTranslations.cmake @@ -0,0 +1,68 @@ +# This file contains macros dealing with translation +# files for Quassel IRC. + +# Copyright (C) 2008 by the Quassel Project, devel@quassel-irc.org +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + + +macro(quassel_generate_qm outvar basename) + set(input ${CMAKE_SOURCE_DIR}/i18n/${basename}.ts) + set(output ${CMAKE_CURRENT_BINARY_DIR}/${basename}.qm) + add_custom_command(OUTPUT ${output} + COMMAND ${QT_LRELEASE_EXECUTABLE} + ARGS ${input} + -qm ${output} + -silent -compress + DEPENDS ${CMAKE_SOURCE_DIR}/i18n/${basename}.ts) + set(${outvar} ${output}) +endmacro(quassel_generate_qm outvar basename) + +macro(quassel_generate_i18n_resource outvar) + set(linguas ${ARGN}) + if(QT_LRELEASE_EXECUTABLE) + # We always include quassel.ts + quassel_generate_qm(QM quassel) + set(outfiles ${QM}) + + # Find more languages + file(GLOB avail_tsfiles ${CMAKE_SOURCE_DIR}/i18n/quassel_*.ts) + foreach(TS_FILE ${avail_tsfiles}) + get_filename_component(basename ${TS_FILE} NAME_WE) + string(REGEX REPLACE "quassel_(.+)$" "\\1" lang ${basename}) + # test if we want this + set(flg 1) + if(linguas) + string(REGEX MATCH "${lang}" flg ${linguas}) + endif(linguas) + if(flg) + quassel_generate_qm(QM ${basename}) + set(outfiles ${outfiles} ${QM}) + set(gen_linguas "${gen_linguas} ${lang}") + endif(flg) + endforeach(TS_FILE ${avail_tsfiles}) + + # Write resource file + set(resfile ${CMAKE_CURRENT_BINARY_DIR}/i18n.qrc) + file(WRITE ${resfile} "\n" + "\n") + foreach(file ${outfiles}) + get_filename_component(file ${file} NAME) + file(APPEND ${resfile} " ${file}\n") + endforeach(file ${outfiles}) + file(APPEND ${resfile} "\n\n") + add_custom_command(OUTPUT ${resfile} DEPENDS ${outfiles}) + set_directory_properties(PROPERTIES + ADDITIONAL_MAKE_CLEAN_FILES "${outfiles} i18n.qrc") + + # Generate resource + qt4_add_resources(RC_OUT ${resfile}) + set(${outvar} ${RC_OUT}) + + message(STATUS "Including languages:${gen_linguas}") + else(QT_LRELEASE_EXECUTABLE) + message(STATUS "WARNING: lrelease not found, you won't have translations!") + endif(QT_LRELEASE_EXECUTABLE) +endmacro(quassel_generate_i18n_resource outvar) + diff --git a/cmake/modules/README b/cmake/modules/README index a9d951bd..fa122a85 100644 --- a/cmake/modules/README +++ b/cmake/modules/README @@ -1,7 +1,11 @@ These modules have been copied from KDE's repository as of 2008-06-17. FindQt4 has been adjusted to still contain the library deps and Qt config -stuff from the original FindQt4 (of cmake 2.4.7). +stuff from the original FindQt4 (of cmake 2.4.7). Also, I've fixed OpenSSL +detection (actually setting -DQT_NO_OPENSSL if it's not present) and +also provide -D to moc rather than -I. + +Files starting with Quassel* are solely created by us. Below is the contents of KDE's original README: diff --git a/i18n/README.Translations b/i18n/README.Translations index e4d36dcd..1a65654f 100644 --- a/i18n/README.Translations +++ b/i18n/README.Translations @@ -16,10 +16,13 @@ You can open these XML files with the Qt Linguist and add/edit translated string The *.ts files can and should be kept in sync with the source code by running lupdate regularly (existing translations won't be removed). -Qt itself does not use the *.ts files, but a compact binary format (*.qm). In order -to create these files from new or updated *.ts files, run +Qt itself does not use the *.ts files, but a compact binary format (*.qm). +These files will automatically be generated at build time. By default, all +languages will be built. To select languages, add -DLINGUAS="" +to your cmake call, where is a space-separated list of language +codes as explained above. -lrelease *.ts +NOTE: You'll need lrelease installed with your Qt in order to generate + translation files. Some distributions don't package that tool; + in that case you won't get translations. -In addition, new languages need to be added to i18n/i18n.qrc, since we are using Qt's -resource system for loading the translations. diff --git a/i18n/i18n.qrc b/i18n/i18n.qrc deleted file mode 100644 index 23a49156..00000000 --- a/i18n/i18n.qrc +++ /dev/null @@ -1,8 +0,0 @@ - - - quassel.qm - quassel_fr.qm - quassel_da.qm - - - diff --git a/i18n/quassel.qm b/i18n/quassel.qm deleted file mode 100644 index 903d387a..00000000 Binary files a/i18n/quassel.qm and /dev/null differ diff --git a/i18n/quassel_da.qm b/i18n/quassel_da.qm deleted file mode 100644 index 8eb74a90..00000000 Binary files a/i18n/quassel_da.qm and /dev/null differ diff --git a/i18n/quassel_de.qm b/i18n/quassel_de.qm deleted file mode 100644 index 8f30dc63..00000000 Binary files a/i18n/quassel_de.qm and /dev/null differ diff --git a/i18n/quassel_de.ts b/i18n/quassel_de.ts index cd8b0999..72d0e5f9 100644 --- a/i18n/quassel_de.ts +++ b/i18n/quassel_de.ts @@ -1,11 +1,12 @@ + AboutDlg About - + Über @@ -33,22 +34,22 @@ p, li { white-space: pre-wrap; } Quassel IRC is mainly developed by: - + Quassel IRC wird hauptsächlich entwickelt von: We would like to thank the following contributors (in alphabetical order) and everybody we forgot to mention here: - + Wir möchten den folgenden Unterstützern (in alphabetischer Reihenfolge) und allen, die wir hier vergessen haben zu erwähnen, danken: Special thanks goes to:<br><dl><dt><b>John "nox-Hand" Hand</b></dt><dd>for great artwork and the Quassel logo/icon</dt><dt><b><a href="http://www.oxygen-icons.org">The Oxygen Team</a></b></dt><dd>for creating most of the other shiny icons you see throughout Quassel</dd><dt><b><a href="http://www.trolltech.com">Trolltech</a></b></dt><dd>for creating Qt and Qtopia, and for sponsoring development of Quasseltopia with Greenphones and more</dd> - + Besonderer Dank geht an:<br><dl><dt><b>John "nox-Hand" Hand</b></dt><dd>für großartige Gestaltungsarbeit und das Quassel-Logo/-Symbol</dt><dt><b><a href="http://www.oxygen-icons.org">Das Oxygen-Team</a></b></dt><dd>für die Erstellungen der meisten anderen schnieken Symbole, die Sie in Quassel sehen</dd><dt><b><a href="http://www.trolltech.com">Trolltech</a></b></dt><dd>für die Erstellung von Qt und Qtopia und für die Förderung von Quasseltopia mit Greenphones und mehr</dd> About Quassel - + Über Quassel @@ -56,7 +57,7 @@ p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:15pt; font-weight:600; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Quassel IRC</p></body></html> - + @@ -64,107 +65,98 @@ p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:600; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Version 0.2.0-pre, Build &gt;= 474 (2008-02-08)</p></body></html> - + &About - + &Über A&uthors - + A&utoren &Contributors - + &Unterstützer &Thanks To - + &Dank an - - AccountManagementSettingsPage - - - AdminUserPage - AppearanceSettingsPage Appearance - + Erscheinungsbild General - + Allgemein Form - + Formular Client style: - + Client-Stil: - - Buffer - BufferItem Status Buffer - + Statuspuffer <b>Status buffer of %1</b> - + <b>Statuspuffer von %1</b> <b>Channel %1</b> - + <b>Kanal %1</b> <b>Users:</b> %1 - + <b>Benutzer:</b> %1 <b>Topic:</b> %1 - + <b>Thema:</b> %1 <b>Mode:</b> %1 - + <b>Modus:</b> %1 Not active <br /> Double-click to join - + Nicht aktiv <br /> Doppelklicken zum Beitreten <b>Query with %1</b> - + <b>Dialog mit %1</b> Away Message: %1 - + Abwesenheitsmeldung: %1 @@ -177,116 +169,110 @@ p, li { white-space: pre-wrap; } - - BufferManagementSettingsPage - - - BufferTreeModel - BufferView Show Channel List - + Zeige Kanalliste Connect - + Verbinden Disconnect - + Trennen - + Join Channel - + Kanal beitreten Join - + Beitreten Part - + Verlassen Hide buffers - + Puffer ausblenden Hide buffers permanently - + Puffer permanent ausblenden Delete buffer - + Puffer löschen Ignore list - + Ignorieren-Liste Join Events - + Beitrittsmeldungen Part Events - + Verlassensmeldungen Kill Events - + Kill-Meldungen Quit Events - + Beendigungsmeldungen Mode Events - + Modusmeldungen - + Hide Events - + Meldungen ausblenden - + Input channel name: - + Eingabekanalname: - + Remove buffer permanently? - + Puffer permanent ausblenden? - + Do you want to delete the buffer "%1" permanently? This will delete all related data, including all backlog data, from the core's database! - + Möchten Sie den Puffer "%1" permanent löschen? Hierdurch werden alle in Verbindung stehenden Daten - inklusive des gesamten Rückspeichers - aus der Kerndatenbank gelöscht! BufferViewDock - + All Buffers - + Alle Puffer @@ -294,17 +280,17 @@ p, li { white-space: pre-wrap; } Dialog - + Dialog Please enter a name for the buffer view: - + Bitte geben Sie einen Namen für diese Pufferansicht ein: Add Buffer View - + Pufferansicht hinzufügen @@ -312,122 +298,122 @@ p, li { white-space: pre-wrap; } General - + Allgemein Buffer Views - + Pufferansichten Delete Buffer View? - + Pufferansicht löschen? Do you really want to delete the buffer view "%1"? - + Wollen Sie die Pufferansicht "%1" wirklich löschen? Form - + Formular Re&name... - + Umbe&nennen... &Add... - + &Hinzufügen... De&lete - + &Löschen Buffer View Settings - + Pufferansichtseinstellungen Network: - + Netzwerk: All - + Alle Restrict Buffers to: - + Puffer begrenzen auf: Status Buffers - + Statuspuffer Channel Buffers - + Kanalpuffer Query Buffers - + Dialogpuffer Hide inactive Buffers - + Inaktive Puffer verstecken Add new Buffers automatically - + Neue Puffer automatisch hinzufügen Sort alphabetically - + Alphabetisch sortieren Minimum Activity: - + Aktivitätsminimum: No Activity - + Keine Aktivität Other Activity - + Andere Aktivitität New Message - + Neue Meldung Highlight - + Hervorhebung Preview: - + Vorschau: @@ -435,17 +421,17 @@ p, li { white-space: pre-wrap; } BufferView - + Pufferansicht All - + Alle Chans - + Kanäle @@ -455,12 +441,12 @@ p, li { white-space: pre-wrap; } Nets - + Netze Select Buffer - + Puffer auswählen @@ -486,33 +472,30 @@ p, li { white-space: pre-wrap; } Channel List - + Kanalliste Search Pattern: - + Suchmuster: Search Channels - + Suche Kanäle Filter: - + - - ChannelWidget - Client Identity already exists in client! - + Identität im Client schon vorhanden! @@ -520,37 +503,37 @@ p, li { white-space: pre-wrap; } The Quassel Core you try to connect to is too old! Please consider upgrading. - + Der Quasselkern, zu dem Sie eine Verbindung herzustellen versuchen, ist veraltet! Bitte ziehen Sie eine Aktualisierung in Betracht. <b>Invalid data received from core!</b><br>Disconnecting. - + <b>Ungültige Daten vom Kern erhalten!</b><br>Verbindungsabbruch. Internal connections not yet supported. - + Interne Verbindungen noch nicht unterstützt. <b>This client is built without SSL Support!</b><br />Disable the usage of SSL in the account settings. - + <b>Dieser Client wurde ohne SSL-Unterstützung gebaut!</b><br />Schalten Sie die SSL-Benutzung in den Kontoeinstellungen ab. - + <b>The Quassel Core you are trying to connect to is too old!</b><br>Need at least core/client protocol v%1 to connect. - + <b>Der Quasselkern, zu dem Sie eine Verbindung herzustellen versuchen, ist veraltet!</b><br>Benötige mindestens Kern/Client-Protokoll v%1 zum Verbinden. - + <b>The Quassel Core you are trying to connect to does not support SSL!</b><br />If you want to connect anyways, disable the usage of SSL in the account settings. - + <b>Der Quasselkern, zu dem Sie eine Verbindung herzustellen versuchen, unterstützt kein SSL!</b><br />Wenn Sie dennoch eine Verbindung herstellen wollen, schalten Sie die SSL-Benutzung in den Kontoeinstellungen ab. - + Logging in... - + Anmelden... @@ -558,406 +541,399 @@ p, li { white-space: pre-wrap; } Appearance - + Erscheinungsbild Color settings - + Farbeinstellungen Form - + Formular Bufferview - + Pufferansicht Activities: - + Aktivitäten: FG - + VG BG - + HG Use BG - + Benutze HG Default: - + Standard: Inactive: - + Inaktiv: Highlight: - + New Message: - + Neue Meldung: Other Activity: - + Andere Aktivität: Preview: - + Vorschau: 1 - + Chatview - + Chatansicht Server Activity - + Serveraktivität Foreground - + Vordergrund Background - + Hintergrund Error Message: - + Fehlermeldung: Notice Message: - + Notizmeldung: Plain Message: - + Einfache Meldung: Server Message: - + Servermeldung Highlight Message: - + Highlight-Meldung: User Activity - + Benutzeraktivität Action Message: - + Aktionsmeldung: Join Message: - + Beitrittsmeldung: Kick Message: - + Rauswurfsmeldung: Mode Message: - + Modusmeldung: Part Message: - + Verlassensmeldung: Quit Message: - + Beendigungsmeldung: Rename Message: - + Umbenennungsmeldung: Message - + Meldung Timestamp: - + Zeitstempel: Sender: - + Absender: Nick: - + Spitzname: Hostmask: - + Rechnermaske: Channelname: - + Kanalname: Mode flags: - + Modusschalter: Url: - + Mirc Color Codes - + Mirc-Farbkodierungen Color Codes - + Farbkodierungen Color 0: - + Farbe 0: Color 1: - + Farbe 1: Color 2: - + Farbe 2: Color 3: - + Farbe 3: Color 4: - + Farbe 4: Color 5: - + Farbe 5: Color 6: - + Farbe 6: Color 7: - + Farbe 7: Color 8: - + Farbe 8: Color 14: - + Farbe 14: Color 15: - + Farbe 15: Color 13: - + Farbe 13: Color 12: - + Farbe 12: Color 11: - + Farbe 11: Color 10: - + Farbe 10: Color 9: - + Farbe 9: Nickview - + Spitznamenansicht Nick status: - + Spitznamensstatus: Online: - + Angemeldet: Away: - + Abwesend: - - ConclusionPage - - - ConfigWizard - - - ConnectionSettingsPage - Core Could not initialize any storage backend! Exiting... - + Konnte keinen Speichermechanismus initialisieren! Beende... Currently, Quassel only supports SQLite3. You need to build your Qt library with the sqlite plugin enabled in order for quasselcore to work. - + Quassel unterstützt momentan ausschließlich SQLite3. +Die Qt-Bibliothek mit eingeschaltetem SQLite-Plugin +wird benötigt, damit der Quassel-Kern funktioniert. Calling restoreState() even though active sessions exist! - + restoreState() aufgerufen, obwohl aktive Sitzungen vorhanden sind! Admin user or password not set. - + Administrativbenutzer oder Passwort nicht gesetzt. Could not setup storage! - + Speicher konnte nicht eingerichtet werden! Creating admin user... - + Erstelle Administrativbenutzer... Antique client trying to connect... refusing. - + Antiquierter Client versucht zu verbinden... lehne ab. - + <b>Your Quassel Client is too old!</b><br>This core needs at least client/core protocol version %1.<br>Please consider upgrading your client. - + <b>Ihr Quasselclient ist zu alt!</b><br>Dieser Kern benötigt mindestens Client-/Kern-Protokollversion %1.<br>Bitte ziehen Sie in Erwägung, Ihren Client zu aktualisieren. - + Client %1 too old, rejecting. - + Client %1 zu alt, lehne ab. - + <b>Quassel Core Version %1</b><br>Built: %2<br>Up %3d%4h%5m (since %6) - + <b>Quassel-Kern Version %1</b><br>Gebaut: %2<br>An %3T%4S%5M (seit %6) - + <b>Client not initialized!</b><br>You need to send an init message before trying to login. - + <b>Client nicht initialisiert!</b><br>Sie müssen vor dem Anmeldungsversuch eine init-Meldung senden. - + Client %1 did not send an init message before trying to login, rejecting. - + Client %1 hat vor dem Anmeldungsversuch keine init-Meldung gesendet, lehne ab. - + <b>Invalid username or password!</b><br>The username/password combination you supplied could not be found in the database. - + <b>Ungültiger Benutzername oder Passwort!</b><br>Die angegebene Benutzername/Passwort-Kombination konnte in der Datenbank nicht gefunden werden. - + Client %1 initialized and authenticated successfully as "%2" (UserId: %3). - + Client %1 erfolgreich als "%2" (BenutzerId: %3) initialisiert und authentifziert. - + Non-authed client disconnected. - + Nicht-authentifizierter Client getrennt. - + Could not initialize session for client %1! - + Konnte Sitzung für Client %1 nicht initialisieren! @@ -965,127 +941,127 @@ to work. Add Core Account - + Kernkonto hinzufügen Missing information - + Fehlende Daten Please enter all required information or discard changes to return to account selection. - + Bitte geben Sie alle benötigten Daten ein oder verwerfen Sie Ihre Änderungen, um zurück zur Kontoauswahl zu gelangen. Non-unique account name - + Uneindeutiger Kontoname Account names need to be unique. Please enter a different name or discard all changes to return to account selection. - + Kontonamen müssen eindeutig sein. Bitte geben Sie einen anderen Namen ein oder verwerfen Sie alle Änderungen, um zurück zur Kontoauswahl zu gelangen. Edit Core Account - + Kernkonto ändern Port: - + Host: - + Rechner: Password: - + Passwort: Account: - + Konto: User: - + Benutzer: Account Details - + Kontodetails Account Name: - + Kontoname: Use built-in Quassel Core - + Benutze integrierten Quassel-Kern Remote host: - + Gegenstelle: Use secure connection (SSL) - + Gesicherte Verbindung (SSL) benutzen Use a proxy: - + Einen Proxy benutzen: Proxy Type: - + Proxy-Art: Socks 5 - + HTTP - + Proxy Host: - + Proxy-Rechner: Proxy Port: - + Proxy-Port: localhost - + Proxy Username: - + Proxy-Benutzername: Proxy Password: - + Proxy-Passwort: @@ -1093,22 +1069,22 @@ to work. Core Configuration Wizard - + Kernkonfigurationshelfer Your core has been successfully configured. Logging you in... - + Ihr Kern wurde erfolgreich konfiguriert. Melde Sie an... Core configuration failed:<br><b>%1</b><br>Press <em>Next</em> to start over. - + Kernkonfiguration fehlgeschlagen:<br><b>%1</b><br>Zum Neustarten <em>Weiter</em> wählen. Your are now logged into your freshly configured Quassel Core!<br>Please remember to configure your identities and networks now. - + Sie sind jetzt bei Ihrem frisch konfigurierten Quasselkern angemeldet!<br>Bitte denken Sie daran, jetzt Identitäten und Netzwerke zu konfigurieren. @@ -1116,27 +1092,27 @@ to work. Form - + Formular Username: - + Benutzername: Password: - + Passwort: Repeat password: - + Passwort wiederholen: Remember password - + Passwort merken @@ -1154,12 +1130,12 @@ p, li { white-space: pre-wrap; } Form - + Formular This wizard will guide you through the setup of your Quassel Core. - + Dieser Helfer wird Sie durch die Einrichtung Ihres Quasselkerns führen. @@ -1167,12 +1143,12 @@ p, li { white-space: pre-wrap; } Create Admin User - + Administrativbenutzer erstellen First, we will create a user on the core. This first user will have administrator privileges. - + Zuerst werden wir einen Benutzer im Kern anlegen. Der erste Benutzer wird administrative Privilegien besitzen. @@ -1180,7 +1156,7 @@ p, li { white-space: pre-wrap; } Introduction - + Einleitung @@ -1188,12 +1164,12 @@ p, li { white-space: pre-wrap; } Select Storage Backend - + Speichermechanismus auswählen Please select a database backend for the Quassel Core storage to store the backlog and other data in. - + Bitte wählen Sie einen Datenbankmechanismus für den Quassel-Kern-Speicher, der zum Speichern von Rückspeicher und anderen Daten verwendet wird. @@ -1201,12 +1177,12 @@ p, li { white-space: pre-wrap; } Storing Your Settings - + Speichere Ihre Einstellungen Your settings are now stored in the core, and you will be logged in automatically. - + Ihre Einstellungen sind jetzt im Kern gespeichert und Sie werden automatisch angemeldet. @@ -1214,17 +1190,17 @@ p, li { white-space: pre-wrap; } Form - + Formular Storage Backend: - + Speichermechanismus: Description - + Beschreibung @@ -1237,17 +1213,17 @@ p, li { white-space: pre-wrap; } Form - + Formular Your Choices - + Ihre Auswahl Admin User: - + Administrativbenutzer: @@ -1257,7 +1233,7 @@ p, li { white-space: pre-wrap; } Storage Backend: - + Speichermechanismus: @@ -1267,7 +1243,7 @@ p, li { white-space: pre-wrap; } Please wait while your settings are being transmitted to the core... - + Bitte warten Sie, bis Ihre Einstellungen zum Kern übermittelt wurden... @@ -1275,132 +1251,132 @@ p, li { white-space: pre-wrap; } Connect to Quassel Core - + Mit Quassel-Kern verbinden ... - + User: - + Benutzer: Password: - + Passwort: Remember - + Merken Always use this account - + Diesen Account immer benutzen New - + Neu Delete - + Löschen Properties... - + Einstellungen... Select Core Account - + Kernkonto auswählen Available Quassel Core accounts: - + Verfügbare Quassel-Kernkonten: Connect - + Verbinden Remove Account Settings - + Kontoeinstellungen entfernen Do you really want to remove your local settings for this Quassel Core account?<br>Note: This will <em>not</em> remove or change any data on the Core itself! - + Möchten Sie wirklich Ihre lokalen Einstellungen für dieses Quassel-Kernkonto löschen?<br>Anmerkung: Dies wird die Daten im Kern selbst <em>nicht</em> entfernen oder ändern! Connect to %1 - + Mit %1 verbinden <div style=color:red;>Connection to %1 failed!</div> - + <div style=color:red;>Verbindung zu %1 fehlgeschlagen!</div> Not connected to %1. - + Nicht mit %1 verbunden. Looking up %1... - + Schlage %1 nach... Connecting to %1... - + Verbinde mit %1... Connected to %1 - + Verbunden mit %1 Unknown connection state to %1 - + Unbekannter Verbindungsstatus zu %1 Logging in... - + Anmelden... Login - + Anmeldung Edit... - + Ändern... Add... - + Hinzufügen... Initializing your connection - + Initialisiere Ihre Verbindung @@ -1418,52 +1394,52 @@ space Configure your Quassel Core - + Ihren Quassel-Kern konfigurieren The Quassel Core you are connected to is not configured yet. You may now launch a configuration wizard that helps you setting up your Core. - + Der Quassel-Kern, mit dem Sie eine Verbindung herstellen möchten, ist noch unkonfiguriert. Sie können jetzt einen Konfigurationshelfer starten, der Ihnen bei der Konfiguration Ihres Kerns behilflich ist. Launch Wizard - + Helfer starten Initializing your session... - + Initialisiere Ihre Sitzung... <b>Please be patient while your client synchronizes with the Quassel Core!</b> - + <b>Bitte haben Sie etwas Geduld während Ihr Client sich mit dem Quassel-Kern synchronisiert!</b> Session state: - + Sitzungsstatus: Network states: - + Netzwerkstati: 0/0 - + Channel states: - + Kanalstati: User states: - + Benutzerstati: @@ -1471,37 +1447,37 @@ space Connection Progress - + Verbindungsfortschritt Connecting to core... - + Verbinde mit Kern... Session - + Sitzung %p% - + Networks - + Netzwerke Channels - + Kanäle Users - + Benutzer @@ -1509,12 +1485,12 @@ space Default Identity - + Standardidentität Client %1 disconnected (UserId: %2). - + Client %1 hat Verbindung getrennt (BenutzerId: %2). @@ -1527,30 +1503,27 @@ space - - CoreSettingsPage - CreateIdentityDlg Create New Identity - + Neue Identität anlegen Identity name: - + Identitätsname: Create blank identity - + Leere Identität erstellen Duplicate: - + Duplizieren: @@ -1558,27 +1531,27 @@ space Received CTCP PING request from %1 - + CTCP PING-Anfrage von %1 erhalten Received CTCP VERSION request by %1 - + CTCP VERSION-Anfrage von %1 erhalten Received unknown CTCP %1 by %2 - + Unbekannte CTCP-Anfrage %1 von %2 erhalten Received CTCP PING answer from %1 with %2 seconds round trip time - + CTCP PING-Antwort von %1 mit einer Umlaufzeit von %2 Sekunden erhalten Received CTCP VERSION answer from %1: %2 - + CTCP VERSION-Antwort von %1: %2 @@ -1586,22 +1559,22 @@ space Debug Console - + Fehlerkonsole local - + lokal core - + Kern Evaluate! - + Auswerten! @@ -1609,32 +1582,32 @@ space Edit Core Account - + Kernkonto ändern Port: - + Port: Host: - + Rechner: Password: - + Passwort: Account: - + Konto: User: - + Benutzer: @@ -1642,52 +1615,52 @@ space Appearance - + Erscheinungsbild Fonts - + Schriftarten Form - + Formular Custom Application Fonts - + Angepasste Anwendungsschriften General: - + Allgemein: Font - + Schrift Choose... - + Wähle... Topic: - + Thema: Buffer Views: - + Pufferansichten: Nick List: - + Benutzerliste: @@ -1697,133 +1670,130 @@ space Nicks: - + Spitznamen: Timestamp: - + Zeitstempel: Some of these settings require a restart of the Quassel Client in order to take effect. We intend to fix this. - + Einige dieser Einstellungen erforden einen Neustart des Quassel-Clients um wirksam zu werden. Wir beabsichtigen, dies zu beheben. Inputline: - + Eingabezeile: - - Form - GeneralSettingsPage Behaviour - + Verhalten General - + Allgemein Form - + Formular Use system tray icon: - + Zu Systemleistensymbol minimieren: Minimize to tray on minimize button - + bei "Minimieren" Minimize to tray on close button - + bei "Schließen" Tray icon: - + Systemleistensymbol: Show system tray icon - + Zeigt Systemleistensymbol User Notification: - + Benutzerbenachrichtigung: Animate tray icon - + Systemleistensymbol animieren Display pop-up messages - + Pop-Up-Meldungen anzeigen Display user related messages and private Notices: - + Benutzerbezogene Meldungen und private Notizen anzeigen: in status buffer - + im Statuspuffer in query buffer (if exists) - + im Dialogpuffer (falls vorhanden) in current buffer - + im aktuellen Puffer Buffer view: - + Pufferansicht: Display topic in tooltip - + Thema in Hinweisfläche anzeigen Mouse wheel changes displayed buffers - + Mausrad ändert angezeigten Puffer The suffix appended to a nick on completion via TAB. Default is ": " - + Das einem Spitznamen durch Tabulatorvervollständigung angehängte Suffix. Standard ist ": " Input Line: - + Eingabezeile: Completion suffix: - + Vervollständigungssuffix: @@ -1831,291 +1801,285 @@ space Behaviour - + Verhalten Highlight - + Hervorhebung this shouldn't be empty - + dies sollte nicht leer sein highlight rule - + Highlight-Regel Form - + Formular Highlight list - + Hervorhebungsliste RegEx - + CS - + Enable - + Einschalten Add - + Hinzufügen Remove - + Entfernen Highlight nicks - + Spitznamen hervorheben All nicks from identity - + Alle Spitznamen der Identität Current nick - + Aktueller Spitzname None - + Kein(e) - - IdentitiesDlg - - - IdentitiesEditDlg - IdentitiesSettingsPage Add... - + Hinzufügen... ... - + General - + Allgemein Real Name: - + Realname: Nicknames - + Spitznamen &Add... - + &Hinzufügen... Re&name... - + Umbe&nennen... Move upwards in list - + In Liste nach oben verschieben Move downwards in list - + In Liste nach unten verschieben A&way - + Ab&wesend Away Reason - + Abwesenheitsgrund Return Message - + Zurück-Meldung Away Nick - + Abwesenheitsspitzname Auto Away - + Auto-Abwesenheit Auto away after - + Auto-abwesend nach minutes - + Minuten Advanced - + Erweitert Ident: - + Messages - + Meldungen Part Reason: - + Verlassensgrund: Quit Reason: - + Beendigungsgrund: Kick Reason: - + Rauswurfsgrund: Identities - + Identitäten <b>The following problems need to be corrected before your changes can be applied:</b><ul> - + <b>Die folgenden Probleme müssen behoben werden, bevor Ihre Änderungen angewendet werden können:</b><ul> <li>All identities need an identity name set</li> - + <li>Alle Identitäten benötigen einen Identitätsnamen</li> <li>Every identity needs at least one nickname defined</li> - + <li>Bei jeder Identität muss mindestens ein Spitzname angegeben werden</li> <li>You need to specify a real name for every identity</li> - + <li>Sie müssen einen Realnamen für jede Identität angeben</li> <li>You need to specify an ident for every identity</li> - + <li>Sie müssen einen Ident für jede Identität angeben</li> </ul> - + One or more identities are invalid - + Eine oder mehrere Identitäten sind ungültig Delete Identity? - + Identität löschen? Do you really want to delete identity "%1"? - + Wollen Sie wirklich Identität "%1" löschen? Rename Identity - + Identität umbenennen Please enter a new name for the identity "%1"! - + Bitte geben Sie einen neuen Namen für die Identität "%1" an! Add Identity - + Identität hinzufügen Remove Identity - + Identität entfernen The "Real Name" is shown in /whois. - + Der "Realname" wird im /whois angezeigt. Add Nickname - + Spitznamen hinzufügen Remove Nickname - + Spitznamen entfernen Remove - + Etnfernen The "ident" is part of your hostmask and, together with your host, uniquely identifies you within the IRC network. - + Der "Ident" bildet zusammen mit Ihrer Rechneradresse die Rechnermaske und identifiziert sie so eindeutig im IRC-Netzwerk. @@ -2123,42 +2087,42 @@ space <empty> - + <leer> Quassel IRC User - + Quassel-IRC-Benutzer Gone fishing. - + Mit'm Fahrrad Sahne holen. Brought fish. - + Sahne geholt. Not here. No, really. not here! - + Nicht da. Nein, ehrlich. Nicht da! Back in action again! - + Wieder im Rennen! Kindergarten is elsewhere! - + Der Kindergarten ist woanders! http://quassel-irc.org - Chat comfortably. Anywhere. - + @@ -2166,28 +2130,25 @@ space Form - + Formular - - IntroPage - IrcListModel Channel - + Kanal Users - + Benutzer Topic - + Thema @@ -2195,160 +2156,165 @@ space %1 has changed topic for %2 to: "%3" - + %1 hat das Thema für %2 geändert zu: "%3" - + No topic is set for %1. - + Für %1 ist kein Thema gesetzt. - + Topic for %1 is "%2" - + Thema für %1 ist "%2" - + Topic set by %1 on %2 - + Thema in %2 gesetzt von %1 %1 - + [Whois] %1 is away: "%2" - + [Whois] %1 ist abwesend: "%2" %1 is away: "%2" - + %1 ist abwesend: "%2" [Whois] %1 - + [Whois] %1 is %2 (%3) - + [Whois] %1 ist %2 (%3) %1 is online via %2 (%3) - + %1 ist angemeldet über %2 (%3) - + [Whowas] %1 - + [Whowas] %1 was %2 (%3) - + [Whowas] %1 war %2 (%3) [Who] End of /WHO list for %1 - + [Who] Ende der /WHO Liste für %1 [Whois] %1 is logged in since %2 - + [Whois] %1 ist seit %2 angemeldet [Whois] %1 is idling for %2 (%3) - + [Whois] %1 ist seit %2 (%3) inaktiv [Whois] idle message: %1 - + [Whois] Inaktivmeldung: %1 [Whois] %1 is a user on channels: %2 - + [Whois] %1 ist Benutzer in den Kanälen: %2 [Whois] %1 has voice on channels: %2 - + [Whois] %1 hat Voice in den Kanälen: %2 [Whois] %1 is an operator on channels: %2 - + [Whois] %1 ist Operator in den Kanälen: %2 Channel %1 has %2 users. Topic is: %3 - + Kanal %1 hat %2 Benutzer. Thema ist: %3 End of channel list - + Ende der Kanalliste - + [Who] %1 - + - + There is a nickname in your identity's nicklist which contains illegal characters - + Ein Spitzname der Spitznamensliste Ihrer Identität enthält ungültige Zeichen - + Due to a bug in Unreal IRCd (and maybe other irc-servers too) we're unable to determine the erroneous nick - + Auf Grund eines Fehlers im Unreal IRCs (und evtl. auch anderen IRC-Servern) können wir den fehlerhaften Spitznamen nicht ermitteln - + Please use: /nick <othernick> to continue or clean up your nicklist - + Bitte benutzen Sie: /nick <andererSpitzname> zum Fortfahren oder säubern Sie Ihre Spitznamensliste - + Nick %1 contains illegal characters - + Spitzname %1 enthält ungültige Zeichen - + Nick already in use: %1 - + Spitzname bereits in Benutzung: %1 - + No free and valid nicks in nicklist found. use: /nick <othernick> to continue + Keine freien und gültigen Spitznamen in Spitznamensliste gefunden. Benutze: /nick <andererSpitzname> zum Fortfahren + + + + [Whois] %1 %3 %2 IrcUserItem - + idling since %1 - + nichtstuend seit %1 - + login time: %1 - + Anmeldezeitpunkt: %1 - + server: %1 - + Server: %1 @@ -2356,7 +2322,7 @@ space Form - + Formular @@ -2379,17 +2345,17 @@ p, li { white-space: pre-wrap; } Waiting for core... - + Warte auf Kern... - + Not connected to core. - + Nicht mit Kern verbunden. MainWindow - + Hauptfenster @@ -2422,174 +2388,189 @@ p, li { white-space: pre-wrap; } Core - + &Network List... - + &Netzwerkliste... - + F2 - + - + Quick &Connect... - + S&chnell verbinden... - + Disconnect - Trennen + Trennen - + Reconnect - + Wiederverbinden - + Join Channel... - + Kanal beitreteten... - + Set Away globally - + Global abwesend setzen - + Quit... - + Beenden... - + Edit Identities... - + Identitäten ändern... - + Configure Quassel... - + Quassel konfigurieren... - + F7 - + - + Manage Views... - + Ansichten verwalten... - + About Qt... - + Über Qt... - + About Quassel IRC... - + Über Quassel IRC... - + Import Backlog - + Rückspeicher importieren - + Connect - + Verbinden - + Internal - + Intern - + Disconnect from Core - + Von Kern trennen - + Connect to Core... - + Mit Kern verbinden... - + Connected to core. - + Mit Kern verbunden. - + Edit &Networks... - + N&etzwerke ändern... - + Nicks - + Spitznamen - + Chat Monitor - + Chatmonitor - + Inputline - + Eingabezeile - + Topic - + Thema - + Statusbar - + Statusleiste &File - + &Datei &Networks - + &Netzwerke - + &Settings - + Ein&stellungen - + &Views - + &Ansichten - + &Help - + &Hilfe - + Debug &Console - + Fehler&konsole - + Disconnect from Network... - + Von Netzwerk trennen... &Edit Networks... - + N&etzwerke ändern... + + + + Buffer Views + Pufferansichten + + + + Manage Buffer Views + Pufferansichten verwalten + + + + Lock Dock Positions + Andockerpositionen sperren @@ -2597,127 +2578,127 @@ p, li { white-space: pre-wrap; } %DT[%1] - + %DS<%1> - + %D0%1 - + %Ds* - + %Ds%1 - + %De* - + %De%1 - + %Dj--> - + %Dp<-- - + %Dq<-- - + %Dq%DN%DU%1%DU%DN %DH(%2@%3)%DH has quit - + %Dq%DN%DU%1%DU%DN %DH(%2@%3)%DH beendet %Dk<-* - + %Dr<-> - + %DrYou are now known as %DN%1%DN - + %DrSie sind jetzt als %DN%1%DN bekannt %Dm*** - + %DmUser mode: %DM%1%DM - + %DmBenutzermodus: %DM%1%DM %Da-*- - + %De[%1] - + %Dn[%1] - + %Dn%1 - + %Dj%DN%1%DN %DH(%2@%3)%DH has joined %DC%4%DC - + %Dj%DN%1%DN %DH(%2@%3)%DH ist %DC%4%DC beigetreten %Dp%DN%1%DN %DH(%2@%3)%DH has left %DC%4%DC - + %Dp%DN%1%DN %DH(%2@%3)%DH hat %DC%4%DC verlassen %Dk%DN%1%DN has kicked %DN%2%DN from %DC%3%DC - + %Dk%DN%1%DN hat %DN%2%DN aus %DC%3%DC geworfen %Dr%DN%1%DN is now known as %DN%2%DN - + %Dr%DN%1%DN ist jetzt als %DN%2%DN bekannt %DmMode %DM%1%DM by %DN%2%DN - + %DmModus %DM%1%DM von %DN%2%DN @@ -2730,27 +2711,27 @@ p, li { white-space: pre-wrap; } Connection failed. Cycling to next Server - + Verbindung fehlgeschlagen. Wechsle zum nächsten Server Connecting to %1:%2... - + Verbinde mint %1:%2... Disconnecting. - + Trenne Verbindung. Could not connect to %1 (%2) - + Konnte nicht mit %1 (%2) verbinden Connection failure: %1 - + Verbindungsfehler: %1 @@ -2758,35 +2739,35 @@ p, li { white-space: pre-wrap; } Dialog - + Dialog Please enter a network name: - + Bitte geben Sie einen Netzwerknamen ein: Add Network - + Netzwerk hinzufügen NetworkModel - + Buffer - + Puffer - + Topic - + Thema - + Nick Count - + Spitznamenzähler @@ -2794,205 +2775,208 @@ p, li { white-space: pre-wrap; } General - + Allgemein Networks - + Netzwerke <b>The following problems need to be corrected before your changes can be applied:</b><ul> - + <b>Die folgenden Probleme müssen behoben werden, bevor Ihre Änderungen angewendet werden können:</b><ul> <li>All networks need at least one server defined</li> - + <li>Jedes Netzwerk benötigt die Angabe mindestens eines Servers</li> </ul> - + Invalid Network Settings - + Ungültige Netzwerkeinstellungen Connect - + Verbinde Disconnect - + Trenne Verbindung Apply first! - + Zuerst anwenden! Delete Network? - + Netzwerk löschen? Do you really want to delete the network "%1" and all related settings, including the backlog? - + Wollen Sie das Netzwerk "%1" und alle damit verbundenen Einstellungen inklusive des Rückspeichers wirklich löschen? Form - + Formular Re&name... - + Umbe&nennen... &Add... - + &Hinzufügen... De&lete - + &Löschen Connect now - + Jetzt verbinden Network Details - + Netzwerkdetails Identity: - + Indentität: Servers - + Server Manage servers for this network - + Server für dieses Netzwerk verwalten &Edit... - + Änd&ern... Move upwards in list - + In Liste nach oben verschieben ... - + Move downwards in list - + In Liste nach unten verschieben Choose random server for connecting - + Zur Verbindung zufälligen Server wählen Perform - + Ausführen Configure automatic identification or misc. commands to be executed after connecting to a server - + Automatische Identifikation oder verschiedene Befehle zur Ausführung nach Herstellen der Serververbindung konfigurieren Commands to execute on connect: - + Beim Verbinden auszuführende Befehle: Specify a list of IRC commands to be executed upon connect. Note that Quassel IRC automatically rejoins channels, so /join will rarely be needed here! - + Geben Sie eine Liste von IRC-Befehlen an, die beim Verbinden ausgeführt werden. +Berücksichtigen Sie, dass Quassel IRC Kanälen automatisch erneut beitritt. /join wird hier daher selten benötigt! Auto Identify - + Auto-Identifizieren NickServ - + Service: - + Password: - + Passwort: Advanced - + Erweitert Configure advanced settings such as message encodings and automatic reconnect - + Erweiterte Einstellungen wie Meldungskodierung und automatisches Wiederverbinden konfigurieren Control encodings for in- and outgoing messages - + Kodierung für ein- und abgehende Meldungen kontrollieren Encodings - + Kodierungen Specify which encoding your messages will be sent in. UTF-8 should be a sane choice for most networks. - + Geben Sie an, mit welcher Kodierung Ihre Meldungen gesendet werden sollen. +UTF-8 sollte für die meisten Netzwerke eine sinnvolle Wahl sein. Send messages in: - + Meldungen senden in: Incoming messages encoded in Utf8 will always be treated as such. This setting defines the encoding for messages that are not Utf8. - + In UTF-8 kodierte eingehende Meldungen werden immer als solche behandelt. +Diese Einstellung bestimmt die Kodierung für Meldungen, die nicht UTF-8-kodiert sind. @@ -3003,57 +2987,58 @@ This setting defines the encoding for messages that are not Utf8. This specifies how control messages, nicks and servernames are encoded. Unless you *really* know what you do, leave this as ISO-8859-1! - + Dies gibt an, wie Kontrolmeldungen, Spitznamen und Servernamen kodiert sind. +Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was Sie tun! Server encoding: - + Serverkodierung: Use default settings for encodings (recommended) - + Standardeinstellungen für Kodierungen verwenden (empfohlen) Use defaults - + Standards benutzen Control automatic reconnect to the network - + Automatisches Wiederverbinden zum Netzwerk kontrollieren Automatic Reconnect - + Automatisches Wiederverbinden Interval: - + Intervall: s - + Retries: - + Wiederversuche: Unlimited - + Unbegrenzt Rejoin all channels on reconnect - + Allen Kanälen beim Wiederverbinden erneut beitreten @@ -3061,22 +3046,22 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Add Nickname - + Spitznamen hinzufügen Edit Nickname - + Spitznamen ändern Please enter a valid nickname: - + Bitte geben Sie einen gültigen Spitznamen ein: A valid nickname may contain letters from the English alphabet, digits, and the special characters {, }, [, ], \, |, `, ^, _ and -. - + Ein gültiger Spitzname darf die Zeichen des englischen Alphabets, Ziffern und die Sonderzeichen {, }, [, ], \, |, `, ^, _ sowie - enthalten. @@ -3084,93 +3069,90 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Nicks in Channel - + Spitznamen im Kanal - - NickModel - NickView WHOIS - + VERSION - + PING - + Modes - + Modi Op %1 - + Deop %1 - + Voice %1 - + Devoice %1 - + Kick/Ban - + Rauswerfen/Verbannen Kick %1 - + %1 rauswerfen Ban %1 - + %1 verbannen Kickban %1 - + %1 rauswerfen und verbannen Ignore - + Ignorieren Query - + Dialog DCC-Chat - + Send file - + Datei senden @@ -3178,37 +3160,37 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Show Toolbar - + Werkzeugleiste zeigen Quit Quassel IRC? - + Quassel IRC beenden? Do you really want to quit Quassel IRC? - + Wollen Sie Quassel IRC wirklich beenden? Quit - + Beenden Show Buffers - + Puffer zeigen Show Nicks - + Spitznamen zeigen About... - + Über... @@ -3216,48 +3198,45 @@ Unless you *really* know what you do, leave this as ISO-8859-1! year - + Jahr day - + Tag h - + S min - + Min sec - + Sek - - RenameIdentityDlg - SaveIdentitiesDlg Sync With Core - + Mit Kern synchronisieren Syncing data with core, please wait... - + Synchronisiere Daten mit Kern, bitte warten... Abort - + Abbrechen @@ -3265,38 +3244,35 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Server address: - + Serveradresse: Port: - + Dialog - + Password: - + Passwort: Use SSL - + SSL benutzen - - ServerListDlg - SessionThread Could not initialize session! - + Konnte Sitzung nicht initialisieren! @@ -3304,42 +3280,42 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Settings - Einstellungen + Einstellungen Save changes - + Einstellungen speichern There are unsaved changes on the current configuration page. Would you like to apply your changes now? - + Es gibt nicht gespeicherte Änderungen auf der aktuellen Konfigurationsseite. Möchten Sie diese Änderungen jetzt anwenden? Reload Settings - + Einstellungen neu laden Do you like to reload the settings, undoing your changes on this page? - + Möchten Sie die Einstellungen neu laden, die Änderungen auf dieser Seite zurücknehmen? Restore Defaults - + Standards wiederherstellen Do you like to restore the default values for this page? - + Möchten Sie die Standardwerte für diese Seite wiederherstellen? Configure Quassel - + Quassel konfigurieren @@ -3347,32 +3323,32 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Reload Settings - + Einstellungen neu laden Do you like to reload the settings, undoing your changes on this page? - + Möchten Sie die Einstellungen neu laden, die Änderungen auf dieser Seite zurücknehmen? Restore Defaults - + Standards wiederherstellen Do you like to restore the default values for this page? - + Möchten Sie die Standardwerte für diese Seite wiederherstellen? Configure Quassel - + Quassel konfigurieren Settings - Einstellungen + Einstellungen @@ -3380,21 +3356,15 @@ Unless you *really* know what you do, leave this as ISO-8859-1! SQLite is a file-based database engine that does not require any setup. It is suitable for small and medium-sized databases that do not require access via network. Use SQLite if your Quassel Core should store its data on the same machine it is running on, and if you only expect a few users to use your core. - + SQLite ist ein dateibasiertes Datenbanksystem, das keiner Einrichtung bedarf. Es ist für kleine bis mittelgroße Datenbanken, die keinen Netzwerkzugriff benötigen, geeignet. Verwenden Sie SQListe, wenn der Quassel-Kern seine Daten auf dem selben Rechner, auf dem er auch läuft, speichern soll und Sie nur mit ein paar Benutzern auf Ihrem Kern rechnen. - - StorageDetailsPage - - - StorageSelectionPage - TopicLabel Drag to scroll the topic! - + Ziehen um das Thema zu verschieben! @@ -3402,7 +3372,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Form - + Formular @@ -3415,127 +3385,127 @@ Unless you *really* know what you do, leave this as ISO-8859-1! %DS<%1> - + %D0%1 - + %Dn[%1] - + %Dn%1 - + %Ds* - + %Ds%1 - + %De* - + %De%1 - + %Dj--> - + %Dj%DN%1%DN %DH(%2@%3)%DH has joined %DC%4%DC - + %Dj%DN%1%DN %DH(%2@%3)%DH ist %DC%4%DC beigetreten %Dp<-- - + %Dp%DN%1%DN %DH(%2@%3)%DH has left %DC%4%DC - + %Dp%DN%1%DN %DH(%2@%3)%DH hat %DC%4%DC verlassen %Dq<-- - + %Dq%DN%DU%1%DU%DN %DH(%2@%3)%DH has quit - + %Dq%DN%DU%1%DU%DN %DH(%2@%3)%DH wurde beendet %Dk<-* - + %Dk%DN%1%DN has kicked %DN%2%DN from %DC%3%DC - + %Dk%DN%1%DN hat %DN%2%DN aus %DC%3%DC geworfen %Dr<-> - + %DrYou are now known as %DN%1%DN - + %DrSie sind jetzt als %DN%1%DN bekannt %Dr%DN%1%DN is now known as %DN%2%DN - + %Dr%DN%1%DN ist jetzt als %DN%2%DN bekannt %Dm*** - + %DmUser mode: %DM%1%DM - + %DmBenutzermodus: %DM%1%DM %DmMode %DM%1%DM by %DN%2%DN - + %DmModus %DM%1%DM durch %DN%2%DN %Da-*- - + %Da%DN%1%DN %2 - + %De[%1] - + @@ -3543,15 +3513,15 @@ Unless you *really* know what you do, leave this as ISO-8859-1! %n Owner(s) - - - + + %n Besitzer + %n Besitzer %n Admin(s) - + @@ -3559,15 +3529,15 @@ Unless you *really* know what you do, leave this as ISO-8859-1! %n Operator(s) - - - + + %n Operator + %n Operator %n Half-Op(s) - + @@ -3575,7 +3545,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! %n Voiced - + @@ -3583,18 +3553,18 @@ Unless you *really* know what you do, leave this as ISO-8859-1! %n User(s) - - - + + %n Benutzer + %n Benutzer UserInputHandler - + sending CTCP-%1 request - + sende CTCP-%1-Anfrage diff --git a/i18n/quassel_fr.qm b/i18n/quassel_fr.qm deleted file mode 100644 index 515e52f0..00000000 Binary files a/i18n/quassel_fr.qm and /dev/null differ diff --git a/i18n/quassel_fr.ts b/i18n/quassel_fr.ts index d1a7b61c..4b30652b 100644 --- a/i18n/quassel_fr.ts +++ b/i18n/quassel_fr.ts @@ -51,7 +51,7 @@ p, li { white-space: pre-wrap; } <b>A modern, distributed IRC Client</b><br><br>&copy;2005-2008 by the Quassel Project<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> on <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC is dual-licensed under <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> and <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>Most icons are &copy; by the <a href="http://www.oxygen-icons.org">Oxygen Team</a> and used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Please use <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a> to report bugs. - + <b>Un Client IRC distribué et moderne</b><br><br>&copy;2005-2008 par le Projet Quassel<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> sur <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC est sous double licence <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> et <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>La majorité des icones proviennent &copy; de l'<a href="http://www.oxygen-icons.org">Equipe Oxygen</a> et sont utilisés sous la <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Merci d'utiliser <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a> pour transmettre les bogues. @@ -61,51 +61,51 @@ p, li { white-space: pre-wrap; } We would like to thank the following contributors (in alphabetical order) and everybody we forgot to mention here: - + Nous voulons aussi remercier les contributeurs suivants (par ordre alphabétique) et toute personne que nous avons oublié de mentionner ici: Special thanks goes to:<br><dl><dt><b>John "nox-Hand" Hand</b></dt><dd>for great artwork and the Quassel logo/icon</dt><dt><b><a href="http://www.oxygen-icons.org">The Oxygen Team</a></b></dt><dd>for creating most of the other shiny icons you see throughout Quassel</dd><dt><b><a href="http://www.trolltech.com">Trolltech</a></b></dt><dd>for creating Qt and Qtopia, and for sponsoring development of Quasseltopia with Greenphones and more</dd> - + Remerciements particuliers à:<br><dl><dt><b>John "nox-Hand" Hand</b></dt><dd>pour le beau travail artistique et le logo Quassel </dt><dt><b><a href="http://www.oxygen-icons.org">L'Equipe Oxygen</a></b></dt><dd>pour avoir créé la majorité des belles icones que vous voyez dans Quassel</dd><dt><b><a href="http://www.trolltech.com">Trolltech</a></b></dt><dd>pour avoir créé Qt et Qtopia, et pour le soutien du developpement de Quasseltopia avec Greenphones entre autres</dd> - + About Quassel À propos de Quassel - + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:15pt; font-weight:600; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Quassel IRC</p></body></html> - + <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:15pt; font-weight:600; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Quassel IRC</p></body></html> - + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:600; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Version 0.2.0-pre, Build &gt;= 474 (2008-02-08)</p></body></html> - + <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:600; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Version 0.2.0-pre, Build &gt;= 474 (2008-02-08)</p></body></html> - + &About &À Propos - + A&uthors A&uteurs - + &Contributors &Contributeurs - + &Thanks To &Remerciements @@ -197,14 +197,14 @@ p, li { white-space: pre-wrap; } Général - + Form Formulaire - + Client style: - + Style du Client: @@ -212,57 +212,57 @@ p, li { white-space: pre-wrap; } Status Buffer - + Etat du Buffer <b>Status buffer of %1</b> - + <b>Etat du buffer %1</b> <b>Channel %1</b> - + <b>Canal %1</b> <b>Users:</b> %1 - + <b>Utilisateurs:</b> %1 <b>Topic:</b> %1 - + <b>Sujet:</b> %1 <b>Mode:</b> %1 - + <b>Mode:</b> %1 Not active <br /> Double-click to join - + Inactif <br /> Double-cliquez pour rejoindre <b>Query with %1</b> - + <b>Demande à %1</b> Away Message: %1 - + Message d'absence: %1 %1 - %2 - + %1 - %2 <p> %1 </p> - + <p> %1 </p> @@ -363,7 +363,7 @@ Lines: 1234 Show Channel List - + Voir la liste des canaux @@ -376,110 +376,110 @@ Lines: 1234 Déconnecter - + Join Channel - + Rejoindre le Canal Join - + Rejoindre Part - + Partir Hide buffers - + Cacher les buffers Hide buffers permanently - + Cacher les buffers en permanence Delete buffer - + Supprimer le Buffer Ignore list - + Liste d'ignorés Join Events - + Avis d'entrée Part Events - + Avis de départ Kill Events - + Avis de Kill Quit Events - + Avis de Sortie Mode Events - + Avis de Mode - + Hide Events - + Cacher les Avis - + Input channel name: - + Entrez le nom du canal: - + Remove buffer permanently? - + Supprimer le buffer définitivement ? - + Do you want to delete the buffer "%1" permanently? This will delete all related data, including all backlog data, from the core's database! - + Voules vous supprimer le buffer "%1" de manière permanente ? Cela supprimera toutes les données correspondantes, y compris celles sauvées dans l'historique contenu dans la base de données du noyau ! BufferViewDock - + All Buffers - + Tous Buffers BufferViewEditDlg - + Dialog Fenêtre - + Please enter a name for the buffer view: - + Merci de saisir un nom pour la vue buffer: Add Buffer View - + Ajouter une vue buffer @@ -492,125 +492,125 @@ Lines: 1234 Buffer Views - + Vues buffer Delete Buffer View? - + Supprimer la vue buffer ? Do you really want to delete the buffer view "%1"? - + Voulez vous réellement supprimer la vue buffer "%1" ? - + Form Formulaire - + Re&name... &Renommer... - + &Add... &Ajouter... - + De&lete &Supprimer - + Buffer View Settings - + Paramètres de la vue buffer - + Network: Réseau: - + All Tous - + Restrict Buffers to: Limiters les Buffers à: - + Status Buffers - + Buffers d'états - + Channel Buffers - + Buffers de canaux - + Query Buffers - + Buffers de requêtes - + Hide inactive Buffers - + Cacher les buffers inactifs - + Add new Buffers automatically - + Ajouter un nouveau buffer automatiquement - + Sort alphabetically - + Trier alphabétiquement - + Minimum Activity: - + Activité minimum: - + No Activity - + Pas d'activité - + Other Activity - + Autre activité - + New Message - + Nouveau message - + Highlight - Surlignage + Surlignage - + Preview: - + Aperçu: BufferViewWidget - + BufferView - + Vue Buffer @@ -630,12 +630,12 @@ Lines: 1234 Nets - + Réseaux Select Buffer - + Selectionner le Buffer @@ -660,37 +660,37 @@ p, li { white-space: pre-wrap; } <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Trebuchet MS'; font-size:10pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-size:89pt; color:#00008b;">Quassel IRC</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:49pt;"><span style=" font-size:22pt;">Chatter simplement. Partout.</span></p></body></html> - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Trebuchet MS'; font-size:13pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/quassel/96x96/apps/quassel.png" /><span style=" font-size:89pt; color:#00008b;">uassel IRC</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:49pt;"><span style=" font-size:22pt;">Chat comfortably. Anywhere.</span></p></body></html> - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Trebuchet MS'; font-size:13pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/quassel/96x96/apps/quassel.png" /><span style=" font-size:89pt; color:#00008b;">uassel IRC</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:49pt;"><span style=" font-size:22pt;">Chatter facilement. Partout.</span></p></body></html> ChannelListDlg - + Channel List - + Liste des canaux - + Search Pattern: - + Chaine à rechercher: - + Search Channels - + Recherche des Canaux - + Filter: - + Filtre: @@ -774,7 +774,7 @@ p, li { white-space: pre-wrap; } Identity already exists in client! - + L'Identité existe déjà dans le client! @@ -782,37 +782,37 @@ p, li { white-space: pre-wrap; } The Quassel Core you try to connect to is too old! Please consider upgrading. - + Le Noyau Quassel auquel vous vous connectez est trop vieux ! Pensez à le mettre à jour. <b>Invalid data received from core!</b><br>Disconnecting. - + <b>Données invalides reçues du noyau !</b><br>Déconnexion. Internal connections not yet supported. - + Les connections internes ne sont pas encore supportées. <b>This client is built without SSL Support!</b><br />Disable the usage of SSL in the account settings. - + <b>Ce client n'a pas compilé avec le support SSL !</b><br />Suppression de l'utilisation de SSL dans les paramètres de compte. - + <b>The Quassel Core you are trying to connect to is too old!</b><br>Need at least core/client protocol v%1 to connect. - + <b>Le Noyau auquel vous essayez de vous connecter est trop vieux !</b><br>Vous devez au minimum avoir le protocole noyau/client n°%1 pour vous connecter. - + <b>The Quassel Core you are trying to connect to does not support SSL!</b><br />If you want to connect anyways, disable the usage of SSL in the account settings. - + <b>Le Noyau Quassel auquel vous essayez de vous conneter ne supporte pas le SSL!</b><br />Si vous voulez vous connect malgré tout, désactivez l'usage du SSL dans vos paramètres de compte. - + Logging in... - + Authentification... @@ -820,312 +820,312 @@ p, li { white-space: pre-wrap; } Appearance - Apparence + Apparence Color settings - + Options de Couleur - + Form - Formulaire + Formulaire - + Bufferview - + Vue Buffer - + Activities: - + Activitées: - + FG - + Avant - + BG - + Fd - + Use BG - + Utiliser le Fond - + Default: - + Défaut: - + Inactive: - + Inactif: - + Highlight: - + Surlignage: - + New Message: - + Nouveau message: - + Other Activity: - + Autre activité: - + Preview: - + Aperçu: - + 1 - + 1 - + Chatview - + Moniteur de Chat - + Server Activity - + Activité du serveur - + Foreground - + Devant - + Background - + Fond - + Error Message: - + Message d'erreur: - + Notice Message: - + Message d'information: - + Plain Message: - + Message normal: - + Server Message: - + Message du serveur: - + Highlight Message: - + Message surligné: - + User Activity - + Activité utilisateur - + Action Message: - + Message d'action: - + Join Message: - + Message d'entrée: - + Kick Message: - + Message de kick: - + Mode Message: - + Message de mode: - + Part Message: - + Message de sortie: - + Quit Message: - + Message de départ: - + Rename Message: - + Message de changement de pseudo: - + Message - + Message - + Timestamp: - Format d'heure: + Format d'heure: - + Sender: - + Emetteur: - + Nick: - + Pseudo: - + Hostmask: - + Masque de l'hôte: - + Channelname: - + Nom du Canal: - + Mode flags: - + Drapeaux de Mode: - + Url: - + Url: - + Mirc Color Codes - + Codes Couleur Mirc - + Color Codes - + Codes de Couleur - + Color 0: - + Couleur 0: - + Color 1: - + Couleur 1: - + Color 2: - + Couleur 2: - + Color 3: - + Couleur 3: - + Color 4: - + Couleur 4: - + Color 5: - + Couleur 5: - + Color 6: - + Couleur 6: - + Color 7: - + Couleur 7: - + Color 8: - + Couleur 8: - + Color 14: - + Couleur 14: - + Color 15: - + Couleur 15: - + Color 13: - + Couleur 13: - + Color 12: - + Couleur 12: - + Color 11: - + Couleur 11: - + Color 10: - + Couleur 10: - + Color 9: - + Couleur 9: - + Nickview - + Vue des pseudos - + Nick status: - + Etat des pseudos: - + Online: - + En ligne: - + Away: - + Absent: @@ -1172,84 +1172,86 @@ p, li { white-space: pre-wrap; } Could not initialize any storage backend! Exiting... - + Impossible de créer aucune base de stockage ! Fin de l'opération... Calling restoreState() even though active sessions exist! - + Appel de restoreState() alors que des sessions actives existent ! Admin user or password not set. - + L'idnetifiant et le mot de passe administrateur ne sont pas saisis. Could not setup storage! - + Impossible de paramétrer la base de données ! Creating admin user... - + Création de l'utilisateur administrateur... - + Antique client trying to connect... refusing. - + Un antique client essaye de se connecter... refusé. - + <b>Your Quassel Client is too old!</b><br>This core needs at least client/core protocol version %1.<br>Please consider upgrading your client. - + <b>Le Noyau auquel vous essayez de vous connecter est trop vieux !</b><br>Vous devez au minimum avoir la version %1 du protocole noyau/client.<br> Veuillez mettre à jour votre client. - + Client %1 too old, rejecting. - + Client %1 trop vieux, rejeté. - + <b>Quassel Core Version %1</b><br>Built: %2<br>Up %3d%4h%5m (since %6) - + <b>Quassel Noyau Version %1</b><br>Compilée le: %2<br>Fonctionne depuis %3d%4h%5m (soit le %6) - + <b>Client not initialized!</b><br>You need to send an init message before trying to login. - + <b>Client non créé !</b><br>Vous devez envoyer un message de création avant d'essayer de vous connecter. - + Client %1 did not send an init message before trying to login, rejecting. - + Le client %1 n'a pas envoyé de message de création avant d'essayer de se connecter, rejet de la demande. - + <b>Invalid username or password!</b><br>The username/password combination you supplied could not be found in the database. - + <b>identifiant ou mot de passe invalide !</b><br>La combinaison identifiant/mot de passe que vous avez fournie ne peut être trouvée dans la base de données. - + Client %1 initialized and authenticated successfully as "%2" (UserId: %3). - + Client %1 crée et identifié avec succès comme "%2" (IdUtilisateur: %3). - + Non-authed client disconnected. - + Client non-identifié déconnecté. - + Could not initialize session for client %1! - + Impossible de lancer la session pour le client %1 ! Currently, Quassel only supports SQLite3. You need to build your Qt library with the sqlite plugin enabled in order for quasselcore to work. - + Actuellement, Quassel supporte uniquement SQLite3. Vous devez +construire votre librairie Qt avec le plugin sqlite activé pour que le +noyau quassel fonctionne. @@ -1280,12 +1282,12 @@ to work. Les noms de compte doivent être uniques. Merci de saisir un nom différent ou de supprimer les changements pour revenir au choix du compte. - + Edit Core Account Modifier le compte noyau - + Port: Port: @@ -1310,72 +1312,72 @@ to work. Utilisateur: - + Account Details Détails du Compte - + Account Name: Nom du Compte: - + Use built-in Quassel Core Utiliser le noyau intégré de Quassel - + Remote host: Hôte distant: - + Use secure connection (SSL) Utiliser une connection sécurisée (SSL) - + Use a proxy: Utiliser un proxy: - + Proxy Type: Type de Proxy: - + Socks 5 Socks 5 - + HTTP HTTP - + Proxy Host: Hôte du proxy: - + Proxy Port: Port du Proxy: - + localhost localhost - + Proxy Username: Nom d'Utiilisateur du proxy: - + Proxy Password: Mot de Passe du Proxy: @@ -1406,27 +1408,27 @@ to work. CoreConfigWizardAdminUserPage - + Form Formulaire - + Username: Nom d'Utiilisateur: - + Password: Mot de Passe: - + Repeat password: Répéter le mot de passe: - + Remember password Mémoriser le mot de passe @@ -1441,25 +1443,25 @@ p, li { white-space: pre-wrap; } <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Note: Ajouter plus d'utilisateurs et changer votre nom/mot de passe n'est pas encore possible par l'interface Quassel.</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-style:italic;">Si vous avez besoin de faire cela regarder le script manageusers.py qui est dans le dossier /scripts.</p></body></html> - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:13pt;"><span style=" font-size:10pt; font-weight:600;">Note: </span><span style=" font-size:10pt;">Adding more users and changing your username/password is not possible via Quassel's interface yet.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:10pt;">If you need to do these things have a look at the manageusers.py script which is located in the /scripts directory.</p></body></html> - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:8pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:13pt;"><span style=" font-size:10pt; font-weight:600;">PS: </span><span style=" font-size:10pt;"> Ajouter plus d'utilisateurs et changer votre nom/mot de passe n'est pas encore possible par l'interface Quassel.</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:10pt;">Si vous avez besoin de faire cela regarder le script manageusers.py qui est dans le dossier /scripts.</p></body></html> CoreConfigWizardIntroPage - + Form Formulaire - + This wizard will guide you through the setup of your Quassel Core. Cet assistant va vous guider dans le processus de paramétrage de votre Noyau Qassel. @@ -1503,33 +1505,33 @@ p, li { white-space: pre-wrap; } Storing Your Settings - + Sauver vos paramètres Your settings are now stored in the core, and you will be logged in automatically. - + Vos paramètres sont maintenant sauvés dans le coeur, et vous serez connecté automatiquement. CoreConfigWizardStorageSelectionPage - + Form Formulaire - + Storage Backend: Base de données: - + Description - + Foobar Pied @@ -1537,37 +1539,37 @@ p, li { white-space: pre-wrap; } CoreConfigWizardSyncPage - + Form Formulaire - + Your Choices Vos choix - + Admin User: Utilisateur Administrateur: - + foo - + Storage Backend: Base de données: - + bar - + Please wait while your settings are being transmitted to the core... Merci d'attente un instant vos paramètres sont transmis au noyau... @@ -1656,7 +1658,7 @@ p, li { white-space: pre-wrap; } <b>Impossible de se connecter au Noyau Quassel !</b><br> - + Connect to Quassel Core Connecté au noyau Quassel @@ -1691,22 +1693,22 @@ p, li { white-space: pre-wrap; } Port: - + User: Utilisateur: - + Password: Mot de Passe: - + Remember Mémoriser - + Always use this account Toujours utiliser ce compte @@ -1741,7 +1743,7 @@ p, li { white-space: pre-wrap; } Nouveau - + Delete Supprimer @@ -1773,17 +1775,17 @@ p, li { white-space: pre-wrap; } Do you really want to remove your local settings for this Quassel Core account?<br>Note: This will <em>not</em> remove or change any data on the Core itself! - + Voules vous réellement supprimer les données locals pour ce compte Quassel Noyau ?<br>Notez que cela <em>ne</em> supprimera ou changera <em>aucun</em> paramètre dans le Noyau lui-même ! Connect to %1 - + Connexion à %1 <div style=color:red;>Connection to %1 failed!</div> - + <div style=color:red;>Echec de la connexion à %1 !</div> @@ -1813,88 +1815,91 @@ p, li { white-space: pre-wrap; } Logging in... - + Authentification... - + Login - + Utilisateur - + Edit... Modifier... - + Add... Ajouter... - + Initializing your connection - + Lancement de votre connexion - + Connected to apollo.mindpool.net. Connecté à apollo.mindpool.net. - + Core Info reserve some space - + Infos du Noyau +reserver +un peu +d'espace - + Configure your Quassel Core Configurer votre noyau Quassel - + The Quassel Core you are connected to is not configured yet. You may now launch a configuration wizard that helps you setting up your Core. - + Le Noyau Quassel auquel vous essayez de vous connecter n'est pas encore configuré. Vous pouvez maintenant lancer l'assistant de configuration qui vous aide à paramétrer votre Noyau. - + Launch Wizard Lancer l'Assistant - + Initializing your session... Lancement de votre session... - + <b>Please be patient while your client synchronizes with the Quassel Core!</b> - + <b>Merci de patienter le temps que votre client se synchronise avec le Noyau Quassel !</b> - + Session state: Etat de la Session: - + Network states: Etats du réseau: - + 0/0 - + Channel states: Etats du Canal: - + User states: Etats de l'utilisateur: @@ -1973,12 +1978,12 @@ space CoreSession::createNetwork(): Got invalid networkId from Core when trying to create network %1! - + CoreSession::createNetwork(): Le noyau a renvoyé idRéseau invalide lors de la création du réseau %1! CoreSession::createNetwork(): Trying to create a network that already exists, updating instead! - + CoreSession::createNetwork(): Essai de création d'un réseau dejà existant, mise à jour réalisée ! @@ -1992,22 +1997,22 @@ space CreateIdentityDlg - + Create New Identity Créer une nouvelle identité - + Identity name: Nom de l'identité: - + Create blank identity Créer un identité vide - + Duplicate: Copier: @@ -2043,24 +2048,24 @@ space DebugConsole - + Debug Console - + Console d'Erreurs - + local - + local - + core - + noyau - + Evaluate! - + Evaluer! @@ -2129,69 +2134,69 @@ space Polices - + Form Formulaire - + Custom Application Fonts Polices personnalisées pour l'interface - + General: Général: - + Font Police - + Choose... Choisir... - + Topic: Sujet: - + Buffer Views: - + Vues des buffers: - + Nick List: Liste des Pseudos: - + Chat Widget - + Fenêtre de Chat - + Nicks: Pseudos: - + Timestamp: Format d'heure: - + Some of these settings require a restart of the Quassel Client in order to take effect. We intend to fix this. Certains de ces paramètres nécessitent le redémarrage du client Quassel pour prendre effet. Nous allons régler celà. - + Inputline: - + Ligne de Saisie: @@ -2325,99 +2330,99 @@ space Général - + Form Formulaire - + Use system tray icon: - + Utiliser l'icône système: - + Minimize to tray on minimize button - + Minimiser en icône en appuyant sur le bouton minimiser - + Minimize to tray on close button - + Minimiser en icône en appuyant sur le bouton fermer - + Tray icon: - + Icône système: - + Show system tray icon Voir l'icône système - + User Notification: - + Notification à l'Utilisateur: - + Animate tray icon - + Animer l'icone - + Display pop-up messages - + Afficher les messages d'aide - + Display user related messages and private Notices: - + Afficher les messages des utilisateurs et les messages privés: - + in status buffer - + dans le buffer d'état - + in query buffer (if exists) - + dans le buffer de requête (s'il existe) - + in current buffer - + dans le buffer courant - + Buffer view: - + Vue Buffer: - + Display topic in tooltip - + Afficher le sujet en bulle - + Mouse wheel changes displayed buffers - + La roulette de la souris change de buffer affiché - + The suffix appended to a nick on completion via TAB. Default is ": " - + Le suffixe ajouté au pseudo lorsqu'il est terminé par TAB est par défaut ": " - + Input Line: - + Ligne de Saisie: - + Completion suffix: - + Suffixe pour compléter: @@ -2428,7 +2433,7 @@ space Comportement - + Highlight Surlignage @@ -2443,57 +2448,57 @@ space règle de surlignage - + Form Formulaire - + Highlight list Liste de soulignement - + RegEx Expression régulière - + CS SC - + Enable Activé - + Add Ajouter - + Remove Supprimer - + Highlight nicks Surlignage des pseudos - + All nicks from identity Tous les pseudos de l'identité - + Current nick Pseudo courant - + None Aucun @@ -2679,37 +2684,37 @@ space Formulaire - + Add... Ajouter... - + ... ... - + General Général - + Real Name: Nom Réel: - + Nicknames Pseudos - + &Add... &Ajouter... - + Re&name... &Renommer... @@ -2719,77 +2724,77 @@ space &Supprimer - + Move upwards in list Monter dans la liste - + Move downwards in list Descendre dans la liste - + A&way A&bsent - + Away Reason Motif d'absence - + Return Message Message de retour - + Away Nick Pseudo d'absence - + Auto Away Absence Automatique - + Auto away after Absence Automatique après - + minutes minutes - + Advanced Expert - + Ident: Ident: - + Messages Messages - + Part Reason: Modif de Départ: - + Quit Reason: Motif de Sortie: - + Kick Reason: Motif de Kick: @@ -2801,27 +2806,27 @@ space <b>The following problems need to be corrected before your changes can be applied:</b><ul> - + <b>Les problèmes suivants doivent être corrigés avant que vos changements soient appliqués:</b><ul> <li>All identities need an identity name set</li> - + <li>Toutes les identitées ont besoin qu'un nom d'identité soit saisi</li> <li>Every identity needs at least one nickname defined</li> - + <li>Chaque identité doit avoir au moins un pseudo défini</li> <li>You need to specify a real name for every identity</li> - + <li>Vous devez saisir un nom réel pour chaque identité</li> <li>You need to specify an ident for every identity</li> - + <li>Vous devez saisir un ident pour chaque identité</li> @@ -2831,7 +2836,7 @@ space One or more identities are invalid - + Une ou plusieurs identités sont invalides @@ -2844,7 +2849,7 @@ space Voulez vous vraiment supprimer l'identité "%1"? - + Rename Identity Renommer l'identité @@ -2854,37 +2859,37 @@ space Merci de saisir un nom pour l'identité "%1"! - + Add Identity Ajoute l'identité - + Remove Identity Supprimer l'identité - + The "Real Name" is shown in /whois. Le "Nom Réel" est montré dans le /whois. - + Add Nickname Ajouter un pseudo - + Remove Nickname Supprimer un pseudo - + Remove Supprimer - + The "ident" is part of your hostmask and, together with your host, uniquely identifies you within the IRC network. L' "ident" fait partie de votre masque d'hôte et ,conjointement avec votre hôte, identifie vous identifie de manière unique au réseau IRC. @@ -2935,7 +2940,7 @@ space InputWidget - + Form Formulaire @@ -3076,12 +3081,12 @@ space [Whois] %1 has voice on channels: %2 - [Whois] %1a voix sur les canaux: %2 + [Whois] %1 a voix sur les canaux: %2 [Whois] %1 is an operator on channels: %2 - [Whois] %1est opérateur sur les canaux: %2 + [Whois] %1 est opérateur sur les canaux: %2 @@ -3126,7 +3131,7 @@ space No free and valid nicks in nicklist found. use: /nick <othernick> to continue - + Aucun pseudo libre et valide n'a été trouvé dans la liste. Utiliser: /nick <autrepseudo> pour continuer @@ -3134,12 +3139,12 @@ space idling since %1 - + inactif depuis %1 login time: %1 - + durée de connexion: %1 @@ -3178,7 +3183,7 @@ p, li { white-space: pre-wrap; } Attente du noyau... - + Not connected to core. Déconnecté au noyau. @@ -3198,7 +3203,7 @@ p, li { white-space: pre-wrap; } Tous les réseaux - + MainWindow Fenêtre principale @@ -3233,157 +3238,157 @@ p, li { white-space: pre-wrap; } Noyau - + &Network List... Liste des &Réseaux... - + F2 F2 - + Quick &Connect... - + Quick &Connecte... - + Disconnect Déconnecter - + Reconnect Reconnecter - + Join Channel... Rejoindre le Canal... - + Set Away globally Mettre Absent partout - + Quit... Quitter... - + Edit Identities... Editer les identités... - + Configure Quassel... Configurer Quassel... - + F7 F7 - + Manage Views... Gérer les Vues... - + About Qt... À propos de Qt... - + About Quassel IRC... À propos de Quassel IRC... - + Import Backlog Importer l'historique - + Connect Connecter - + Internal Interne - + Disconnect from Core Déconnecter du Noyau - + Connect to Core... Connecter au Noyau... - + Connected to core. Connecté au noyau. - + Edit &Networks... - + &Modifier les réseaux... - + Nicks Pseudos - + Chat Monitor Moniteur de Chat - + Inputline Ligne de Saisie - + Topic Sujet - + Statusbar Barre d'état - + &File &Fichier - + &Networks &Réseaux - + &Settings &Paramètres - + &Views &Vues - + &Help &Aide @@ -3393,20 +3398,35 @@ p, li { white-space: pre-wrap; } &Debug - + Debug &Console - + &Console et Déboguage - + Disconnect from Network... Déconnecter du Réseau... - + &Edit Networks... &Modifier les réseaux... + + + Buffer Views + Vues Buffer + + + + Manage Buffer Views + Gérer les Vues Buffer + + + + Lock Dock Positions + Bloquer les positions des fenêtres + Message @@ -3702,12 +3722,12 @@ p, li { white-space: pre-wrap; } Ces commandes sont exécutées après connexion. - + Dialog Fenêtre - + Please enter a network name: Merci de saisir un nom de réseau: @@ -3722,7 +3742,7 @@ p, li { white-space: pre-wrap; } Buffer - + Buffer @@ -3750,17 +3770,17 @@ p, li { white-space: pre-wrap; } <b>The following problems need to be corrected before your changes can be applied:</b><ul> - + <b>Les problèmes suivants doivent être corrigés avant que vos changements soient appliqués:</b><ul> <li>All networks need at least one server defined</li> - + <li>Chaque réseau doit avoir au moins un serveur défini</li> </ul> - </ul> + </ul> @@ -3790,214 +3810,216 @@ p, li { white-space: pre-wrap; } Do you really want to delete the network "%1" and all related settings, including the backlog? - + Voulez vous vraiment détruire le réseau "%1" et tous les paramètres correspondants, ainsi que l'historique? - + Form Formulaire - + Re&name... &Renommer... - + &Add... &Ajouter... - + De&lete &Supprimer - + Connect now Connecter maintenant - + Network Details Détails du Réseau - + Identity: Identité: - + Servers Serveurs - + Manage servers for this network - + Gérer les serveurs de ce réseau - + &Edit... &Modifier... - + Move upwards in list Monter dans la liste - + ... ... - + Move downwards in list Descendre dans la liste - + Choose random server for connecting Choisir un serveur aléatoire pour se connecter - + Perform Exécuter - + Configure automatic identification or misc. commands to be executed after connecting to a server - + Configuration automatique identification et autres commandes qui doivent être exécutées après la connexion au serveur - + Commands to execute on connect: Commandes à exécuter à la connexion: - + Specify a list of IRC commands to be executed upon connect. Note that Quassel IRC automatically rejoins channels, so /join will rarely be needed here! - + Précisez la liste des commandes IRC à exécuter lors de la connection +Notez que Quassel IRC rejoint automatiquement les canaux, aussi /join ne sera que rarmeent nécessaire ici ! - + Auto Identify Auto Identification - + NickServ NickServ - + Service: Service: - + Password: Mot de Passe: - + Advanced Expert - + Configure advanced settings such as message encodings and automatic reconnect - + Configurer les paramètres avancés tels que l'encodage des messages et la reconnexion automatique - + Control encodings for in- and outgoing messages - + Contrôle les encodages pour les messages entrants et sortants - + Encodings Encodages - + Specify which encoding your messages will be sent in. UTF-8 should be a sane choice for most networks. - + Préciser sous quel encodage vos messages seront envoyés. +UTF-8 devrait être un choix normal pour la majorité des réseaux. - + Send messages in: - + Envoyer les messages en: - + Incoming messages encoded in Utf8 will always be treated as such. This setting defines the encoding for messages that are not Utf8. - + Les messages entrants arrivant en Utf8 seront toujourstraités comme tels. Ce paramètre définit l'encodage des messages qui ne sont pas en Utf8. - + Receive fallback: - + Réception de repli: - + This specifies how control messages, nicks and servernames are encoded. Unless you *really* know what you do, leave this as ISO-8859-1! - + Ceci précise comment les messages de contrôles, les pseudos et les noms des serveurs sont encodés.A moins de *réellement* savoir ce que vous faites, laissez cela en ISO-8859-1 ! - + Server encoding: - + Encodage du serveur: - + Use default settings for encodings (recommended) - + Utiliser les paramètres par défaut pour l'encodage (recommandé) - + Use defaults Utiliser les paramètres par défauts - + Control automatic reconnect to the network - + Contrôle de la reconnection automatique au réseau - + Automatic Reconnect Connexion automatique - + Interval: Intervalle: - + s - + s - + Retries: - + Tentatives: - + Unlimited Illimité - + Rejoin all channels on reconnect Rejoindre tous les canaux à la reconnexion @@ -4020,17 +4042,17 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Ajouter un pseudo - + Edit Nickname Editer le Pseudo - + Please enter a valid nickname: Merci de saisir un pseudo valide: - + A valid nickname may contain letters from the English alphabet, digits, and the special characters {, }, [, ], \, |, `, ^, _ and -. Un pseudo valide peut contenir des lettres de l'alphabet anglais, chiffres, et les caractères spéciaux {, }, [, ], \, |, `, ^, _ et -. @@ -4269,17 +4291,17 @@ Unless you *really* know what you do, leave this as ISO-8859-1! SaveIdentitiesDlg - + Sync With Core Syncro avec le noyau - + Syncing data with core, please wait... Synchronisation des données avec le noyau, merci de patienter... - + Abort Abandonner @@ -4292,27 +4314,27 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Saisissez les infos du Serveur - + Server address: Adresse du Serveur: - + Port: Port: - + Dialog Fenêtre - + Password: Mot de Passe: - + Use SSL Utilise SSL @@ -4381,7 +4403,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Fenêtre - + Settings Paramètres @@ -4393,30 +4415,30 @@ Unless you *really* know what you do, leave this as ISO-8859-1! There are unsaved changes on the current configuration page. Would you like to apply your changes now? - + Il y a des changements non sauvegardés sur cette page de configuration. Voulez vous appliquer vos changements maintenant ? Reload Settings - + Recharger les paramètres Do you like to reload the settings, undoing your changes on this page? - + Voulez vous recharger les paramètres, et annuler vos changements sur cette page ? Restore Defaults - + Restaurer les valeurs par défaut Do you like to restore the default values for this page? - + Voulez-vous restaurer les paramètres par défaut de cette page? - + Configure Quassel Configurer Quassel @@ -4426,22 +4448,22 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Reload Settings - + Recharger les paramètres Do you like to reload the settings, undoing your changes on this page? - + Voulez vous recharger les paramètres, et annuler vos changements sur cette page ? Restore Defaults - + Restaurer les valeurs par défaut Do you like to restore the default values for this page? - + Voulez-vous restaurer les paramètres par défaut de cette page? @@ -4449,14 +4471,14 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Fenêtre - + Settings Paramètres - + Configure Quassel - Configurer Quassel + Configurer Quassel @@ -4479,7 +4501,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! SQLite is a file-based database engine that does not require any setup. It is suitable for small and medium-sized databases that do not require access via network. Use SQLite if your Quassel Core should store its data on the same machine it is running on, and if you only expect a few users to use your core. - + SQLite est un moteur de base de données par fichiers qui ne nécessite aucun paramétrage. C'est pratique pour les petites et moyennes base de données qui n'ont pas besoin d'être consultées par réseau. Utiliser SQLite si votre Noyau Quassel doit sauver ses données sur la même machine qu'il utilise, et si vous pensez être peu à utiliser votre noyau. @@ -4553,13 +4575,13 @@ Click to edit! Drag to scroll the topic! - + Tirer pour dérouler le sujet! TopicWidget - + Form Formulaire diff --git a/i18n/quassel_nb_NO.ts b/i18n/quassel_nb_NO.ts new file mode 100644 index 00000000..d0d86b1b --- /dev/null +++ b/i18n/quassel_nb_NO.ts @@ -0,0 +1,3787 @@ + + + + + AboutDlg + + + About + Om + + + + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Trebuchet MS'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Quassel IRC</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:14pt; font-weight:600;"><span style=" font-size:8pt; font-weight:400;">mobile edition</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:5pt;"> </span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">(C) 2005-2007 by</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt; font-weight:600;">The Quassel IRC Team</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">Manuel Nickschas</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">Marcus Eggenberger</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">Marco Genise</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;"><span style=" font-size:4pt;"> </span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">&lt;http://quassel-irc.org&gt;</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">&lt;devel@quassel-irc.org&gt;</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Trebuchet MS'; font-size:10pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Quassel IRC</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:14pt; font-weight:600;"><span style=" font-size:8pt; font-weight:400;">mobil utgave</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:5pt;"> </span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">(C) 2005-2007 by</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt; font-weight:600;">The Quassel IRC Team</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">Manuel Nickschas</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">Marcus Eggenberger</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">Marco Genise</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;"><span style=" font-size:4pt;"> </span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">&lt;http://quassel-irc.org&gt;</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">&lt;devel@quassel-irc.org&gt;</p></body></html> + + + + <b>A modern, distributed IRC Client</b><br><br>&copy;2005-2008 by the Quassel Project<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> on <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC is dual-licensed under <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> and <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>Most icons are &copy; by the <a href="http://www.oxygen-icons.org">Oxygen Team</a> and used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Please use <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a> to report bugs. + <b>En moderne, distribuert IRC Klient</b><br><br>&copy;2005-2008 by the Quassel Project<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> på <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC er dobbelt-lisensiert under <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> og <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>De fleste ikonene er &copy; <a href="http://www.oxygen-icons.org">Oxygen Team</a> og benyttet under <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Vennligst benytt <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a> til å rapportere bugs. + + + + Quassel IRC is mainly developed by: + Quassel IRC er hovedsakelig utviklet av: + + + + We would like to thank the following contributors (in alphabetical order) and everybody we forgot to mention here: + Vi vil takke følgende bidragsytere (i alfabetisk rekkefølge) og alle vi glemte å nevne her: + + + + Special thanks goes to:<br><dl><dt><a href="http://www.oxygen-icons.org">The Oxygen Team</a></dt><dd>for creating most of the shiny icons you see throughout Quassel</dd><br><dt><a href="http://www.trolltech.com">Trolltech</a></dt><dd>for creating Qt and Qtopia, and for sponsoring development of Quasseltopia with Greenphones and more</dd> + En spesiell takk går til:<br><dl><dt><a href="http://www.oxygen-icons.org">The Oxygen Team</a></dt><dd>for å lage de fleste av de skinnende ikonene du ser i Quassel</dd><br><dt><a href="http://www.trolltech.com">Trolltech</a></dt><dd>for å ha laget Qt og Qtopia, og for sponsingen av utvikling av Quasseltopia med Greenphones og mer</dd> + + + + About Quassel + Om Quassel + + + + background:white; + background:white: + + + + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'DejaVu Sans'; font-size:15pt; font-weight:600; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Quassel IRC</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:15pt; font-weight:600; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Quassel IRC</p></body></html> + + + + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:600; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Version 0.2.0-pre, Build &gt;= 474 (2008-02-08)</p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:600; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Versjon 0.2.0-pre, Build &gt;= 474 (2008-02-08)</p></body></html> + + + + &About + &Om + + + + QTextBrowser { background:transparent;} + QTextBrowser { background:transparent;} + + + + A&uthors + &Utviklere + + + + &Contributors + &Bidragsytere + + + + &Thanks To + &Takk til + + + + Special thanks goes to:<br><dl><dt><b>John "nox-Hand" Hand</b></dt><dd>for great artwork and the Quassel logo/icon</dt><dt><b><a href="http://www.oxygen-icons.org">The Oxygen Team</a></b></dt><dd>for creating most of the other shiny icons you see throughout Quassel</dd><dt><b><a href="http://www.trolltech.com">Trolltech</a></b></dt><dd>for creating Qt and Qtopia, and for sponsoring development of Quasseltopia with Greenphones and more</dd> + En spesiell takk til:<br><dl><dt><b>John "nox-Hand" Hand</b></dt><dd>for flott utseende arbeid ogQuassel logoen/ikoner</dt><dt><b><a href="http://www.oxygen-icons.org">The Oxygen Team</a></b></dt><dd>for å ha laget de fleste av de flotte ikonene i Quassel</dd><dt><b><a href="http://www.trolltech.com">Trolltech</a></b></dt><dd>for å lage Qt og Qtopia, og for å sponse utviklingen av Quasseltopia med Greenphones og mer</dd> + + + + AdminUserPage + + + Setup Admin User + Setup administrasjonbruker + + + + Please enter credentials for the admin user. + Vennligst skriv inn bruker-legitimasjonen for administrasjonsbrukeren. + + + + Name: + Navn: + + + + Password: + Passord: + + + + AppearanceSettingsPage + + + Appearance + Utseende + + + + General + Generelt + + + + Form + Skjema + + + + Client style: + Klient stil: + + + + BufferItem + + + Status Buffer + Status buffer + + + + <b>Status buffer of %1</b> + <b>Status buffer av %1</b> + + + + <b>Channel %1</b> + <b>Kanal %1</b> + + + + <b>Users:</b> %1 + <b>Brukere:</b> %1 + + + + <b>Topic:</b> %1 + <b>Emne:</b> %1 + + + + Not active <br /> Double-click to join + Ikke aktive <br/> Dobbelt-klikk for å bli med + + + + <b>Query with %1</b> + <b>Spørring med %1</b> + + + + Away Message: %1 + Fraværs melding: %1 + + + + %1 - %2 + %1 - %2 + + + + <p> %1 </p> + <p> %1 </p> + + + + <b>Mode:</b> %1 + <b>Modus:</b> %1 + + + + BufferView + + + Connect + Koble til + + + + Disconnect + Koble fra + + + + Join Channel + Bli med i kanal + + + + Join + Bli med + + + + Part + Forlate + + + + Delete buffer + Slett buffer + + + + Hide Events + Skjul hendelser + + + + Join Events + Bli med hendelser + + + + Part Events + Forlate hendelser + + + + Kill Events + Slett hendelser + + + + Quit Events + Avslutt hendelser + + + + Mode Events + Mouds hendelser + + + + Ignore list + Ignorerings liste + + + + WHO + WHO + + + + Input channel name: + Skriv inn kanal navnet: + + + + Remove buffer permanently? + Slette buffer permanent? + + + + Do you want to delete the buffer "%1" permanently? This will delete all related data, including all backlog data, from the core's database! + Vil do slette bufferen "%1" permanent? Dette vil slette alle relaterte data, inkludert all historikk-data, fra Kjernens database! + + + + Show Channel List + Vis Kanal listen + + + + Hide buffers + Skjul Buffere + + + + Hide buffers permanently + Skjuler Buffere permanent + + + + BufferViewDock + + + All Buffers + Alle Buffere + + + + BufferViewEditDlg + + + Dialog + Dialog + + + + Please enter a name for the buffer view: + Vennligst skriv inn navnet på buffer visningen: + + + + Add Buffer View + Legg til buffer visning + + + + BufferViewSettingsPage + + + General + Generelt + + + + Buffer Views + Buffer visninger + + + + Form + Skjema + + + + Re&name... + &Omdøp... + + + + &Add... + &Legg til... + + + + De&lete + &Slett + + + + Buffer View Settings + Buffer visning innstillinger + + + + Show only Buffers from: + Vis kun Buffere fra: + + + + Restrict Buffers to: + Begrens Buffere til: + + + + Status Buffers + Status buffere + + + + Channel Buffers + Kanal buffere + + + + Query Buffers + Spørrings buffere + + + + Add new Buffers automatically + Legg til nye Buffere automatisk + + + + Sort Buffers alphabetically + Sorter Buffere alfabetisk + + + + Delete Buffer View? + Slette Buffer visning? + + + + Do you really want to delete the buffer view "%1"? + Vil du virkelig slette Buffer visningen "%1"? + + + + Network: + Nettverk: + + + + All + Alle + + + + Hide inactive Buffers + Skjule inaktive Buffere + + + + Sort alphabetically + Sorter alfabetisk + + + + Minimum Activity: + Minimum Aktivitet: + + + + No Activity + Ingen Aktivitet + + + + Other Activity + Annen Aktivitet + + + + New Message + Ny beskjed + + + + Highlight + Uthev + + + + Preview: + Forhåndsvisning: + + + + BufferViewWidget + + + All + Alle + + + + Chans + Kanaler + + + + Queries + Spørringer + + + + Nets + Nett + + + + Select Buffer + Velg Buffer + + + + Tab 1 + Arkfane 1 + + + + BufferView + BufferVisning + + + + BufferWidget + + + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Trebuchet MS'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-size:89pt; color:#00008b;">Quassel IRC</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:49pt;"><span style=" font-size:22pt;">Chat comfortably. Anywhere.</span></p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Trebuchet MS'; font-size:10pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-size:89pt; color:#00008b;">Quassel IRC</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:49pt;"><span style=" font-size:22pt;">Chat komfortabelt. Hvor som helst.</span></p></body></html> + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Trebuchet MS'; font-size:13pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/quassel/96x96/apps/quassel.png" /><span style=" font-size:89pt; color:#00008b;">uassel IRC</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:49pt;"><span style=" font-size:22pt;">Chat comfortably. Anywhere.</span></p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Trebuchet MS'; font-size:13pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/quassel/96x96/apps/quassel.png" /><span style=" font-size:89pt; color:#00008b;">uassel IRC</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:49pt;"><span style=" font-size:22pt;">Chat comfortably. Anywhere.</span></p></body></html> + + + + ChannelListDlg + + + Channel List + Kanal liste + + + + Search Pattern: + Søke mønster: + + + + Search Channels + Søk i Kanalene + + + + Filter: + Filter: + + + + Client + + + Identity already exists in client! + Identen finnes allerede i klienten! + + + + ClientSyncer + + + The Quassel Core you try to connect to is too old! Please consider upgrading. + Quassel Kjernen du forsøker å koble til er for gammel! Vennligst vurder å oppgradere. + + + + <b>Invalid data received from core!</b><br>Disconnecting. + <b>Invalide data mottatt fra kjernen!</b><br>Kobler fra. + + + + Internal connections not yet supported. + Interne tilkoblinger er enda ikke støttet. + + + + <b>This client is built without SSL Support!</b><br />Disable the usage of SSL in the account settings. + <b>Denne klienten er bygget uten SSL støtte!</b><br />Deaktiver bruken av SSL i konto innstillingene. + + + + <b>The Quassel Core you are trying to connect to is too old!</b><br>Need at least a Core Version %1 (Build >= %2) to connect. + <b>Quassel Kjernen du forsøker å koble til er for gammel!</b><br>Trenger minst Kjerne versjon %1 (Build >= %2) for å koble til. + + + + <b>The Quassel Core you are trying to connect to does not support SSL!</b><br />If you want to connect anyways, disable the usage of SSL in the account settings. + <b>Quassel Kjernen du forsøker å koble til, støtter ikke SSL!</b><br />Hvis du alikevel ønsker å koble til, deaktiver bruken av SSL i konto innstillingene. + + + + Logging in... + Logger inn... + + + + <b>The Quassel Core you are trying to connect to is too old!</b><br>Need at least core/client protocol v%1 to connect. + <b>Quassel Kjernen du forsøker å koble til er for gammel!</b><br>Trenger minst Kjerne/Klient protokoll v%1 for å koble til. + + + + ColorSettingsPage + + + Appearance + Utseende + + + + Color settings + Farge innstillinger + + + + Form + Skjema + + + + Bufferview + Buffervisning + + + + Activities: + Aktiviteter: + + + + FG + FG + + + + BG + BG + + + + Use BG + Bruk BG + + + + Default: + Standard: + + + + Inactive: + Inaktiv: + + + + Highlight: + Uthev: + + + + New Message: + Ny beskjed: + + + + Other Activity: + Andre aktiviteter: + + + + Preview: + Forhåndsvisning: + + + + 1 + 1 + + + + Chatview + Chatvisning + + + + Server Activity + Server Aktivitet + + + + Foreground + Forgrunn + + + + Background + Bakgrunn + + + + Error Message: + Feilmelding: + + + + Notice Message: + Informativ beskjed: + + + + Plain Message: + Enkel Beskjed: + + + + Server Message: + Server Beskjed: + + + + Highlight Message: + Uthevet Beskjed: + + + + User Activity + Bruker Aktivitet + + + + Action Message: + Handlings Beskjed: + + + + Join Message: + Bli med Beskjed: + + + + Kick Message: + Spark Beskjed: + + + + Mode Message: + Modus Beskjed: + + + + Part Message: + Forlate Beskjed: + + + + Quit Message: + Avslutt Beskjed: + + + + Rename Message: + Omdøp Beskjed: + + + + Message + Beskjed: + + + + Timestamp: + Tidsstempel: + + + + Sender: + Avsender: + + + + Nick: + Kallenavn: + + + + Hostmask: + Vertsmaske: + + + + Channelname: + Kanalnavn: + + + + Mode flags: + Modus flagg: + + + + Url: + Url: + + + + Mirc Color Codes + Mirc farge koder + + + + Color Codes + Farge Koder + + + + Color 0: + Farge 0: + + + + Color 1: + Farge 1: + + + + Color 2: + Farge 2: + + + + Color 3: + Farge 3: + + + + Color 4: + Farge 4: + + + + Color 5: + Farge 5: + + + + Color 6: + Farge 6: + + + + Color 7: + Farge 7: + + + + Color 8: + Farge 8: + + + + Color 14: + Farge 14: + + + + Color 15: + Farge 15: + + + + Color 13: + Farge 13: + + + + Color 12: + Farge 12: + + + + Color 11: + Farge 11: + + + + Color 10: + Farge 10: + + + + Color 9: + Farge 9: + + + + Nickview + Kallenavnvisning + + + + Nick status: + Kallenavn status: + + + + Online: + Tilgjengelig: + + + + Away: + Borte: + + + + ConclusionPage + + + Conclusion + Konklusjon + + + + You chose the following configuration: + Du velger følgende konfigurasjon: + + + + ConfigWizard + + + Core Configuration Wizard + Veiviser for Kjerne Konfigurasjon + + + + Core + + + Could not initialize any storage backend! Exiting... + Kunne ikke initiere noen lagrings motor! Avslutter... + + + + Calling restoreState() even though active sessions exist! + Kaller restoreState() selv om aktive sesjoner eksisterer! + + + + Core state too old, ignoring... + Kjerne status for gammel, ignorerer... + + + + Admin user or password not set. + Administrasjons bruker, eller passord er ikke satt. + + + + Could not setup storage! + Kunne ikke konfigurere lagring! + + + + Creating admin user... + Oppretter administrasjons bruker... + + + + Antique client trying to connect... refusing. + Antikk klient forsøker å koble til... Nekter. + + + + <b>Quassel Core Version %1 (Build &ge; %2)</b><br>Up %3d%4h%5m (since %6) + <b>Quassel Kjerne Versjon %1 (Build &ge; %2)</b><br>Oppe %3d%4h%5m (siden %6) + + + + <b>Your Quassel Client is too old!</b><br>This core needs at least client version %1 (Build >= %2).<br>Please consider upgrading your client. + <b>Din Quassel Klient er for gammel!</b><br>Denne Kjernen krever minst klient versjon %1 (Build >= %2).<br>Vennligst vurder å oppgradere klienten din. + + + + Client %1 too old, rejecting. + Klient %1 for gammel, avviser. + + + + <b>Client not initialized!</b><br>You need to send an init message before trying to login. + <b>Klienten er ikke initialisert!</b><br>Du trenger å sende en init beskjed før du forsøker å logge inn. + + + + Client %1 did not send an init message before trying to login, rejecting. + Klient %1 sendte ikke en init beskjed før den forsøkte å logge inn, avviser. + + + + <b>Invalid username or password!</b><br>The username/password combination you supplied could not be found in the database. + <b>Ugyldig brukernavn, eller passord!</b><br>Brukernavn/passord kombinasjonen du oppga kunne ikke bli funnet i databasen. + + + + Client %1 initialized and authentificated successfully as "%2" (UserId: %3). + Klient %1 initialisert og autentisiert suksessfullt som "%2" (Brukerid: %3). + + + + Non-authed client disconnected. + Uautorisert klient frakoblet. + + + + Could not initialize session for client %1! + Kunne ikke initiere sesjonen for klient %1! + + + + Currently, Quassel only supports SQLite3. You need to build your +Qt library with the sqlite plugin enabled in order for quasselcore +to work. + Quassel supporterer for øyeblikket kun SQLite3. Du trenger å +kompilere ditt Qt bibliotek med sqlite aktivert for å få Quassel +Kjernen til å virke. + + + + <b>Your Quassel Client is too old!</b><br>This core needs at least client/core protocol version %1.<br>Please consider upgrading your client. + <b>Din Quassel Klient er for gammel!</b><br>Denne Kjernen trenger minst Klient/Kjerne protokoll versjon %1.<br>Vennligst vurder å oppgradere klienten din. + + + + <b>Quassel Core Version %1</b><br>Built: %2<br>Up %3d%4h%5m (since %6) + <b>Quassel Kjerne Versjon %1</b><br>Bygget: %2<br>Oppe %3d%4h%5m (siden %6) + + + + Client %1 initialized and authenticated successfully as "%2" (UserId: %3). + Klient %1 initialisert og autentisiert suksessfullt som "%2" (BrukerID: %3). + + + + CoreAccountEditDlg + + + Add Core Account + Legg til Kjerne Konto + + + + Missing information + Manglende informasjon + + + + Please enter all required information or discard changes to return to account selection. + Vennligst skriv inn all påkrevd informasjon, eller forkast endringene for å returnere til valg av konto. + + + + Non-unique account name + Ikke-unikt konto navn + + + + Account names need to be unique. Please enter a different name or discard all changes to return to account selection. + Konto navn må være unike. Vennligst forsøk et annet navn, eller forkast alle endringene for å returnere til valg av konto. + + + + Edit Core Account + Rediger Kjerne Konto + + + + Port: + Port: + + + + Host: + Vert: + + + + Password: + Passord: + + + + Account: + Konto: + + + + User: + Bruker: + + + + Account Details + Konto detaljer + + + + Account Name: + Konto Navn: + + + + Use built-in Quassel Core + Bruk innebygd Quassel Kjerne + + + + Remote host: + Ekstern vert: + + + + Use secure connection (SSL) + Bruk sikker tilkobling (SSL) + + + + Use a proxy: + Bruk en proxy: + + + + Proxy Type: + Proxy Type: + + + + Socks 5 + Socks 5 + + + + HTTP + HTTP + + + + Proxy Host: + Proxy Vert: + + + + Proxy Port: + Proxy Port: + + + + localhost + localhost + + + + Proxy Username: + Proxy Brukernavn: + + + + Proxy Password: + Proxy Passord: + + + + CoreConfigWizard + + + Core Configuration Wizard + Veiviser for Kjerne Konfigurasjon + + + + Your core has been successfully configured. Logging you in... + Din Kjerne har blitt suksessfullt konfigurert. Logger deg inn... + + + + Core configuration failed:<br><b>%1</b><br>Press <em>Next</em> to start over. + Kjerne konfigurasjonen feilet:<br><b>%1</b><br>Trykk <em>Neste</em> for å starte på nytt. + + + + Your are now logged into your freshly configured Quassel Core!<br>Please remember to configure your identities and networks now. + Du er nå logget inn i din nylig konfigurerte Quassel Kjerne!<br>Vennligst husk å konfigurere dine identiteter og nettverk nå. + + + + CoreConfigWizardAdminUserPage + + + Form + Skjema + + + + Username: + Brukernavn: + + + + Password: + Passord: + + + + Repeat password: + Gjenta passordet: + + + + Remember password + Husk passord + + + + <em>Note: Adding more users and changing your username/password has not been implemented yet. + <em>Merk: Å legge til flere brukere og endre ditt brukernavn/passord er ikke implementert enda. + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'DejaVu Sans'; font-size:8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:13pt;"><span style=" font-size:10pt; font-weight:600;">Note: </span><span style=" font-size:10pt;">Adding more users and changing your username/password is not possible via Quassel's interface yet.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:10pt;">If you need to do these things have a look at the manageusers.py script which is located in the /scripts directory.</p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:8pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:13pt;"><span style=" font-size:10pt; font-weight:600;">Note: </span><span style=" font-size:10pt;">Legge til flere brukere, eller endre ditt brukernavn/passord er ikke mulig via Quassel sitt grensesnitt enda.</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:10pt;">Hvis du trenger å gjøre dette, ta en titt på manageusers.py skriptet som du finner i /scripts katalogen.</p></body></html> + + + + CoreConfigWizardIntroPage + + + Form + Skjema + + + + This wizard will guide you through the setup of your Quassel Core. + Denne veiviseren vil guide deg gjennom konfigureringen av din Quassel Kjerne. + + + + CoreConfigWizardPages::AdminUserPage + + + Create User Account + Opprett Bruker Konto + + + + First, we will create a user account on the core. This first user will have administrator privileges. + Først oppretter vi en bruker konto i Kjernen. Den første brukeren vil ha administrative rettigheter. + + + + Create Admin User + Opprett Admin bruker + + + + First, we will create a user on the core. This first user will have administrator privileges. + Først må det opprettes en bruker på Kjernen. Denne brukeren vil ha administrative rettigheter. + + + + CoreConfigWizardPages::IntroPage + + + Introduction + Introduksjon + + + + CoreConfigWizardPages::StorageSelectionPage + + + Select Storage Backend + Velg lagrings motor + + + + Please select a database backend for the Quassel Core storage to store the backlog and other data in. + Vennligst velg en database motor for Quassel Kjerne lagring, for å lagre historikk og andre data i. + + + + CoreConfigWizardPages::SyncPage + + + Storing Your Settings + Lagrer dine innstillinger + + + + Your settings are now stored in the core, and you will be logged in automatically. + Dine innstillinger er nå lagret i kjernen, og du vil bli logget inn automatisk. + + + + CoreConfigWizardStorageSelectionPage + + + Form + Skjema + + + + Storage Backend: + Lagrings Motor: + + + + Description + Beskrivelse + + + + Foobar + Foobar + + + + CoreConfigWizardSyncPage + + + Form + Skjema + + + + Your Choices + Dine valg + + + + Admin User: + Administrasjons Bruker: + + + + foo + foo + + + + Storage Backend: + Lagrings Motor: + + + + bar + bar + + + + Please wait while your settings are being transmitted to the core... + Vennligst vent mens dine innstillinger blir overført til kjernen... + + + + CoreConnectDlg + + + New + Ny + + + + Delete + Slett + + + + Properties... + Egenskaper... + + + + Remove Account Settings + Fjern Konto Innstillinger + + + + Do you really want to remove your local settings for this Quassel Core account?<br>Note: This will <em>not</em> remove or change any data on the Core itself! + Vil du virkelig fjerne dine lokale innstillinger for denne Quassel Kjerne kontoen?<br>Merk: Dette vil <em>ikke</em> fjerne, eller endre noen data i selve Kjernen! + + + + Select Core Account + Velg Kjerne Konto + + + + Available Quassel Core accounts: + Tilgjengelige Quassel Kjerne kontoer: + + + + ... + ... + + + + Connect + Koble til + + + + Connect to %1 + Koblet til %1 + + + + <div style=color:red;>Connection to %1 failed!</div> + <div style=color:red;>Tilkobling til %1 feilet!</div> + + + + Not connected to %1. + Ikke tilkoblet %1. + + + + Looking up %1... + Slår opp %1... + + + + Connecting to %1... + Kobler til %1... + + + + Connected to %1 + Tilkoblet %1 + + + + Unknown connection state to %1 + Ukjent tilkoblings tilstand til %1 + + + + Logging in... + Logger inn... + + + + Login + Logg inn + + + + Connect to Quassel Core + Koble til Quassel Kjerne + + + + Edit... + Rediger... + + + + Add... + Legg til... + + + + Always use this account + Alltid bruk denne kontoen + + + + Initializing your connection + Initialiserer tilkoblingen din + + + + Connected to apollo.mindpool.net. + Tilkoblet apollo.mindpool.net. + + + + Core Info +reserve +some +space + Kjerne InfoReserveLedigPlass + + + + User: + Bruker: + + + + Password: + Passord: + + + + Remember + Husk + + + + Configure your Quassel Core + Konfigurer Quassel Kjernen din + + + + The Quassel Core you are connected to is not configured yet. You may now launch a configuration wizard that helps you setting up your Core. + Quassel Kjernen du er koblet til er ikke konfigurert enda. Du kan nå stater en konfigurasjons veiviser som vil hjelpe deg å konfigurere Kjernen din. + + + + Launch Wizard + Start Veiviser + + + + Initializing your session... + Initierer sesjonen din... + + + + <b>Please be patient while your client synchronizes with the Quassel Core!</b> + <b>Vennligst vær tålmodig mens klienten din synkroniseres med Quassel Kjernen!</b> + + + + Session state: + Sesjons tilstand: + + + + Network states: + Nettverks tilstander: + + + + 0/0 + 0/0 + + + + Channel states: + Kanal tilstander: + + + + User states: + Bruker tilstander: + + + + CoreConnectProgressDlg + + + Connection Progress + Tilkoblings Fremdrift + + + + Connecting to core... + Kobler til kjernen... + + + + Session + Sesjon + + + + %p% + %p% + + + + Networks + Nettverk + + + + Channels + Kanaler + + + + Users + Brukere + + + + CoreSession + + + Default Identity + Standard Identitet + + + + Client %1 disconnected (UserId: %2). + Klient %1 frakoblet (BrukerId: %2). + + + + CoreSession::createNetwork(): Got invalid networkId from Core when trying to create network %1! + CoreSession::createNetwork(): Fikk ugyldig nettverks ID fra Kjernen under forsøket på å opprette nettverket %1! + + + + CoreSession::createNetwork(): Trying to create a network that already exists, updating instead! + CoreSession::createNetwork(): Forsøker å opprette et nettverk som allerede eksisterer, oppdaterer i stedet for! + + + + CreateIdentityDlg + + + Create New Identity + Opprett Ny Identitet + + + + Identity name: + Identitets navn: + + + + Create blank identity + Opprett tom identitet + + + + Duplicate: + Dupliser: + + + + CtcpHandler + + + Received CTCP PING request from %1 + Mottok CTCP PING forespørsel fra %1 + + + + Received CTCP PING answer from %1 with %2 seconds round trip time + Mottok CTCP PING svar fra %1 med %2 sekunders rund-reise tid + + + + Received CTCP VERSION request by %1 + Mottok CTCP VERSION forespørsel fra %1 + + + + Received CTCP VERSION answer from %1: %2 + Mottok CTCP VERSION svar fra %1: %2 + + + + Received unknown CTCP %1 by %2 + Mottok ukjent CTCP %1 fra %2 + + + + DebugConsole + + + Debug Console + Debug konsoll + + + + local + lokal + + + + core + kjerne + + + + Evaluate! + Evaluer! + + + + EditCoreAcctDlg + + + Edit Core Account + Rediger Kjerne Konto + + + + Port: + Port: + + + + Host: + Vert: + + + + Password: + Passord: + + + + Account: + Konto: + + + + User: + Bruker: + + + + FontsSettingsPage + + + Appearance + Utseende + + + + Fonts + Skrift + + + + Form + Skjema + + + + Custom Application Fonts + Tilpasset Applikasjons Skrifter + + + + Font + Skrift + + + + Choose... + Velg... + + + + Topic: + Emne: + + + + Buffer Views: + Buffer Visninger: + + + + Nick List: + Kallenavn Liste: + + + + Inputline: + Skrivefelt: + + + + General: + Generelt: + + + + Chat Widget + Chat Widget + + + + Nicks: + Kallenavn: + + + + Timestamp: + Tidsstempel: + + + + Some of these settings require a restart of the Quassel Client in order to take effect. We intend to fix this. + Noen av disse innstillingene krever en restart av Quassel Klienten for å virke. Vi vil fikse dette. + + + + GeneralSettingsPage + + + Behaviour + Oppførsel + + + + General + Generelt + + + + Form + Skjema + + + + Use system tray icon: + Bruk system kurv ikon: + + + + Minimize to tray on minimize button + Minimer til kurv etter minimer knapp + + + + Minimize to tray on close button + Mimimer til kurv ved lukk knapp + + + + Tray icon: + Kurv ikon: + + + + Show system tray icon + Vis system kurv ikon + + + + User Notification: + Bruk notifisering: + + + + Animate tray icon + Animer kurv ikon + + + + Display pop-up messages + Vis pop-up beskjeder + + + + Display user related messages and private Notices: + Vi bruker relaterte beskjeder og private Merknader: + + + + in status buffer + i status buffer + + + + in query buffer (if exists) + i spørrings bugger (hvis den eksisterer) + + + + in current buffer + i nåværende buffer + + + + Buffer view: + Buffer visning: + + + + Display topic in tooltip + Vis emne i verktøytips + + + + Mouse wheel changes displayed buffers + Rulleknappen på musen endrer viste buffere + + + + The suffix appended to a nick on completion via TAB. Default is ": " + Endelsen tillagt et kallenavn ved fullføring via TAB. Standard er ": " + + + + Input Line: + Innskrivningslinje: + + + + Completion suffix: + Fullførings suffiks: + + + + HighlightSettingsPage + + + Behaviour + Oppførsel + + + + Highlight + Uthev + + + + this shouldn't be empty + Denne burde ikke være tom + + + + highlight rule + Uthev regel + + + + Form + Skjema + + + + Highlight list + Uthev list + + + + RegEx + RegEx + + + + CS + CS + + + + Enable + Aktiver + + + + Add + Legg til + + + + Remove + Fjern + + + + Highlight nicks + Uthev kallenavn + + + + All nicks from identity + Alle kallenavn fra identitet + + + + Current nick + Nåværende kallenavn + + + + None + Ingen + + + + IdentitiesSettingsPage + + + General + Generelt + + + + Identities + Identiteter + + + + <b>The following problems need to be corrected before your changes can be applied:</b><ul> + <b>Følgende problemer trengs å bli rettet før endringene dine kan bli påført:</b><ul> + + + + <li>All identities need an identity name set</li> + <li>Alle identiteter trenger et identitets navnesett</li> + + + + <li>Every identity needs at least one nickname defined</li> + <li>Hver identitet trenger minst ett kallenavn definert</li> + + + + <li>You need to specify a real name for every identity</li> + <li>Du må spesifiere et ekte navn for hver identitet</li> + + + + <li>You need to specify an ident for every identity</li> + <li>Du må spesifisere en ident for hver identitet</li> + + + + </ul> + </ul> + + + + One or more identities are invalid + En, eller flere identiteter er ugyldig + + + + Delete Identity? + Slette identitet? + + + + Do you really want to delete identity "%1"? + Vil du virkelig slette identiteten "%1"? + + + + Rename Identity + Omdøp Identitet + + + + Please enter a new name for the identity "%1"! + Vennligst skriv inn navnet for identiteten "%1"! + + + + ... + ... + + + + Add Identity + Legg til Identitet + + + + Add... + Legg til... + + + + Remove Identity + Fjern Identitet + + + + Real Name: + Ekte Navn: + + + + The "Real Name" is shown in /whois. + Det "ekte navnet" blir vist i /whois. + + + + Nicknames + Kallenavn + + + + Add Nickname + Legg til Kallenavn + + + + &Add... + &Legg til... + + + + Remove Nickname + Fjern Kallenavn + + + + Remove + Fjern + + + + Re&name... + &Omdøp... + + + + Move upwards in list + Flytt oppover i listen + + + + Move downwards in list + Flytt nedover i listen + + + + A&way + &Borte + + + + Away Reason + Borte grunn + + + + Return Message + Tilbake beskjed + + + + Away Nick + Borte Kallenavn + + + + Auto Away + Auto Borte + + + + Auto away after + Auto Borte etter + + + + minutes + minutter + + + + Advanced + Avansert + + + + Ident: + Ident: + + + + The "ident" is part of your hostmask and, together with your host, uniquely identifies you within the IRC network. + "Ident" er en del av vertsmasken, og sammen med din vert, vil den identifisere deg unikt innenfor IRC nettverket. + + + + Messages + Beskjeder + + + + Part Reason: + Forlat Grunn: + + + + Quit Reason: + Avslutt Grunn: + + + + Kick Reason: + Spark Grunn: + + + + Identity + + + <empty> + <empty> + + + + Quassel IRC User + Quassel IRC Bruker + + + + Gone fishing. + På fisketur. + + + + Brought fish. + Kjøpte fisk. + + + + Not here. No, really. not here! + Ikke her. Nei, virkelig ikke her! + + + + Back in action again! + Tilbake i aksjon igjen! + + + + Kindergarten is elsewhere! + Barnehagen finner du andre steder! + + + + http://quassel-irc.org - Chat comfortably. Anywhere. + http://quassel-irc.org - Chat komfortabelt. Hvor som helst. + + + + InputWidget + + + Form + Skjema + + + + IntroPage + + + Introduction + Introduksjon + + + + This wizard will guide you through the setup process for your shiny new Quassel IRC Client. + Denne veiviseren vil guide deg gjennom innstillings prosessen for din skinnende nye Quassel IRC Klient. + + + + IrcListModel + + + Channel + Kanal + + + + Users + Brukere + + + + Topic + Emne + + + + IrcServerHandler + + + Received invalid MODE from %s: %s + Mottok ugyldig MODE fra %s: %s + + + + %1 has changed topic for %2 to: "%3" + %1 har endret emne for %2 til: "%3" + + + + [Whois] %1 is away: "%2" + [Whois] %1 er borte: "%2" + + + + %1 is away: "%2" + %1 er borte: "%2" + + + + [Whois] %1 is %2 (%3) + [Whois] %1 er %2 (%3) + + + + %1 is online via %2 (%3) + %1 is online via %2 (%3) + + + + [Whois] %1 + [Whois] %1 + + + + [Whowas] %1 + [Whowas] %1 + + + + [Whowas] %1 was %2 (%3) + [Whowas] %1 var %2 (%3) + + + + [Who] End of /WHO list for %1 + [Who] Slutt på /WHO listen for %1 + + + + [Whois] %1 is logged in since %2 + [Whois] %1 er logget inn siden %2 + + + + [Whois] %1 is idling for %2 (%3) + [Whois] %1 har vært inaktiv for %2 (%3) + + + + [Whois] idle message: %1 + [Whois] inaktiv beskjed: %1 + + + + [Whois] %1 is a user on channels: %2 + [Whois] %1 er en bruker på kanalene: %2 + + + + [Whois] %1 has voice on channels: %2 + [Whois] %1 har stemme på kanalene: %2 + + + + [Whois] %1 is an operator on channels: %2 + [Whois] %1 er en operatør på kanalene: %2 + + + + No topic is set for %1. + Inget emne satt for %1. + + + + Topic for %1 is "%2" + Emne for %1 er "%2" + + + + Topic set by %1 on %2 + Emne satt av %1 på %2 + + + + [Who] %1 + [Who] %1 + + + + There is a nickname in your identity's nicklist which contains illegal characters + Det er et Kallenavn i din identitets kallanavnsliste som inneholder ugyldige karakterer + + + + Due to a bug in Unreal IRCd (and maybe other irc-servers too) we're unable to determine the erroneous nick + Grunnet en bug i Unreal IRCd (og kanskje andre irc-servere også) klarte vi ikke å avgjøre et feilbetjenings kallenavn + + + + Please use: /nick <othernick> to continue or clean up your nicklist + Vennligst bruk: /nick <annet_kallenavn> for å fortsette, eller rydd opp i kallenavnslisten din + + + + Nick %1 contains illegal characters + Kallenavn %1 inneholder ugyldige karakterer + + + + Nick already in use: %1 + Kallenavnet er allerede i bruk: %1 + + + + No free and valid nicks in nicklist found. use: /nick <othernick> to continue + Ingen ledige, eller gyldige kallenavn i kallanavnslisten ble funnet. Bruk /nick <annet_kallenavn> for å fortsette + + + + %1 + %1 + + + + Channel %1 has %2 users. Topic is: %3 + Kanal %1 har %2 brukere. Emnet er: %3 + + + + End of channel list + Slutt på Kanal listen + + + + IrcUserItem + + + idling since %1 + inaktiv siden %1 + + + + login time: %1 + Tid for pålogging: %1 + + + + server: %1 + server: %1 + + + + MainWidget + + + Form + Skjema + + + + background-color: rgba(220, 220, 255, 40%) + background-color: rgba(220, 220, 255, 40%) + + + + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Trebuchet MS'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:29pt; color:#00008b;">Quassel IRC</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:29pt; color:#7fff00;"><span style=" font-size:10pt; color:#00008b;">mobile edition</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:29pt; color:#483d8b;"><span style=" font-size:6pt; color:#000000;">Chat comfortably. Anywhere.</span></p></body></html> + <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Trebuchet MS'; font-size:10pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:29pt; color:#00008b;">Quassel IRC</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:29pt; color:#7fff00;"><span style=" font-size:10pt; color:#00008b;">mobil utgave</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:29pt; color:#483d8b;"><span style=" font-size:6pt; color:#000000;">Chat comfortably. Anywhere.</span></p></body></html> + + + + MainWin + + + Waiting for core... + Venter på kjernen... + + + + Not connected to core. + Ikke tilkoblet kjernen. + + + + Edit &Networks... + Rediger &Nettverk... + + + + All Buffers + Alle Buffere + + + + All Channels + Alle Kanaler + + + + All Queries + Alle Spørringer + + + + All Networks + Alle Nettverk + + + + Full Custom + Full tilpassning + + + + Nicks + Kallenavn + + + + Chat Monitor + Chat Monitor + + + + Inputline + Skrivelinje + + + + Topic + Emne + + + + Connected to core. + Tilkoblet kjernen. + + + + MainWindow + HovedVindu + + + + &File + &Fil + + + + &Networks + &Nettverk + + + + &Settings + &Innstillinger + + + + &Views + &Visninger + + + + &Help + &Hjelp + + + + &Debug + Feil&søk + + + + &Network List... + &Nettverks liste... + + + + F2 + F2 + + + + Quick &Connect... + Hurtig&tilkobling... + + + + Disconnect + Koble fra + + + + Reconnect + Koble til på nytt + + + + Join Channel... + Bli med i Kanal... + + + + Set Away globally + Sett Borte globalt + + + + Quit... + Avslutt... + + + + Edit Identities... + Rediger identiteter... + + + + Configure Quassel... + Konfigurere Quassel... + + + + F7 + F7 + + + + Manage Views... + Administrer Visninger... + + + + About Qt... + Om Qt... + + + + About Quassel IRC... + Om Quassel IRC... + + + + Import Backlog + Importer Historikk + + + + Connect + Koble til + + + + Internal + Internt + + + + Disconnect from Core + Koble fra Kjernen + + + + Connect to Core... + Koble til Kjerne... + + + + Debug &Console + Feilsøkings&konsoll + + + + Disconnect from Network... + Koble fra Nettverk... + + + + &Edit Networks... + &Rediger Nettverk... + + + + Statusbar + Statuslinje + + + + Buffer Views + Buffer visninger + + + + Manage Buffer Views + Administrer Buffer visninger + + + + Lock Dock Positions + Lås Dock posisjonene + + + + Message + + + %DT[%1] + %DT[%1] + + + + %DS<%1> + %DS<%1> + + + + %D0%1 + %D0%1 + + + + %Dn[%1] + %Dn[%1] + + + + %Dn%1 + %Dn%1 + + + + %Ds* + %Ds* + + + + %Ds%1 + %Ds%1 + + + + %De* + %De* + + + + %De%1 + %De%1 + + + + %Dj--> + %Dj--> + + + + %Dj%DN%1%DN %DH(%2@%3)%DH has joined %DC%4%DC + %Dj%DN%1%DN %DH(%2@%3)%DH har blitt med i %DC%4%DC + + + + %Dp<-- + %Dp<-- + + + + %Dp%DN%1%DN %DH(%2@%3)%DH has left %DC%4%DC + %Dp%DN%1%DN %DH(%2@%3)%DH har forlatt %DC%4%DC + + + + %Dq<-- + %Dq<-- + + + + %Dq%DN%DU%1%DU%DN %DH(%2@%3)%DH has quit + %Dq%DN%DU%1%DU%DN %DH(%2@%3)%DH har avsluttet + + + + %Dk<-* + %Dk<-* + + + + %Dk%DN%1%DN has kicked %DN%2%DN from %DC%3%DC + %Dk%DN%1%DN har sparket %DN%2%DN fra %DC%3%DC + + + + %Dr<-> + %Dr<-> + + + + %DrYou are now known as %DN%1%DN + %DrDu er nå kjent som %DN%1%DN + + + + %Dr%DN%1%DN is now known as %DN%2%DN + %Dr%DN%1%DN er nå kjent som %DN%2%DN + + + + %Dm*** + %Dm*** + + + + %DmUser mode: %DM%1%DM + %DmBruker modus: %DM%1%DM + + + + %DmMode %DM%1%DM by %DN%2%DN + %DmModus %DM%1%DM av %DN%2%DN + + + + %Da-*- + %Da-*- + + + + %Da%DN%1%DN %2 + %Da%DN%1%DN %2 + + + + %De[%1] + %De[%1] + + + + NetworkConnection + + + Connection failed. Cycling to next Server + Tilkobling feilet. Forsøker med neste Server + + + + Connecting to %1:%2... + Kobler til %1:%2... + + + + Disconnecting. + Kobler fra. + + + + Could not connect to %1 (%2) + Kunne ikke koble til %1 (%2) + + + + Connection failure: %1 + Tilkoblingsfeil: %1 + + + + NetworkEditDlg + + + Dialog + Dialog + + + + Please enter a network name: + Vennligst skriv inn et nettverksnavn: + + + + Add Network + Legg til Nettverk + + + + NetworkModel + + + Buffer + Buffer + + + + Topic + Emne + + + + Nick Count + Antall Kallenavn + + + + NetworksSettingsPage + + + General + Generelt + + + + Networks + Nettverk + + + + <b>The following problems need to be corrected before your changes can be applied:</b><ul> + <b>Følgende problemer må bli rettet før dine endringer kan blir påført:</b><ul> + + + + <li>All networks need at least one server defined</li> + <li>Alle nettverk trenger minst en server definert</li> + + + + </ul> + </ul> + + + + Invalid Network Settings + Ugyldige Nettverksinnstillinger + + + + Connect + Koble til + + + + Disconnect + Koble fra + + + + Apply first! + Bruk først! + + + + Delete Network? + Slette Nettverk? + + + + Do you really want to delete the network "%1" and all related settings, including the backlog? + Vil du virkelig slette nettverket "%1" og alle relaterte innstillinger, inkludert historikken? + + + + Form + Skjema + + + + Re&name... + Om&døp... + + + + &Add... + &Legg til... + + + + De&lete + &Slett + + + + Connect now + Koble til nå + + + + Network Details + Nettverksdetaljer + + + + Identity: + Identitet: + + + + This specifies how control messages, nicks and servernames are encoded. +Unless you *really* know what you do, leave this as ISO-8859-1! + Dette spesifiserer hvordan kontrollbeskjeder, kallenavn og servernavn blir kodet. +Med mindre du *virkelig* vet hva du gjør, la denne stå til ISO-8859-1! + + + + Servers + Servere + + + + &Edit... + &Rediger... + + + + Move upwards in list + Flytt opp i listen + + + + ... + ... + + + + Move downwards in list + Flytt ned i listen + + + + Choose random server for connecting + Velg tilfeldig server for tilkobling + + + + Perform + Utfør + + + + Commands to execute on connect: + Kommandoer som skal utføres ved tilkobling: + + + + Auto Identify + Autoidentifiser + + + + Service: + Tjeneste: + + + + NickServ + NickServ + + + + Password: + Passord: + + + + Advanced + Avansert + + + + Encodings + Koding + + + + Send messages in: + Send beskjeder i: + + + + Incoming messages encoded in Utf8 will always be treated as such. This setting defines the encoding for messages that are not Utf8. + Innkommende beskjeder kodet i UTF8 vil alltid blir behandlet slik. Denne innstillinger definerer kodingen av beskjeder som ikke er UTF8. + + + + Receive fallback: + Motta tilbakefall: + + + + Server encoding: + Server koding: + + + + Use defaults + Bruk standard + + + + Automatic Reconnect + Automatisk gjenoppkobling + + + + Interval: + Intervall: + + + + s + s + + + + Retries: + Forsøk: + + + + Unlimited + Ubegrenset + + + + Rejoin all channels on reconnect + gjenoppkoble medlemskapet i alle kanaler ved gjenoppkobling + + + + Manage servers for this network + Administrer servere for dette nettverket + + + + Configure automatic identification or misc. commands to be executed after connecting to a server + Konfigurer automatisk identifikasjon, eller forskjellige kommandoer som skal kjøres etter tilkoblin til en server + + + + Specify a list of IRC commands to be executed upon connect. +Note that Quassel IRC automatically rejoins channels, so /join will rarely be needed here! + Spesifiser en list av IRC kommandoer som skal kjøres ved tilkobling. +Husk at Quassel IRC automatisk gjenoppkobler til kanaler, så /join trengs sjeldent her! + + + + Configure advanced settings such as message encodings and automatic reconnect + Konfigurer avanserte innstillinger, slik som beskjed koding og automatisk gjenoppkobling + + + + Control encodings for in- and outgoing messages + Kontroller koding for inn- og utgående beskjeder + + + + Specify which encoding your messages will be sent in. +UTF-8 should be a sane choice for most networks. + Spefiser hvilken koding dine beskjed skal bli sendt i. +UTF-8 burde være det fornuftigste for de fleste nettverk. + + + + Incoming messages encoded in Utf8 will always be treated as such. +This setting defines the encoding for messages that are not Utf8. + Innkommende beskjeder som er kodet i Utf8 vil alltid bli behandlet slik. +Disse innstillingene definerer kodingen for beskjeder som ikke er Utf8. + + + + Use default settings for encodings (recommended) + Bruk standard innstillinger for kodinger (anbefalt) + + + + Control automatic reconnect to the network + Kontroller automatisk gjenoppkobling til nettverket + + + + NickEditDlg + + + Add Nickname + Legg til Kallenavn + + + + Edit Nickname + Rediger Kallenavn + + + + Please enter a valid nickname: + Vennligst skriv inn et gyldig kallenavn: + + + + A valid nickname may contain letters from the English alphabet, digits, and the special characters {, }, [, ], \, |, `, ^, _ and -. + Et gyldig kallenavn kan inneholde bokstaver fra det engelske alfabetet, tall, og spesialtegnene {, }, [, ], \, |, `, ^, _ og -. + + + + NickListWidget + + + Nicks in Channel + Kallenavn i Kanal + + + + NickView + + + WHOIS + WHOIS + + + + VERSION + VERSION + + + + PING + PING + + + + Modes + Modes + + + + Op %1 + Op %1 + + + + Deop %1 + Deop %1 + + + + Voice %1 + Voice %1 + + + + Devoice %1 + Devoice %1 + + + + Kick/Ban + Kick/Ban + + + + Kick %1 + Kick %1 + + + + Kickban %1 + Kickban %1 + + + + Ignore + Ignore + + + + Query + Query + + + + DCC-Chat + DCC-Chat + + + + Send file + Send fil + + + + Ban %1 + Ban %1 + + + + QtopiaMainWin + + + Show Toolbar + Vis Verktøylinje + + + + Quit Quassel IRC? + Avslutte Quassel IRC? + + + + Do you really want to quit Quassel IRC? + Vil du virkelig avslutte Quassel IRC? + + + + Quit + Avslutt + + + + Show Buffers + Vis Buffere + + + + Show Nicks + Vis Kallenavn + + + + About... + Om... + + + + Quassel::secondsToString() + + + year + år + + + + day + dag + + + + h + t + + + + min + min + + + + sec + sek + + + + SaveIdentitiesDlg + + + Sync With Core + Synk med Kjerne + + + + Syncing data with core, please wait... + Synkroniserer data med Kjernen, vennligst vent... + + + + Abort + Avbryt + + + + ServerEditDlg + + + Dialog + Dialog + + + + Server address: + Server adresse: + + + + Port: + Port: + + + + Password: + Passord: + + + + Use SSL + Bruk SSL + + + + SessionThread + + + Could not initialize session! + Kunne ikke initialisere sesjonen! + + + + SettingsDlg + + + Save changes + Lagre endringer + + + + There are unsaved changes on the current configuration page. Would you like to apply your changes now? + Det er ikke-lagrede endringer i nåværende konfigurasjonsside. Vil du påføre endringene nå? + + + + Reload Settings + Gjeninnles innstillinger + + + + Do you like to reload the settings, undoing your changes on this page? + Vil du gjeninnlese innstillingene og angre dine endringer på denne siden? + + + + Restore Defaults + Gjenopprett standard + + + + Do you like to restore the default values for this page? + Vil du gjenopprette standard verdier for denne siden? + + + + Configure Quassel + Konfigurer Quassel + + + + Settings + Innstillinger + + + + SettingsPageDlg + + + Reload Settings + Gjeninnles Innstillinger + + + + Do you like to reload the settings, undoing your changes on this page? + Vil du gjeninnlese innstillingene og angre endringene dine på denne siden? + + + + Restore Defaults + Gjenopprett Standard + + + + Do you like to restore the default values for this page? + Vil du gjenopprette standard verdier for denne siden? + + + + Dialog + Dialog + + + + Settings + Innstillinger + + + + Configure Quassel + Konfigurer Quassel + + + + SqliteStorage + + + SQLite is a file-based database engine that does not require any setup. It is suitable for small and medium-sized databases that do not require access via network. Use SQLite if your Quassel Core should store its data on the same machine it is running on, and if you only expect a few users to use your core. + SQLite er en filbasert database motor som ikke krever konfigurering. Den passer for små og medium store databaser som ikke krever tilgang fra nettverk. Bruk SQLite hvis din Quassel Kjerne skal lagre dataene på den samme maskinen som den kjører på, og kun hvis du forventer at et fåtall personer skal benytte din Kjerne. + + + + StorageDetailsPage + + + Setup Storage Provider + Konfigurer Lagringsleverandør + + + + Please enter credentials for the selected storage provider. + Vennligst skriv inn autentisieringsdetaljene for valgt lagrings leverandør. + + + + Host: + Vert: + + + + Port: + Port: + + + + Database: + Database: + + + + User: + Bruker: + + + + Password: + Passord: + + + + StorageSelectionPage + + + Select Storage Provider + Velg Lagringsleverandør + + + + Please select the storage provider you want to use. + Vennligst velg lagringsleverandøren du ønsker å benytte. + + + + TopicButton + + + Click to edit! + Klikk for å redigere! + + + + %1 + +Click to edit! + %1Klikk for å redigere! + + + + TopicLabel + + + Drag to scroll the topic! + Dra for å rulle emnet! + + + + TopicWidget + + + Form + Skjema + + + + ... + ... + + + + UiStyle + + + %DT[%1] + %DT[%1] + + + + %DS<%1> + %DS<%1> + + + + %D0%1 + %D0%1 + + + + %Dn[%1] + %Dn[%1] + + + + %Dn%1 + %Dn%1 + + + + %Ds* + %Ds* + + + + %Ds%1 + %Ds%1 + + + + %De* + %De* + + + + %De%1 + %De%1 + + + + %Dj--> + %Dj--> + + + + %Dj%DN%1%DN %DH(%2@%3)%DH has joined %DC%4%DC + %Dj%DN%1%DN %DH(%2@%3)%DH har blitt med i %DC%4%DC + + + + %Dp<-- + %Dp<-- + + + + %Dp%DN%1%DN %DH(%2@%3)%DH has left %DC%4%DC + %Dp%DN%1%DN %DH(%2@%3)%DH har forlatt %DC%4%DC + + + + %Dq<-- + %Dq<-- + + + + %Dq%DN%DU%1%DU%DN %DH(%2@%3)%DH has quit + %Dq%DN%DU%1%DU%DN %DH(%2@%3)%DH har avsluttet + + + + %Dk<-* + %Dk<-* + + + + %Dk%DN%1%DN has kicked %DN%2%DN from %DC%3%DC + %Dk%DN%1%DN har sparket %DN%2%DN fra %DC%3%DC + + + + %Dr<-> + %Dr<-> + + + + %DrYou are now known as %DN%1%DN + %DrDu er nå kjent som %DN%1%DN + + + + %Dr%DN%1%DN is now known as %DN%2%DN + %Dr%DN%1%DN er nå kjent som %DN%2%DN + + + + %Dm*** + %Dm*** + + + + %DmUser mode: %DM%1%DM + %DmBruker modus: %DM%1%DM + + + + %DmMode %DM%1%DM by %DN%2%DN + %DmModus %DM%1%DM av %DN%2%DN + + + + %Da-*- + %Da-*- + + + + %Da%DN%1%DN %2 + %Da%DN%1%DN %2 + + + + %De[%1] + %De[%1] + + + + UserCategoryItem + + + %n Owner(s) + + %n Owner + %n Owners + + + + + %n Admin(s) + + %n Admin + %n Admins + + + + + %n Operator(s) + + %n Operator + %n Operators + + + + + %n Half-Op(s) + + %n Half-Op + %n Half-Ops + + + + + %n Voiced + + %n Voiced + %n Voiced + + + + + %n User(s) + + %n User + %n Users + + + + + UserInputHandler + + + sending CTCP-%1 request + Sender CTCP-%1 forespørsel + + + diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 2c2a0382..6b155a04 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -33,39 +33,115 @@ #include "util.h" // get rid of this (needed for isChannelName) /***************************************** -* Fancy Buffer Items +* Network Items *****************************************/ -BufferItem::BufferItem(BufferInfo bufferInfo, AbstractTreeItem *parent) - : PropertyMapItem(QStringList() << "bufferName" << "topic" << "nickCount", parent), - _bufferInfo(bufferInfo), - _bufferName(bufferInfo.bufferName()), - _activity(Buffer::NoActivity), - _ircChannel(0) +NetworkItem::NetworkItem(const NetworkId &netid, AbstractTreeItem *parent) + : PropertyMapItem(QList() << "networkName" << "currentServer" << "nickCount", parent), + _networkId(netid) { - Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled; - if(bufferType() == BufferInfo::QueryBuffer) - flags |= Qt::ItemIsDropEnabled; + setFlags(Qt::ItemIsEnabled); +} - if(bufferType() == BufferInfo::StatusBuffer) { - NetworkItem *networkItem = qobject_cast(parent); - connect(networkItem, SIGNAL(dataChanged()), this, SIGNAL(dataChanged())); +QVariant NetworkItem::data(int column, int role) const { + switch(role) { + case NetworkModel::NetworkIdRole: + return qVariantFromValue(_networkId); + case NetworkModel::ItemTypeRole: + return NetworkModel::NetworkItemType; + case NetworkModel::ItemActiveRole: + return isActive(); + default: + return PropertyMapItem::data(column, role); } - setFlags(flags); } -quint64 BufferItem::id() const { - return qHash(bufferInfo().bufferId()); +BufferItem *NetworkItem::bufferItem(const BufferInfo &bufferInfo) { + BufferItem *bufferItem = qobject_cast(childById(qHash(bufferInfo.bufferId()))); + if(bufferItem) + return bufferItem; + + switch(bufferInfo.type()) { + case BufferInfo::StatusBuffer: + bufferItem = new StatusBufferItem(bufferInfo, this); + break; + case BufferInfo::ChannelBuffer: + bufferItem = new ChannelBufferItem(bufferInfo, this); + break; + case BufferInfo::QueryBuffer: + bufferItem = new QueryBufferItem(bufferInfo, this); + break; + default: + bufferItem = new BufferItem(bufferInfo, this); + } + + newChild(bufferItem); + return bufferItem; } -// bool BufferItem::isStatusBuffer() const { -// return bufferType() == BufferInfo::StatusBuffer; -// } +void NetworkItem::attachNetwork(Network *network) { + if(!network) + return; + + _network = network; -bool BufferItem::isActive() const { - if(bufferType() == BufferInfo::ChannelBuffer) - return _ircChannel; - else - return qobject_cast(parent())->isActive(); + connect(network, SIGNAL(networkNameSet(QString)), + this, SLOT(setNetworkName(QString))); + connect(network, SIGNAL(currentServerSet(QString)), + this, SLOT(setCurrentServer(QString))); + connect(network, SIGNAL(ircChannelAdded(IrcChannel *)), + this, SLOT(attachIrcChannel(IrcChannel *))); + connect(network, SIGNAL(connectedSet(bool)), + this, SIGNAL(dataChanged())); + connect(network, SIGNAL(destroyed()), + this, SIGNAL(dataChanged())); + + emit dataChanged(); +} + +void NetworkItem::attachIrcChannel(IrcChannel *ircChannel) { + ChannelBufferItem *channelItem; + for(int i = 0; i < childCount(); i++) { + channelItem = qobject_cast(child(i)); + if(!channelItem) + continue; + + if(channelItem->bufferName().toLower() == ircChannel->name().toLower()) { + channelItem->attachIrcChannel(ircChannel); + break; + } + } +} + +void NetworkItem::setNetworkName(const QString &networkName) { + Q_UNUSED(networkName); + emit dataChanged(0); +} + +void NetworkItem::setCurrentServer(const QString &serverName) { + Q_UNUSED(serverName); + emit dataChanged(1); +} + + +QString NetworkItem::toolTip(int column) const { + Q_UNUSED(column); + + QStringList toolTip(QString("%1").arg(networkName())); + toolTip.append(QString("Server: %1").arg(currentServer())); + toolTip.append(QString("Users: %1").arg(nickCount())); + + return QString("

%1

").arg(toolTip.join("
")); +} + +/***************************************** +* Fancy Buffer Items +*****************************************/ +BufferItem::BufferItem(const BufferInfo &bufferInfo, AbstractTreeItem *parent) + : PropertyMapItem(QStringList() << "bufferName" << "topic" << "nickCount", parent), + _bufferInfo(bufferInfo), + _activity(Buffer::NoActivity) +{ + setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled); } void BufferItem::setActivityLevel(Buffer::ActivityLevel level) { @@ -104,6 +180,7 @@ QVariant BufferItem::data(int column, int role) const { } bool BufferItem::setData(int column, const QVariant &value, int role) { + qDebug() << "BufferItem::setData(int column, const QVariant &value, int role):" << this << column << value << role; switch(role) { case NetworkModel::BufferActivityRole: setActivityLevel((Buffer::ActivityLevel)value.toInt()); @@ -114,10 +191,122 @@ bool BufferItem::setData(int column, const QVariant &value, int role) { return true; } +void BufferItem::setBufferName(const QString &name) { + _bufferInfo = BufferInfo(_bufferInfo.bufferId(), _bufferInfo.networkId(), _bufferInfo.type(), _bufferInfo.groupId(), name); + emit dataChanged(0); +} + +QString BufferItem::toolTip(int column) const { + Q_UNUSED(column); + return tr("

%1 - %2

").arg(bufferInfo().bufferId().toInt()).arg(bufferName()); +} -void BufferItem::attachIrcChannel(IrcChannel *ircChannel) { - if(!ircChannel) - return; +/* +void BufferItem::setLastMsgInsert(QDateTime msgDate) { + if(msgDate.isValid() && msgDate > _lastMsgInsert) + _lastMsgInsert = msgDate; +} +*/ +/* +// FIXME emit dataChanged() +bool BufferItem::setLastSeen() { + if(_lastSeen > _lastMsgInsert) + return false; + + _lastSeen = _lastMsgInsert; + BufferSettings(bufferInfo().bufferId()).setLastSeen(_lastSeen); + return true; +} + +QDateTime BufferItem::lastSeen() { + return _lastSeen; +} +*/ + +/***************************************** +* StatusBufferItem +*****************************************/ +StatusBufferItem::StatusBufferItem(const BufferInfo &bufferInfo, NetworkItem *parent) + : BufferItem(bufferInfo, parent) +{ + Q_ASSERT(parent); + connect(parent, SIGNAL(dataChanged()), this, SIGNAL(dataChanged())); +} + +QString StatusBufferItem::toolTip(int column) const { + Q_UNUSED(column); + QStringList toolTip; + + QString netName = Client::network(bufferInfo().networkId())->networkName(); + toolTip.append(tr("Status buffer of %1").arg(netName)); + + return tr("

%1

").arg(toolTip.join("
")); +} + +/***************************************** +* QueryBufferItem +*****************************************/ +QueryBufferItem::QueryBufferItem(const BufferInfo &bufferInfo, NetworkItem *parent) + : BufferItem(bufferInfo, parent) +{ + setFlags(flags() | Qt::ItemIsDropEnabled); +} + +QString QueryBufferItem::toolTip(int column) const { + Q_UNUSED(column); + QStringList toolTip; + + toolTip.append(tr("Query with %1").arg(bufferName())); + if(topic() != "") { + toolTip.append(tr("Away Message: %1").arg(topic())); + } + + return tr("

%1

").arg(toolTip.join("
")); +} + +/***************************************** +* ChannelBufferItem +*****************************************/ +ChannelBufferItem::ChannelBufferItem(const BufferInfo &bufferInfo, AbstractTreeItem *parent) + : BufferItem(bufferInfo, parent), + _ircChannel(0) +{ +} + +QString ChannelBufferItem::toolTip(int column) const { + Q_UNUSED(column); + QStringList toolTip; + + toolTip.append(tr("Channel %1").arg(bufferName())); + if(isActive()) { + //TODO: add channel modes + toolTip.append(tr("Users: %1").arg(nickCount())); + if(_ircChannel) { + QString channelMode = _ircChannel->channelModeString(); // channelModeString is compiled on the fly -> thus cache the result + if(!channelMode.isEmpty()) + toolTip.append(tr("Mode: %1").arg(channelMode)); + } + + BufferSettings s; + bool showTopic = s.value("DisplayTopicInTooltip", QVariant(false)).toBool(); + if(showTopic) { + QString _topic = topic(); + if(_topic != "") { + _topic.replace(QString("<"), QString("<")); + _topic.replace(QString(">"), QString(">")); + toolTip.append(QString(" ")); + toolTip.append(tr("Topic: %1").arg(_topic)); + } + } + } else { + toolTip.append(tr("Not active
Double-click to join")); + } + + return tr("

%1

").arg(toolTip.join("
")); +} + +void ChannelBufferItem::attachIrcChannel(IrcChannel *ircChannel) { + Q_ASSERT(!_ircChannel && ircChannel); _ircChannel = ircChannel; @@ -142,7 +331,7 @@ void BufferItem::attachIrcChannel(IrcChannel *ircChannel) { emit dataChanged(); } -void BufferItem::ircChannelDestroyed() { +void ChannelBufferItem::ircChannelDestroyed() { Q_CHECK_PTR(_ircChannel); disconnect(_ircChannel, 0, this, 0); _ircChannel = 0; @@ -150,48 +339,14 @@ void BufferItem::ircChannelDestroyed() { removeAllChilds(); } -QString BufferItem::bufferName() const { - if(bufferType() == BufferInfo::StatusBuffer) - return tr("Status Buffer"); - else - return _bufferName; -} - -void BufferItem::setBufferName(const QString &name) { - _bufferName = name; - // as long as we need those bufferInfos, we have to update that one aswell. - // pretty ugly though :/ - _bufferInfo = BufferInfo(_bufferInfo.bufferId(), _bufferInfo.networkId(), _bufferInfo.type(), _bufferInfo.groupId(), name); - emit dataChanged(0); -} - -QString BufferItem::topic() const { - if(_ircChannel) - return _ircChannel->topic(); - else - return QString(); -} - -void BufferItem::ircUserDestroyed() { +void ChannelBufferItem::ircUserDestroyed() { // PRIVATE IrcUser *ircUser = static_cast(sender()); removeUserFromCategory(ircUser); emit dataChanged(2); } -int BufferItem::nickCount() const { - if(_ircChannel) - return _ircChannel->ircUsers().count(); - else - return 0; -} - -void BufferItem::setTopic(const QString &topic) { - Q_UNUSED(topic); - emit dataChanged(1); -} - -void BufferItem::join(const QList &ircUsers) { +void ChannelBufferItem::join(const QList &ircUsers) { addUsersToCategory(ircUsers); foreach(IrcUser *ircUser, ircUsers) { @@ -203,18 +358,22 @@ void BufferItem::join(const QList &ircUsers) { emit dataChanged(2); } -void BufferItem::addUserToCategory(IrcUser *ircUser) { +void ChannelBufferItem::addUserToCategory(IrcUser *ircUser) { addUsersToCategory(QList() << ircUser); } -void BufferItem::addUsersToCategory(const QList &ircUsers) { +void ChannelBufferItem::addUsersToCategory(const QList &ircUsers) { Q_ASSERT(_ircChannel); QHash > categories; + + int categoryId = -1; + UserCategoryItem *categoryItem = 0; + foreach(IrcUser *ircUser, ircUsers) { - UserCategoryItem *categoryItem; - int categoryId = UserCategoryItem::categoryFromModes(_ircChannel->userModes(ircUser)); - if(!(categoryItem = qobject_cast(childById(qHash(categoryId))))) { + categoryId = UserCategoryItem::categoryFromModes(_ircChannel->userModes(ircUser)); + categoryItem = qobject_cast(childById(qHash(categoryId))); + if(!categoryItem) { categoryItem = new UserCategoryItem(categoryId, this); categories[categoryItem] = QList(); newChild(categoryItem); @@ -229,9 +388,9 @@ void BufferItem::addUsersToCategory(const QList &ircUsers) { } } -void BufferItem::part(IrcUser *ircUser) { +void ChannelBufferItem::part(IrcUser *ircUser) { if(!ircUser) { - qWarning() << bufferName() << "BufferItem::part(): unknown User" << ircUser; + qWarning() << bufferName() << "ChannelBufferItem::part(): unknown User" << ircUser; return; } @@ -240,7 +399,7 @@ void BufferItem::part(IrcUser *ircUser) { emit dataChanged(2); } -void BufferItem::removeUserFromCategory(IrcUser *ircUser) { +void ChannelBufferItem::removeUserFromCategory(IrcUser *ircUser) { if(!_ircChannel) { // If we parted the channel there might still be some ircUsers connected. // in that case we just ignore the call @@ -248,224 +407,49 @@ void BufferItem::removeUserFromCategory(IrcUser *ircUser) { return; } - bool success = false; UserCategoryItem *categoryItem = 0; for(int i = 0; i < childCount(); i++) { categoryItem = qobject_cast(child(i)); - if((success = categoryItem->removeUser(ircUser))) { + if(categoryItem->removeUser(ircUser)) { if(categoryItem->childCount() == 0) removeChild(i); break; } } - -// if(!success) { -// qDebug() << "didn't find User:" << ircUser << qHash(ircUser); -// qDebug() << "==== Childlist for Item:" << this << id() << bufferName() << "===="; -// for(int i = 0; i < childCount(); i++) { -// categoryItem = qobject_cast(child(i)); -// categoryItem->dumpChildList(); -// } -// qDebug() << "==== End Of Childlist for Item:" << this << id() << bufferName() << "===="; -// } -// Q_ASSERT(success); } -void BufferItem::userModeChanged(IrcUser *ircUser) { +void ChannelBufferItem::userModeChanged(IrcUser *ircUser) { Q_ASSERT(_ircChannel); - UserCategoryItem *categoryItem; int categoryId = UserCategoryItem::categoryFromModes(_ircChannel->userModes(ircUser)); - if((categoryItem = qobject_cast(childById(qHash(categoryId)))) && categoryItem->childById(qHash(ircUser))) - return; // already in the right category; - - removeUserFromCategory(ircUser); - addUserToCategory(ircUser); -} - -QString BufferItem::toolTip(int column) const { - Q_UNUSED(column); - QStringList toolTip; - - switch(bufferType()) { - case BufferInfo::StatusBuffer: { - QString netName = Client::network(bufferInfo().networkId())->networkName(); - toolTip.append(tr("Status buffer of %1").arg(netName)); - break; - } - case BufferInfo::ChannelBuffer: - toolTip.append(tr("Channel %1").arg(bufferName())); - if(isActive()) { - //TODO: add channel modes - toolTip.append(tr("Users: %1").arg(nickCount())); - - BufferSettings s; - bool showTopic = s.value("DisplayTopicInTooltip", QVariant(false)).toBool(); - if(showTopic) { - QString _topic = topic(); - if(_topic != "") { - _topic.replace(QString("<"), QString("<")); - _topic.replace(QString(">"), QString(">")); - toolTip.append(QString(" ")); - toolTip.append(tr("Topic: %1").arg(_topic)); - } - } - if(_ircChannel) { - QString channelMode = _ircChannel->channelModeString(); // channelModeString is compiled on the fly -> thus cache the result - if(!channelMode.isEmpty()) - toolTip.append(tr("Mode: %1").arg(channelMode)); - } - } else { - toolTip.append(tr("Not active
Double-click to join")); - } - break; - case BufferInfo::QueryBuffer: - toolTip.append(tr("Query with %1").arg(bufferName())); - if(topic() != "") toolTip.append(tr("Away Message: %1").arg(topic())); - break; - default: //this should not happen - toolTip.append(tr("%1 - %2").arg(bufferInfo().bufferId().toInt()).arg(bufferName())); - break; - } - - return tr("

%1

").arg(toolTip.join("
")); -} - -/* -void BufferItem::setLastMsgInsert(QDateTime msgDate) { - if(msgDate.isValid() && msgDate > _lastMsgInsert) - _lastMsgInsert = msgDate; -} -*/ -/* -// FIXME emit dataChanged() -bool BufferItem::setLastSeen() { - if(_lastSeen > _lastMsgInsert) - return false; - - _lastSeen = _lastMsgInsert; - BufferSettings(bufferInfo().bufferId()).setLastSeen(_lastSeen); - return true; -} - -QDateTime BufferItem::lastSeen() { - return _lastSeen; -} -*/ -/***************************************** -* Network Items -*****************************************/ -NetworkItem::NetworkItem(const NetworkId &netid, AbstractTreeItem *parent) - : PropertyMapItem(QList() << "networkName" << "currentServer" << "nickCount", parent), - _networkId(netid) -{ - setFlags(Qt::ItemIsEnabled); -} - -QVariant NetworkItem::data(int column, int role) const { - switch(role) { - case NetworkModel::NetworkIdRole: - return qVariantFromValue(_networkId); - case NetworkModel::ItemTypeRole: - return NetworkModel::NetworkItemType; - case NetworkModel::ItemActiveRole: - return isActive(); - default: - return PropertyMapItem::data(column, role); + UserCategoryItem *categoryItem = qobject_cast(childById(qHash(categoryId))); + + if(categoryItem) { + if(categoryItem->childById(qHash(ircUser))) + return; // already in the right category; + } else { + categoryItem = new UserCategoryItem(categoryId, this); + newChild(categoryItem); } -} - -quint64 NetworkItem::id() const { - return qHash(_networkId); -} - -bool NetworkItem::isActive() const { - if(_network) - return _network->isConnected(); - else - return false; -} - -QString NetworkItem::networkName() const { - if(_network) - return _network->networkName(); - else - return QString(); -} - -QString NetworkItem::currentServer() const { - if(_network) - return _network->currentServer(); - else - return QString(); -} - -int NetworkItem::nickCount() const { - if(_network) - return _network->ircUsers().count(); - else - return 0; -} -void NetworkItem::attachNetwork(Network *network) { - if(!network) - return; - - _network = network; - - connect(network, SIGNAL(networkNameSet(QString)), - this, SLOT(setNetworkName(QString))); - connect(network, SIGNAL(currentServerSet(QString)), - this, SLOT(setCurrentServer(QString))); - connect(network, SIGNAL(ircChannelAdded(QString)), - this, SLOT(attachIrcChannel(QString))); - connect(network, SIGNAL(connectedSet(bool)), - this, SIGNAL(dataChanged())); - connect(network, SIGNAL(destroyed()), - this, SIGNAL(dataChanged())); - - emit dataChanged(); -} - -void NetworkItem::attachIrcChannel(const QString &channelName) { - IrcChannel *ircChannel = _network->ircChannel(channelName); - if(!ircChannel) { - qWarning() << "NetworkItem::attachIrcChannel(): unkown Channel" << channelName; - return; - } - - BufferItem *bufferItem; + // find the item that needs reparenting + IrcUserItem *ircUserItem = 0; for(int i = 0; i < childCount(); i++) { - bufferItem = qobject_cast(child(i)); - if(bufferItem->bufferName().toLower() == ircChannel->name().toLower()) { - bufferItem->attachIrcChannel(ircChannel); + UserCategoryItem *categoryItem = qobject_cast(child(i)); + IrcUserItem *userItem = qobject_cast(categoryItem->childById(qHash(ircUser))); + if(userItem) { + ircUserItem = userItem; break; } } -} -void NetworkItem::setNetworkName(const QString &networkName) { - Q_UNUSED(networkName); - emit dataChanged(0); -} - -void NetworkItem::setCurrentServer(const QString &serverName) { - Q_UNUSED(serverName); - emit dataChanged(1); -} - - -QString NetworkItem::toolTip(int column) const { - Q_UNUSED(column); - - QStringList toolTip(QString("%1").arg(networkName())); - toolTip.append(QString("Server: %1").arg(currentServer())); - toolTip.append(QString("Users: %1").arg(nickCount())); - - return QString("

%1

").arg(toolTip.join("
")); + if(!ircUserItem) { + qWarning() << "ChannelBufferItem::userModeChanged(IrcUser *): unable to determine old category of" << ircUser; + return; + } + ircUserItem->reParent(categoryItem); } - /***************************************** * User Category Items (like @vh etc.) *****************************************/ @@ -477,7 +461,6 @@ UserCategoryItem::UserCategoryItem(int category, AbstractTreeItem *parent) : PropertyMapItem(QStringList() << "categoryName", parent), _category(category) { - } // caching this makes no sense, since we display the user number dynamically @@ -502,10 +485,14 @@ void UserCategoryItem::addUsers(const QList &ircUsers) { foreach(IrcUser *ircUser, ircUsers) userItems << new IrcUserItem(ircUser, this); newChilds(userItems); + emit dataChanged(0); } bool UserCategoryItem::removeUser(IrcUser *ircUser) { - return removeChildById(qHash(ircUser)); + bool success = removeChildById(qHash(ircUser)); + if(success) + emit dataChanged(0); + return success; } int UserCategoryItem::categoryFromModes(const QString &modes) { @@ -588,8 +575,11 @@ QString IrcUserItem::toolTip(int column) const { Q_UNUSED(column); QStringList toolTip(QString("%1").arg(nickName())); if(_ircUser->userModes() != "") toolTip[0].append(QString(" (%1)").arg(_ircUser->userModes())); - if(_ircUser->isAway()) toolTip[0].append(" is away"); - if(!_ircUser->awayMessage().isEmpty()) toolTip[0].append(QString(" (%1)").arg(_ircUser->awayMessage())); + if(_ircUser->isAway()) { + toolTip[0].append(" is away"); + if(!_ircUser->awayMessage().isEmpty()) + toolTip[0].append(QString(" (%1)").arg(_ircUser->awayMessage())); + } if(!_ircUser->realName().isEmpty()) toolTip.append(_ircUser->realName()); if(!_ircUser->ircOperator().isEmpty()) toolTip.append(QString("%1 %2").arg(nickName()).arg(_ircUser->ircOperator())); if(!_ircUser->suserHost().isEmpty()) toolTip.append(_ircUser->suserHost()); @@ -693,15 +683,8 @@ BufferItem *NetworkModel::existsBufferItem(const BufferInfo &bufferInfo) { } BufferItem *NetworkModel::bufferItem(const BufferInfo &bufferInfo) { - BufferItem *bufItem = existsBufferItem(bufferInfo); - if(bufItem == 0) { - NetworkItem *netItem = networkItem(bufferInfo.networkId()); - bufItem = new BufferItem(bufferInfo, netItem); - netItem->newChild(bufItem); - } - - Q_ASSERT(bufItem); - return bufItem; + NetworkItem *netItem = networkItem(bufferInfo.networkId()); + return netItem->bufferItem(bufferInfo); } QStringList NetworkModel::mimeTypes() const { diff --git a/src/client/networkmodel.h b/src/client/networkmodel.h index 8dceb5a4..014cab14 100644 --- a/src/client/networkmodel.h +++ b/src/client/networkmodel.h @@ -33,12 +33,52 @@ class BufferInfo; #include "selectionmodelsynchronizer.h" #include "modelpropertymapper.h" #include "clientsettings.h" +#include "ircchannel.h" #include "ircuser.h" +#include "network.h" class MappedSelectionModel; class QAbstractItemView; -class Network; -class IrcChannel; +class BufferItem; + +/***************************************** + * Network Items + *****************************************/ +class NetworkItem : public PropertyMapItem { + Q_OBJECT + Q_PROPERTY(QString networkName READ networkName) + Q_PROPERTY(QString currentServer READ currentServer) + Q_PROPERTY(int nickCount READ nickCount) + +public: + NetworkItem(const NetworkId &netid, AbstractTreeItem *parent = 0); + + virtual quint64 id() const { return qHash(_networkId); } + virtual QVariant data(int column, int row) const; + + inline bool isActive() const { return (bool)_network ? _network->isConnected() : false; } + + inline const NetworkId &networkId() const { return _networkId; } + inline QString networkName() const { return (bool)_network ? _network->networkName() : QString(); } + inline QString currentServer() const { return (bool)_network ? _network->currentServer() : QString(); } + inline int nickCount() const { return (bool)_network ? _network->ircUsers().count() : 0; } + + virtual QString toolTip(int column) const; + + BufferItem *bufferItem(const BufferInfo &bufferInfo); + +public slots: + void setNetworkName(const QString &networkName); + void setCurrentServer(const QString &serverName); + + void attachNetwork(Network *network); + void attachIrcChannel(IrcChannel *channel); + +private: + NetworkId _networkId; + + QPointer _network; +}; /***************************************** * Fancy Buffer Items @@ -50,26 +90,22 @@ class BufferItem : public PropertyMapItem { Q_PROPERTY(int nickCount READ nickCount) public: - BufferItem(BufferInfo bufferInfo, AbstractTreeItem *parent = 0); + BufferItem(const BufferInfo &bufferInfo, AbstractTreeItem *parent = 0); inline const BufferInfo &bufferInfo() const { return _bufferInfo; } - virtual quint64 id() const; + virtual inline quint64 id() const { return qHash(_bufferInfo.bufferId()); } virtual QVariant data(int column, int role) const; virtual bool setData(int column, const QVariant &value, int role); - void attachIrcChannel(IrcChannel *ircChannel); - - QString bufferName() const; inline BufferId bufferId() const { return _bufferInfo.bufferId(); } inline BufferInfo::Type bufferType() const { return _bufferInfo.type(); } void setBufferName(const QString &name); - QString topic() const; - int nickCount() const; - - // bool isStatusBuffer() const; + virtual inline QString bufferName() const { return _bufferInfo.bufferName(); } + virtual inline QString topic() const { return QString(); } + virtual inline int nickCount() const { return 0; } - bool isActive() const; + virtual inline bool isActive() const { return qobject_cast(parent())->isActive(); } inline Buffer::ActivityLevel activityLevel() const { return _activity; } void setActivityLevel(Buffer::ActivityLevel level); @@ -82,63 +118,70 @@ public: virtual QString toolTip(int column) const; public slots: - void setTopic(const QString &topic); - void join(const QList &ircUsers); - void part(IrcUser *ircUser); - - void addUserToCategory(IrcUser *ircUser); - void addUsersToCategory(const QList &ircUser); - void removeUserFromCategory(IrcUser *ircUser); - void userModeChanged(IrcUser *ircUser); - -private slots: - void ircChannelDestroyed(); - void ircUserDestroyed(); + virtual inline void setTopic(const QString &) { emit dataChanged(1); } private: BufferInfo _bufferInfo; - QString _bufferName; Buffer::ActivityLevel _activity; - - IrcChannel *_ircChannel; }; +/***************************************** +* StatusBufferItem +*****************************************/ +class StatusBufferItem : public BufferItem { + Q_OBJECT + +public: + StatusBufferItem(const BufferInfo &bufferInfo, NetworkItem *parent); + + virtual QString toolTip(int column) const; + virtual inline QString bufferName() const { return tr("Status Buffer"); } +}; /***************************************** - * Network Items - *****************************************/ -class NetworkItem : public PropertyMapItem { +* QueryBufferItem +*****************************************/ +class QueryBufferItem : public BufferItem { Q_OBJECT - Q_PROPERTY(QString networkName READ networkName) - Q_PROPERTY(QString currentServer READ currentServer) - Q_PROPERTY(int nickCount READ nickCount) - + public: - NetworkItem(const NetworkId &netid, AbstractTreeItem *parent = 0); + QueryBufferItem(const BufferInfo &bufferInfo, NetworkItem *parent); - virtual quint64 id() const; - virtual QVariant data(int column, int row) const; + virtual QString toolTip(int column) const; +}; - bool isActive() const; +/***************************************** +* ChannelBufferItem +*****************************************/ +class ChannelBufferItem : public BufferItem { + Q_OBJECT - inline const NetworkId &networkId() const { return _networkId; } - QString networkName() const; - QString currentServer() const; - int nickCount() const; +public: + ChannelBufferItem(const BufferInfo &bufferInfo, AbstractTreeItem *parent); + virtual inline bool isActive() const { return (bool)_ircChannel; } virtual QString toolTip(int column) const; + virtual inline QString topic() const { return (bool)_ircChannel ? _ircChannel->topic() : QString(); } + virtual inline int nickCount() const { return (bool)_ircChannel ? _ircChannel->ircUsers().count() : 0; } + + void attachIrcChannel(IrcChannel *ircChannel); + public slots: - void setNetworkName(const QString &networkName); - void setCurrentServer(const QString &serverName); + void join(const QList &ircUsers); + void part(IrcUser *ircUser); - void attachNetwork(Network *network); - void attachIrcChannel(const QString &channelName); + void addUserToCategory(IrcUser *ircUser); + void addUsersToCategory(const QList &ircUser); + void removeUserFromCategory(IrcUser *ircUser); + void userModeChanged(IrcUser *ircUser); -private: - NetworkId _networkId; +private slots: + void ircChannelDestroyed(); + void ircUserDestroyed(); - QPointer _network; +private: + IrcChannel *_ircChannel; }; /***************************************** diff --git a/src/client/treemodel.cpp b/src/client/treemodel.cpp index 6fc0c25b..c61cf9e8 100644 --- a/src/client/treemodel.cpp +++ b/src/client/treemodel.cpp @@ -131,6 +131,31 @@ void AbstractTreeItem::removeAllChilds() { emit endRemoveChilds(); } +bool AbstractTreeItem::reParent(AbstractTreeItem *newParent) { + // currently we support only re parenting if the child that's about to be + // adopted does not have any children itself. + if(childCount() != 0) { + qDebug() << "AbstractTreeItem::reParent(): cannot reparent" << this << "with children."; + return false; + } + + int oldRow = row(); + if(oldRow == -1) + return false; + + emit parent()->beginRemoveChilds(oldRow, oldRow); + parent()->_childItems.removeAt(oldRow); + emit parent()->endRemoveChilds(); + + setParent(newParent); + + bool success = newParent->newChild(this); + if(!success) + qWarning() << "AbstractTreeItem::reParent(): failed to attach to new parent after removing from old parent! this:" << this << "new parent:" << newParent; + + return success; +} + AbstractTreeItem *AbstractTreeItem::child(int row) const { if(childCount() <= row) return 0; @@ -155,10 +180,15 @@ int AbstractTreeItem::childCount(int column) const { } int AbstractTreeItem::row() const { - if(!parent()) + if(!parent()) { + qWarning() << "AbstractTreeItem::row():" << this << "has no parent AbstractTreeItem as it's parent! parent is" << QObject::parent(); return -1; - else - return parent()->_childItems.indexOf(const_cast(this)); + } + + int row_ = parent()->_childItems.indexOf(const_cast(this)); + if(row_ == -1) + qWarning() << "AbstractTreeItem::row():" << this << "is not in the child list of" << QObject::parent(); + return row_; } AbstractTreeItem *AbstractTreeItem::parent() const { diff --git a/src/client/treemodel.h b/src/client/treemodel.h index 8caffdd5..6dd6ed8b 100644 --- a/src/client/treemodel.h +++ b/src/client/treemodel.h @@ -49,6 +49,8 @@ public: virtual quint64 id() const; + bool reParent(AbstractTreeItem *newParent); + AbstractTreeItem *child(int row) const; AbstractTreeItem *childById(const quint64 &id) const; diff --git a/src/common/network.cpp b/src/common/network.cpp index bab066b0..ead100d8 100644 --- a/src/common/network.cpp +++ b/src/common/network.cpp @@ -208,6 +208,7 @@ void Network::ircUserDestroyed() { QHash::iterator ircUserIter = _ircUsers.begin(); while(ircUserIter != _ircUsers.end()) { if(ircUser == *ircUserIter) { + emit deletedIrcUserRemoved(ircUserIter.key()); ircUserIter = _ircUsers.erase(ircUserIter); break; } @@ -215,6 +216,30 @@ void Network::ircUserDestroyed() { } } +void Network::removeDeletedIrcUser(const QString &username) { + // DO NOT CALL THIS SLOT EVER!!! + + // this slots purpose is only to remove deleted users that haven't been synced yet. + // Reason: + // as a user parting a channel results in it's deletion if it is no longer in any known channel + // this action can only be communicated if the slaves are allready in sync. + // so if such a deleted user isn't synced in slave mode, we kill and remove it. + + Q_ASSERT(proxy()); + + if(!_ircUsers.contains(username)) + return; + + IrcUser *ircUser = _ircUsers[username]; + + if(ircUser->isInitialized()) + return; + + _ircUsers.remove(username); + emit ircUserRemoved(username); + emit ircUserRemoved(ircUser); +} + void Network::removeIrcUser(IrcUser *ircuser) { QString nick = _ircUsers.key(ircuser); if(nick.isNull()) diff --git a/src/common/network.h b/src/common/network.h index 2ff0a363..e2c5ec8e 100644 --- a/src/common/network.h +++ b/src/common/network.h @@ -204,6 +204,7 @@ public slots: inline void addIrcUser(const QString &hostmask) { newIrcUser(hostmask); } inline void addIrcChannel(const QString &channel) { newIrcChannel(channel); } + void removeDeletedIrcUser(const QString &username); void removeIrcUser(const QString &nick); void removeIrcChannel(const QString &channel); @@ -276,6 +277,7 @@ signals: void ircChannelAdded(const QString &channelname); void ircChannelAdded(IrcChannel *); + void deletedIrcUserRemoved(const QString &username); void ircUserRemoved(const QString &nick); void ircChannelRemoved(const QString &channel); diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 14007102..c80336cc 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -48,14 +48,11 @@ set(HEADERS coresettings.h coreusersettings.h) -# QT_DEFINITIONS actually does not work, stuff gets included always. -# Funny enough that does not seem to be harmful, but we should still find a way to figure out -# if we have openssl in Qt... -if(OPENSSL_FOUND AND NOT QT_DEFINITIONS MATCHES "-DQT_NO_OPENSSL") +if(OPENSSL_FOUND AND NOT QT_DEFINITIONS MATCHES "QT_NO_OPENSSL") set(SOURCES ${SOURCES} sslserver.cpp) set(MOC_HDRS ${MOC_HDRS} sslserver.h) include_directories(${OPENSSL_INCLUDE_DIR}) -endif(OPENSSL_FOUND AND NOT QT_DEFINITIONS MATCHES "-DQT_NO_OPENSSL") +endif(OPENSSL_FOUND AND NOT QT_DEFINITIONS MATCHES "QT_NO_OPENSSL") QT4_WRAP_CPP(MOC ${MOC_HDRS}) diff --git a/src/core/core.cpp b/src/core/core.cpp index 18339272..4b4aa725 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -89,8 +89,8 @@ void Core::init() { } Core::~Core() { - foreach(QTcpSocket *socket, blocksizes.keys()) { qDebug() << "disconnecting" << socket << blocksizes.keys(); - socket->disconnectFromHost(); // disconnect local (i.e. non-authed) clients + foreach(QTcpSocket *socket, blocksizes.keys()) { + socket->disconnectFromHost(); // disconnect non authed clients } qDeleteAll(sessions); qDeleteAll(_storageBackends); @@ -340,12 +340,23 @@ QHash Core::bufferLastSeenMsgIds(UserId user) { /*** Network Management ***/ bool Core::startListening(uint port) { - if(!server.listen(QHostAddress::Any, port)) { + bool success = false; + + // let's see if ipv6 is available + success = server.listen(QHostAddress::AnyIPv6, port); + + if(!success && server.serverError() == QAbstractSocket::UnsupportedSocketOperationError) { + // fall back to v4 + success = server.listen(QHostAddress::Any, port); + } + + if(!success) { qWarning("%s", qPrintable(QString("Could not open GUI client port %1: %2").arg(port).arg(server.errorString()))); - return false; + } else { + qDebug() << "Listening for GUI clients on port" << server.serverPort(); } - qDebug() << "Listening for GUI clients on port" << server.serverPort(); - return true; + + return success; } void Core::stopListening() { @@ -362,7 +373,7 @@ void Core::incomingConnection() { QVariantMap clientInfo; blocksizes.insert(socket, (quint32)0); - qDebug() << "Client connected from" << qPrintable(socket->peerAddress().toString()); + qDebug() << qPrintable(tr("Client connected from")) << qPrintable(socket->peerAddress().toString()); if (!configured) { server.close(); @@ -403,7 +414,7 @@ void Core::processClientMessage(QTcpSocket *socket, const QVariantMap &msg) { "This core needs at least client/core protocol version %1.
" "Please consider upgrading your client.").arg(Global::coreNeedsProtocol); SignalProxy::writeDataToDevice(socket, reply); - qWarning() << qPrintable(tr("Client %1 too old, rejecting.").arg(socket->peerAddress().toString())); + qWarning() << qPrintable(tr("Client")) << qPrintable(socket->peerAddress().toString()) << qPrintable(tr("too old, rejecting.")); socket->close(); return; } @@ -463,7 +474,7 @@ void Core::processClientMessage(QTcpSocket *socket, const QVariantMap &msg) { #ifndef QT_NO_OPENSSL // after we told the client that we are ssl capable we switch to ssl mode if(supportSsl && msg["UseSsl"].toBool()) { - qDebug() << "Starting TLS for Client:" << qPrintable(socket->peerAddress().toString()); + qDebug() << qPrintable(tr("Starting TLS for Client:")) << qPrintable(socket->peerAddress().toString()); connect(sslSocket, SIGNAL(sslErrors(const QList &)), this, SLOT(sslErrors(const QList &))); sslSocket->startServerEncryption(); } @@ -483,7 +494,7 @@ void Core::processClientMessage(QTcpSocket *socket, const QVariantMap &msg) { reply["MsgType"] = "ClientLoginReject"; reply["Error"] = tr("Client not initialized!
You need to send an init message before trying to login."); SignalProxy::writeDataToDevice(socket, reply); - qWarning() << qPrintable(tr("Client %1 did not send an init message before trying to login, rejecting.").arg(socket->peerAddress().toString())); + qWarning() << qPrintable(tr("Client")) << qPrintable(socket->peerAddress().toString()) << qPrintable(tr("did not send an init message before trying to login, rejecting.")); socket->close(); return; } if(msg["MsgType"] == "CoreSetupData") { @@ -509,7 +520,7 @@ void Core::processClientMessage(QTcpSocket *socket, const QVariantMap &msg) { } reply["MsgType"] = "ClientLoginAck"; SignalProxy::writeDataToDevice(socket, reply); - qDebug() << qPrintable(tr("Client %1 initialized and authenticated successfully as \"%2\" (UserId: %3).").arg(socket->peerAddress().toString(), msg["User"].toString()).arg(uid.toInt())); + qDebug() << qPrintable(tr("Client")) << qPrintable(socket->peerAddress().toString()) << qPrintable(tr("initialized and authenticated successfully as \"%1\" (UserId: %2).").arg(msg["User"].toString()).arg(uid.toInt())); setupClientSession(socket, uid); } } @@ -517,13 +528,34 @@ void Core::processClientMessage(QTcpSocket *socket, const QVariantMap &msg) { // Potentially called during the initialization phase (before handing the connection off to the session) void Core::clientDisconnected() { - QTcpSocket *socket = dynamic_cast(sender()); // Note: This might be a QObject* already (if called by ~Core())! - Q_ASSERT(socket); - blocksizes.remove(socket); - clientInfo.remove(socket); - qDebug() << qPrintable(tr("Non-authed client disconnected.")); - socket->deleteLater(); - socket = 0; + QTcpSocket *socket = qobject_cast(sender()); + if(socket) { + // here it's safe to call methods on socket! + qDebug() << qPrintable(tr("Non-authed client disconnected.")) << qPrintable(socket->peerAddress().toString()); + socket->deleteLater(); + } else { + // we have to crawl through the hashes and see if we find a victim to remove + + // DO NOT CALL ANY METHODS ON socket!! + socket = static_cast(sender()); + + QHash::iterator blockSizeIter = blocksizes.begin(); + while(blockSizeIter != blocksizes.end()) { + if(blockSizeIter.key() == socket) { + blocksizes.erase(blockSizeIter); + } + blockSizeIter++; + } + + QHash::iterator clientInfoIter = clientInfo.begin(); + while(clientInfoIter != clientInfo.end()) { + if(clientInfoIter.key() == socket) { + clientInfo.erase(clientInfoIter); + } + clientInfoIter++; + } + } + // make server listen again if still not configured if (!configured) { @@ -544,7 +576,7 @@ void Core::setupClientSession(QTcpSocket *socket, UserId uid) { blocksizes.remove(socket); clientInfo.remove(socket); if(!sess) { - qWarning() << qPrintable(tr("Could not initialize session for client %1!").arg(socket->peerAddress().toString())); + qWarning() << qPrintable(tr("Could not initialize session for client:")) << qPrintable(socket->peerAddress().toString()); socket->close(); } sess->addClient(socket); diff --git a/src/core/coresession.cpp b/src/core/coresession.cpp index 07ba5a16..bbb78b3f 100644 --- a/src/core/coresession.cpp +++ b/src/core/coresession.cpp @@ -238,7 +238,7 @@ void CoreSession::removeClient(QIODevice *iodev) { // no checks for validity check - privateslot... QTcpSocket *socket = qobject_cast(iodev); if(socket) - qDebug() << qPrintable(tr("Client %1 disconnected (UserId: %2).").arg(socket->peerAddress().toString()).arg(user().toInt())); + qDebug() << qPrintable(tr("Client")) << qPrintable(socket->peerAddress().toString()) << qPrintable(tr("disconnected (UserId: %1).").arg(user().toInt())); else qDebug() << "Local client disconnedted."; disconnect(socket, 0, this, 0); diff --git a/src/core/ircserverhandler.cpp b/src/core/ircserverhandler.cpp index 9bdb3c67..288a8ab5 100644 --- a/src/core/ircserverhandler.cpp +++ b/src/core/ircserverhandler.cpp @@ -108,8 +108,7 @@ void IrcServerHandler::handleServerMsg(QByteArray msg) { void IrcServerHandler::defaultHandler(QString cmd, const QString &prefix, const QList &rawparams) { // we assume that all this happens in server encoding - QStringList params; - foreach(QByteArray r, rawparams) params << serverDecode(r); + QStringList params = serverDecode(rawparams); uint num = cmd.toUInt(); if(num) { // A lot of server messages don't really need their own handler because they don't do much. @@ -150,7 +149,12 @@ void IrcServerHandler::defaultHandler(QString cmd, const QString &prefix, const // Everything else will be marked in red, so we can add them somewhere. default: - emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", cmd + " " + params.join(" "), prefix); + if(_whois) { + // many nets define their own WHOIS fields. we fetch those not in need of special attention here: + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", "[Whois] " + params.join(" "), prefix); + } else { + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", cmd + " " + params.join(" "), prefix); + } } //qDebug() << prefix <<":"< void IrcServerHandler::handle005(const QString &prefix, const QList ¶ms) { Q_UNUSED(prefix); const int numParams = params.size(); - if(numParams < 1) { - qWarning() << "IrcServerHandler::handle005(): received RPL_ISUPPORT (005) with too few parameters:" << serverDecode(params); + if(numParams == 0) { + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Received RPL_ISUPPORT (005) without parameters!"), prefix); + return; } + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", serverDecode(params).join(" "), prefix); + QString rpl_isupport_suffix = serverDecode(params.last()); - if(!rpl_isupport_suffix.toLower().contains("supported")) { - qWarning() << "Received invalid RPL_ISUPPORT! Suffix is:" << rpl_isupport_suffix << "Excpected: are supported by this server"; - return; + if(!rpl_isupport_suffix.toLower().contains("are supported by this server")) { + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Received non RFC compliant RPL_ISUPPORT: this can lead to unexpected behavior!"), prefix); } QString rawSupport; diff --git a/src/core/userinputhandler.cpp b/src/core/userinputhandler.cpp index c42c475f..1bd29bd3 100644 --- a/src/core/userinputhandler.cpp +++ b/src/core/userinputhandler.cpp @@ -57,13 +57,16 @@ void UserInputHandler::handleAway(const BufferInfo &bufferInfo, const QString &m Q_UNUSED(bufferInfo) QString awayMsg = msg; + IrcUser *me = network()->me(); + // if there is no message supplied we have to check if we are already away or not if(msg.isEmpty()) { - IrcUser *me = network()->me(); if(me && !me->isAway()) awayMsg = networkConnection()->identity()->awayReason(); } - + if(me) + me->setAwayMessage(awayMsg); + putCmd("AWAY", serverEncode(awayMsg)); } diff --git a/src/qtui/ui/mainwin.ui b/src/qtui/ui/mainwin.ui index 9fd8c73a..6fd7abd0 100644 --- a/src/qtui/ui/mainwin.ui +++ b/src/qtui/ui/mainwin.ui @@ -193,6 +193,9 @@ F7 + + QAction::PreferencesRole + @@ -210,6 +213,9 @@ About Qt... + + QAction::AboutQtRole + @@ -222,6 +228,9 @@ About Quassel IRC... + + QAction::AboutRole + diff --git a/src/uisupport/bufferview.cpp b/src/uisupport/bufferview.cpp index 62060dbb..54221724 100644 --- a/src/uisupport/bufferview.cpp +++ b/src/uisupport/bufferview.cpp @@ -324,7 +324,7 @@ void BufferView::dataChanged(const QModelIndex &topLeft, const QModelIndex &bott return; for(int i = topLeft.row(); i <= bottomRight.row(); i++) { - QModelIndex networkIdx = topLeft.sibling(topLeft.row(), 0); + QModelIndex networkIdx = topLeft.sibling(i, 0); if(model()->rowCount(networkIdx) == 0) continue; diff --git a/src/uisupport/inputline.cpp b/src/uisupport/inputline.cpp index 6ea156aa..521613fa 100644 --- a/src/uisupport/inputline.cpp +++ b/src/uisupport/inputline.cpp @@ -35,30 +35,67 @@ InputLine::~InputLine() { } void InputLine::keyPressEvent(QKeyEvent * event) { - if(event->key() == Qt::Key_Up) { - if(idx > 0) { idx--; setText(history[idx]); } + switch(event->key()) { + case Qt::Key_Up: event->accept(); - } else if(event->key() == Qt::Key_Down) { - if(idx < history.count()) idx++; - if(idx < history.count()) setText(history[idx]); - else if(!text().isEmpty()) { - history << text(); - idx = history.count(); - setText(""); + + if(addToHistory(text())) { + clear(); + break; + } + + if(idx > 0) { + idx--; + setText(history[idx]); } + + break; + + case Qt::Key_Down: event->accept(); - } else if(event->key() == Qt::Key_Select) { // for Qtopia + + if(addToHistory(text())) { + clear(); + break; + } + + if(idx < history.count()) + idx++; + + if(idx < history.count()) + setText(history[idx]); + else + clear(); + + break; + + case Qt::Key_Select: // for Qtopia emit returnPressed(); - QLineEdit::keyPressEvent(event); - } else { + + default: QLineEdit::keyPressEvent(event); } +} +bool InputLine::addToHistory(const QString &text) { + if(text.isEmpty()) + return false; + + Q_ASSERT(0 <= idx && idx <= history.count()); + + if(history.isEmpty() || text != history[idx - (int)(idx == history.count())]) { + // if we change an entry of the history the changed entry is appended to the list and we seek to the end + // we could also easily change the entry in the history... per setting maybe? + history << text; + idx = history.count(); + return true; + } else { + return false; + } } void InputLine::on_returnPressed() { - history << text(); - idx = history.count(); + addToHistory(text()); emit sendText(text()); clear(); } diff --git a/src/uisupport/inputline.h b/src/uisupport/inputline.h index de4206d9..453f2866 100644 --- a/src/uisupport/inputline.h +++ b/src/uisupport/inputline.h @@ -40,6 +40,8 @@ private slots: void on_returnPressed(); void on_textChanged(QString newText); + bool addToHistory(const QString &text); + signals: void sendText(QString text); diff --git a/src/uisupport/tabcompleter.cpp b/src/uisupport/tabcompleter.cpp index 33c0dfbd..b9a6fe2e 100644 --- a/src/uisupport/tabcompleter.cpp +++ b/src/uisupport/tabcompleter.cpp @@ -41,43 +41,49 @@ TabCompleter::TabCompleter(InputLine *inputLine_) } void TabCompleter::buildCompletionList() { + // ensure a safe state in case we return early. completionMap.clear(); + nextCompletion = completionMap.begin(); + // this is the first time tab is pressed -> build up the completion list and it's iterator QModelIndex currentIndex = Client::bufferModel()->currentIndex(); - if(!currentIndex.data(NetworkModel::BufferIdRole).isValid()) { - nextCompletion = completionMap.begin(); + if(!currentIndex.data(NetworkModel::BufferIdRole).isValid()) return; - } NetworkId networkId = currentIndex.data(NetworkModel::NetworkIdRole).value(); - QString channelName = currentIndex.sibling(currentIndex.row(), 0).data().toString(); + QString bufferName = currentIndex.sibling(currentIndex.row(), 0).data().toString(); const Network *network = Client::network(networkId); if(!network) return; - IrcChannel *channel = network->ircChannel(channelName); - if(!channel) - return; - - // FIXME commented for debugging - /* - disconnect(this, SLOT(ircUserJoinedOrParted(IrcUser *))); - connect(channel, SIGNAL(ircUserJoined(IrcUser *)), - this, SLOT(ircUserJoinedOrParted(IrcUser *))); - connect(channel, SIGNAL(ircUserParted(IrcUser *)), - this, SLOT(ircUserJoinedOrParted(IrcUser *))); - */ QString tabAbbrev = inputLine->text().left(inputLine->cursorPosition()).section(' ',-1,-1); QRegExp regex(QString("^[^a-zA-Z]*").append(QRegExp::escape(tabAbbrev)), Qt::CaseInsensitive); - foreach(IrcUser *ircUser, channel->ircUsers()) { - if(regex.indexIn(ircUser->nick()) > -1) { - completionMap[ircUser->nick().toLower()] = ircUser->nick(); + switch(static_cast(currentIndex.data(NetworkModel::BufferTypeRole).toInt())) { + case BufferInfo::ChannelBuffer: + { // scope is needed for local var declaration + IrcChannel *channel = network->ircChannel(bufferName); + if(!channel) + return; + foreach(IrcUser *ircUser, channel->ircUsers()) { + if(regex.indexIn(ircUser->nick()) > -1) + completionMap[ircUser->nick().toLower()] = ircUser->nick(); + } } + break; + case BufferInfo::QueryBuffer: + if(regex.indexIn(bufferName) > -1) + completionMap[bufferName.toLower()] = bufferName; + case BufferInfo::StatusBuffer: + if(!network->myNick().isEmpty() && regex.indexIn(network->myNick()) > -1) + completionMap[network->myNick().toLower()] = network->myNick(); + break; + default: + return; } - + nextCompletion = completionMap.begin(); lastCompletionLength = tabAbbrev.length(); }