Add German translation
authorMichael Poole <mdpoole@troilus.org>
Fri, 2 Apr 2004 18:34:40 +0000 (18:34 +0000)
committerMichael Poole <mdpoole@troilus.org>
Fri, 2 Apr 2004 18:34:40 +0000 (18:34 +0000)
* Fix a format string bug in nickserv.c:NSEMAIL_ALLOWAUTH_BODY.

* Use a separate key name for !netinfo's "Total User Count" so
  other languages can get proper alignment for both that and
  !info #channel.

* Add German language translation by Marc 'feigling' Kührer.
git-archimport-id: srvx@srvx.net--2004-srvx/srvx--devo--1.3--patch-40

languages/de/README [new file with mode: 0644]
languages/de/chanserv.help [new file with mode: 0644]
languages/de/global.help [new file with mode: 0644]
languages/de/mod-serverspy.help [new file with mode: 0644]
languages/de/modcmd.help [new file with mode: 0644]
languages/de/nickserv.help [new file with mode: 0644]
languages/de/strings.db [new file with mode: 0644]
languages/en/README [new file with mode: 0644]
languages/validate.pl [new file with mode: 0644]
src/chanserv.c
src/nickserv.c

diff --git a/languages/de/README b/languages/de/README
new file mode 100644 (file)
index 0000000..13336f8
--- /dev/null
@@ -0,0 +1 @@
+This translation was written by Marc 'feigling' Kührer.
diff --git a/languages/de/chanserv.help b/languages/de/chanserv.help
new file mode 100644 (file)
index 0000000..2ecaab1
--- /dev/null
@@ -0,0 +1,569 @@
+"<INDEX>" ("$b$C Help$b",
+        "$b$C$b ist ein Channel Service Bot, welcher primär feindliche Channel Übernahmen verhindern soll. Zusätzlich beinhaltet der Bot viele nützliche Funktionen, um die Channel Leitung einfacher zu gestalten.",
+        "$b$C$b's Kategorien sind:",
+        "  USER            User Management.",
+        "  CHANNEL         Channel Management.",
+        "  BAN MANAGEMENT  Ban Management.",
+        "  INFORMATION     Informations-Befehle.",
+        "  OPER            Helper/IRC Operator Befehle."
+);
+"USER" ("$bUser Management Befehle:$b",
+        "  ACCESS      Zeigt den Channel Access von einem User an.",
+        "  MYACCESS    Zeigt alle Channel an, in denen du Access hast.",
+        "  ADDCOOWNER  Fügt der Channel Userliste einen Coowner hinzu.",
+        "  ADDMASTER   Fügt der Channel Userliste einen Master hinzu.",
+        "  ADDOP       Fügt der Channel Userliste einen Op hinzu.",
+        "  ADDPEON     Fügt der Channel Userliste einen Peon hinzu.",
+        "  GIVEOWNERSHIP    Gibt die Owner Rechte einem anderen User.",
+        "  CLVL        Ändert den Channel Access eines Users.",
+        "  ADDUSER     Gibt einem User den angegebenen Access Level.",
+        "  DELUSER     Löscht einen User aus einer Channel Userliste.",
+        "  DELETEME    Löscht deinen Access aus einer Channel Userliste.",
+        "  MDELCOOWNER Löscht alle Coowner, deren Accounts auf die angegebene Mask passen.",
+        "  MDELMASTER  Löscht alle Master, deren Accounts auf die angegebene Mask passen.",
+        "  MDELOP      Löscht alle Ops, deren Accounts auf die angegebene Mask passen.",
+        "  MDELPEON    Löscht alle Peons, deren Accounts auf die angegebene Mask passen.",
+       "  TRIM        Löscht inaktive User.",
+        "  UP          Gibt dir Op/Voice in einem Channel, wenn du Access hast.",
+        "  DOWN        Nimmt dir Op/Voice in einem Channel.",
+        "  UPALL       Gibt dir Op/Voice in allen Channeln, in denen du Access hast.",
+        "  DOWNALL     Nimmt dir Op/Voice in allen Channeln.",
+        "  OP          Gibt dem angegebenen User Op.",
+        "  DEOP        Nimmt dem angegebenen User Op.",
+        "  VOICE       Gibt dem angegebenen User Voice.",
+        "  DEVOICE     Nimmt dem angegebenen User Voice.",
+        "  USET        Ändert User Einstellung für einen Channel.",
+        "  SUSPEND     Suspendiert den Access eines Users in einem Channel.",
+        "  UNSUSPEND   Stellt den Access eines Users in einem Channel wieder her.",
+        "  WIPEINFO    Löscht die Infoline von einem User, der weniger Access hat als du."
+);
+"BAN MANAGEMENT" ("$bBan Management Befehle:$b",
+        "  KICK        Kickt einen User aus einem Channel.",
+        "  BAN         Bannt einen User aus einem Channel.",
+        "  KICKBAN     Kickt und bannt einen User aus einem Channel.",
+        "  BANS        Listet alle permanenten Bans auf.",
+        "  ADDBAN      Fügt der Channel Ban Liste einen permanenten Ban hinzu.",
+        "  ADDTIMEDBAN Fügt der Channel Ban Liste einen Ban hinzu, welcher nach der angegebenen Zeit erlischt.",
+        "  UNBAN       Löscht einen temporären Ban.",
+        "  DELBAN      Löscht einen permanenten Ban aus einer Channel Ban Liste.",
+       "  TRIM        Löscht alte Bans.",
+        "  UNBANME     Löscht alle Bans, die für deine Hostmask gelten.",
+        "  UNBANALL    Löscht alle temporären Bans."
+);
+"CHANNEL" ("$bChannel Management Befehle:$b",
+        "  OPEN        Entfernt die Channel Modi +ilk und alle Bans, die für deine Hostmask gelten.",
+        "  USERS       Listet alle User eines Channels auf.",
+        "  CLIST       Listet alle Coowner eines Channels auf.",
+        "  MLIST       Listet alle Master eines Channels auf.",
+        "  OLIST       Listet alle Ops eines Channels auf.",
+        "  PLIST       Listet alle Peons eines Channels auf.",
+        "  BANS        Listet alle permanenten Bans auf.",
+        "  TOPIC       Setzt ein Topic oder resetted das Default Topic.",
+        "  MODE        Ändert die Channel Modi.",
+        "  INVITE      Lädt andere User in einen Channel ein.",
+        "  INVITEME    Lädt dich in einen Channel ein.",
+        "  INFO        Zeigt Informationen über einen Channel an.",
+        "  SET         Ändert eine Vielzahl von Channel Einstellungen.",
+        "  EVENTS      Zeigt eine Liste von vergangenen Events an.",
+        "  NOTE        Fügt einem Channel eine Note hinzu.",
+        "  DELNOTE     Löscht eine Note von einem Channel.",
+        "  RESYNC      Gleicht die Ops und Voices mit der Channel Userliste ab."
+);
+"INFORMATION" ("$bInformations-Befehle:$b",
+        "  VERSION     Zeigt die aktuelle Version von $C an.",
+        "  NETINFO     Zeigt aktuelle Informationen über das Netzwerk an.",
+        "  STAFF       Zeigt eine Liste des Netzwerk Staff an.",
+        "  IRCOPS      Zeigt eine Liste der IRC Operatoren an.",
+        "  HELPERS     Zeigt eine Liste der Support Helper an.",
+        "  PEEK        Zeigt aktuelle Informationen über Channel Modi, das Topic und Channel Ops an.",
+        "  SEEN        Zeigt an, wann ein User das letzte Mal im Channel war.",
+        "  COMMAND     Zeigt Informationen über einen Befehl an."
+);
+"OPER" ("$bHelper/IRC Operator Befehle:$b",
+        "  SAY         Sendet per $C eine Nachricht in einen Channel.",
+        "  EMOTE       Sendet per $C /me ... an einen Channel.",
+        "  GOD         Aktiviert/Deaktiviert Security Override.",
+        "  EXPIRE      Löscht alte Channel.",
+        "  CSUSPEND    Suspendiert $C von einem Channel.",
+        "  CUNSUSPEND  Stellt $C's Access in einem suspendierten Channel wieder her.",
+        "  UNVISITED   Listet alle Channel auf, die in der angegebenen Zeit nicht besucht wurden.",
+       "  MERGE       Kopiert einen Channel mitsamt Userliste, Bans und anderen Daten in einen Anderen.",
+        "  MOVE        Verschiebt einen Channel.",
+        "  OPCHAN      Gibt $C Op in einem Channel.",
+        "  REGISTER    Registriert einen neuen Channel mit $C.",
+        "  NOREGISTER  Fügt einen Channel zu der do-not-register Liste hinzu.",
+        "  ALLOWREGISTER Löscht einen Channel von der do-not-register Liste.",
+        "  UNREGISTER  Löscht $C aus einem registrierten Channel.",
+        "  SEARCH      Sucht nach Channel, die zu den angegebenen Kriterien passen.",
+        "  ADDOWNER    Fügt der Channel Userliste einen Owner hinzu.",
+        "  DELOWNER    Löscht einen Owner von der Channel Userliste.",
+        "  MDELOWNER   Löscht alle Owner, deren Accounts auf die angegebene Mask passen.",
+        "  CREATENOTE  Erstellt einen neuen Note Typ.",
+        "  REMOVENOTE  Löscht einen bestehenden Note Typ."
+);
+"MYACCESS" ("/msg $S MYACCESS [Nick|*Account]",
+        "Listet alle Channel auf, in denen du Access hast und zeigt die Infoline an, falls du eine in diesem Channel gesetzt hast.",
+        "Netzwerk Staff kann einen Nicknamen oder *Account angeben, um den Channel Access von anderen Usern zu betrachten.",
+        "$uSiehe auch:$u access, users");
+        
+"ACCESS" ("/msg $S ACCESS <#Channel> [Nick|*Account]",
+        "Zeigt eine Vielzahl von Informationen eines Users an, wie zum Beispiel den Channel Access, den Netzwerk Access und die Infoline. Wenn kein Nick oder Account angegeben wird, dann zeigt dir $S deine eigenen Informationen.",
+        "$uSiehe auch:$u myaccess, users");
+        
+"ADDBAN" ("/msg $C ADDBAN <#Channel> <Mask|Nick> [Grund]",
+        "Fügt der Channel Ban Liste einen permaneten Ban hinzu, welcher solange bestehen bleibt, bis dieser mit dem DELBAN Befehl gelöscht wird. Wenn schon ein solcher Ban in der Ban Liste ist, wird der Grund des Bans geupdated. Wenn der bestehende Ban zeitlich begrenzt war, wird er permanent gesetzt.",
+        "$uSiehe auch:$u bans, delban, mdelban");
+        
+"ADDUSER" ("/msg $C ADDUSER <#Channel> <Nick|*Account> <Level>",
+        "Dieser Befehl fügt der Channel Userliste einen User mit dem angegebenen Access Level hinzu. (Du kannst Usern nur weniger Access geben als du hast.)",
+        "Der Access Level kann entweder $bPeon$b, $bOp$b, $bMaster$b, $bCoowner$b, $bOwner$b oder eine Zahl zwischen 1 und 500 sein.  Nur der Netzwerk Staff darf Usern Access Level 500 (Owner) geben.",
+        "$uSiehe auch:$u deluser, users");
+        
+"ADDTIMEDBAN" ("/msg $C ADDTIMEDBAN <#Channel> <Mask|Nick> <Länge> [Grund]",
+        "Fügt der Channel Ban Liste einen Ban hinzu, welcher nach der angegebenen Zeit erlischt. Der Befehl funktioniert ähnlich wie der ADDBAN Befehl, mit der Ausnahme, dass die Bans automatisch nach der angegebenen Zeit gelöscht werden. Wenn schon ein solcher Ban in der Ban Liste ist, wird der Grund des Bans geupdated. Falls der alte Ban ein zeitlich begrenzter Ban war, dann wird dieser verlängert. Zeitliche begrenzte Bans müssen mit dem DELBAN Befehl gelöscht werden, genauso wie ADDBANs.",
+        "$uSiehe auch:$u addban, bans, delban, durations");
+        
+"ALLOWREGISTER" ("/msg $C ALLOWREGISTER <#Channel|*Account>",
+        "Löscht einen Channel (oder eine Channel Mask) von der do-not-register Liste.",
+        "$uSiehe auch:$u register, noregister, unregister");
+        
+"BAN" ("/msg $C BAN <#Channel> <Mask|Nick>",
+        "Dieser Befehl wird dem Channel einen temporären Ban mit den angegebenen Parametern hinzufügen. Masks werden in dem Format <Nick>!<Ident>@<Host> angegeben und können Wildcards enthalten. Wenn ein Nickname angegeben wird, wird die Mask automatisch generiert. Dieser Ban kann entweder mit einem normalen IRC Client oder via UNBAN oder UNBANALL Befehl gelöscht werden. Wenn du durch solch einen Ban gebannt wurdest, kannst du den UNBANME Befehl verwenden.",
+        "$uBei Fragen, betrete #support$u",
+        "Beispiel: *!*serv@*.gamesurge.net würde jeden mit der Ident 'serv' und dem gamesurge.net Host bannen.",
+        "$uSiehe auch:$u unban, unbanall, unbanme");
+        
+"BANS" ("/msg $C BANS <#Channel>",
+        "Dieser Befehl listet alle permanenten und zeitlich begrenzten Bans auf.",
+        "$uSiehe auch:$u addban, delban, mdelban");
+        
+"CLIST" ("/msg $C CLIST <#Channel> [Such-Maske]",
+        "Dieser Befehl listet alle $bCoowner$b des Channels auf. Wenn eine Such-Maske angegeben wird, werden nur Coowner aufgelistet, deren Accounts auf die Such-Maske passen.",
+        "$uSiehe auch:$u addcoowner, delcoowner, mdelcoowner, users");
+
+"CLVL" ("/msg $C CLVL <#Channel> <Nick|*Account> <Level>",
+        "Dieser Befehl ändert den Access Level eines Users. Du kannst diesem nicht genauso viel oder mehr Access geben, als du selber hast.",
+        "Du kannst *Account statt Nick verwenden. Das * Zeichen bedeutet, dass $C direkt den Account benutzt (nützlich, falls der User nicht online ist).",
+        "$uSiehe auch:$u access, users, giveownership");
+        
+"CREATENOTE" ("/msg $S CREATENOTE <Typ-Name> <Set-Access> [Access-Arg] <View-Access> <Max-Length>",
+        "Definiert einen neuen Note Typ.  $bTyp-Name$b ist der Name der Note.  $bSet-Access$b kann folgendes sein:",
+        "  $bPRIVILEGED$b Setzt den minimum $O Access, der von $baccess-arg$b bestimmt wird",
+        "  $bCHANNEL   $b Setzt den minimum Channel Access, der von $baccess-arg$b bestimmt wird",
+        "  $bSETTER    $b (ohne access-arg) wird jedem erlaubt, die Note zu verändern, wenn dieser auch !set benutzen kann",
+        "$bView-Access$b ist entweder $bPRIVILEGED$b, $bCHANNEL_USERS$b, oder $bALL$b. Dieser Wert bestimmt, wer die Note sehen kann.",
+        "$bMax-Length$b ist die maximale Länge der Note.",
+        "Falls ein Note Typ schon existiert, wird er mit den neuen Einstellungen geupdated.",
+        "$uSiehe auch:$u removenote");
+        
+"GIVEOWNERSHIP" ("/msg $C GIVEOWNERSHIP <#Channel> <Nick|*Account>",
+        "Übergibt die Owner Rechte des Channels an einen anderen User, der auf der Userliste sein muss.  Dein Access wird auf Coowner geändert, der andere User bekommt den Channel Access Owner.",
+        "Du kannst *Account statt Nick verwenden. Das * Zeichen bedeutet, dass $C direkt den Account benutzt (nützlich, falls der User nicht online ist).",
+        "$uSiehe auch:$u clvl, access, users");
+        
+"CSUSPEND" ("/msg $C CSUSPEND <#Channel> [!]<Dauer> <Grund>",
+        "Dieser Befehl entfernt $C temporär aus dem Channel.",
+        "Die Dauer kann \"0\" betragen, damit $C den niemals wieder betritt, ansonsten wird $C nach der angegebenen $uDauer$u den Channel wieder betreten.",
+        "Wenn du eine bereits existierende Suspendierung verändern möchtest, benutze ein ! vor der Dauer.",
+        "$uSiehe auch:$u unregister, cunsuspend, durations");
+        
+"CUNSUSPEND" ("/msg $C CUNSUSPEND <#Channel>",
+        "Stellt $b$C$bs Access in einem suspendierten Channel wieder her.",
+        "$uSiehe auch:$u csuspend, unregister");
+        
+"DELBAN" ("/msg $C DELBAN <#Channel> <Mask|Nick>",
+        "Löscht einen Ban aus der Ban Liste. Mit diesem Befehl kann man sowohl permanente Bans löschen als auch Bans, die nach einer Zeit ablaufen.",
+        "$uSiehe auch:$u addban, addtimedban, bans");
+        
+"DELNOTE" ("/msg $C DELNOTE <#Channel> <Note-Name>",
+        "Löscht eine Note.  Um dieses zu tun, musst du Access haben, die Note zu verändern.",
+        "$uSiehe auch:$u note, note types");
+        
+"DELUSER" ("/msg $C DELUSER <#Channel> <Nick|*Account>",
+        "Löscht einen User aus der Channel Userliste.",
+        "Du kannst *Account statt Nick verwenden. Das * Zeichen bedeutet, dass $C direkt den Account benutzt (nützlich, falls der User nicht online ist).",
+        "$uSiehe auch:$u adduser, deleteme, users");
+        
+"DELETEME" ("/msg $C DELETEME <#Channel> [<Bestätigungscode>]",
+        "Du kannst mit diesem Befehl deinen Access aus einem Channel löschen, solange du keinen Owner Access hast.  $bFalls du dich ausversehen löscht, musst du jemanden finden, der mehr Access hat als du, der dir wieder Access gibt.$b",
+        "Der Bestätigungscode ist von Channel User zu Channel User verschieden.  Wenn du keinen Code angibst, wird dir $C sagen, wie der Code lauten muss.",
+        "$uSiehe auch:$u adduser, deluser, giveownership, users");
+        
+"DEOP" ("/msg $C DEOP <#Channel> <Nick> [Nick]...",
+        "Nimmt dem/den angegebenen User(n) Op.",
+        "$uSiehe auch:$u down, op");
+        
+"DEVOICE" ("/msg $C DEVOICE <#Channel> <Nick> [Nick]...",
+        "Nimmt dem/den angegebenen User(n) Voice.",
+        "$uSiehe auch:$u addpeon, delpeon, deop, voice");
+        
+"DOWN" ("/msg $C DOWN <#Channel>",
+        "Dieser Befehl wird dir im angegebenen Channel Op/Voice wegnehmen.",
+        "$uSiehe auch:$u downall, up, upall");
+        
+"DOWNALL" ("/msg $C DOWNALL",
+        "Führt den $bdown$b Befehl für jeden Channel aus, in dem du Access hast.",
+        "$uSiehe auch:$u down, up, upall");
+        
+"DURATIONS" ("[<n>y][<n>M][<n>w][<n>d][<n>h][<n>m][<n>[s]]",
+        "Es gibt eine Syntax, mit der du eine Zeitangabe ganz einfach definieren kannst.  Eine Zeitangabe besteht aus einem oder mehreren Teilen, welche aus Zahlen bestehen und durch Buchstaben getrennt werden.",
+        "Die gültigen Buchstaben sind $by$b (für 1 Jahr - 365 Tage), $bM$b (für Monat - 31 Tage), $bw$b (für Woche - 7 Tage), $bd$b (für Tag - 24 Stunden), $bh$b (für Stunde - 60 Minuten), $bm$b (für Minuten - 60 Sekunden) und $bs$b (für Sekunde).  Wir wissen, dass nicht alle Jahre 365 Tage haben und nicht alle Monate 31 Tage, aber auf solch kleine Unterschiede kommt es nicht an.",
+        "Wenn der letzte Teil der Zeitangabe keinen Buchstaben enthält, gilt dieser Teil als Sekundenangabe.",
+        "$uBeispiele$u: 1y1M bedeutet 365 Tage und 31 Tage; 1y1m bedeutet 365 Tage und 1 Minute; 1h30m45 bedeutet 90 Minuten und 45 Sekunden.");
+        
+"EMOTE" ("/msg $C EMOTE <#Channel> <Text>",
+        "Durch diesen Befehl sendet $b$C$b eine CTCP ACTION Nachricht an den angegebenen Channel.",
+        "$uSiehe auch:$u say");
+        
+"EVENTS" ("/msg $C EVENTS <#Channel> [Limit [Such-Mask]]",
+        "Erlaubt Coownern, sich eine Liste der ausgeführten Befehle im Channel anzusehen. Falls eine Such-Mask angegeben wird, werden nur Befehle angezeigt, die auf die Such-Mask passen.",
+       "$bAnmerkung:$b Du musst ein Limit angeben, wenn du eine Such-Mask benutzt.",
+        "$uSiehe auch:$u last");
+        
+"EXPIRE" ("/msg $C EXPIRE",
+        "Löscht alle Channel, die für eine eingestellte Zeit nicht besucht worden sind. $C löscht automatisch verlassene Channel, daher braucht man diesen Befehl nur verwenden, wenn die eingestellte Zeit verändert wurde.",
+        "$uSiehe auch:$u unvisited");
+        
+"HELPERS" ("/msg $C HELPERS",
+        "Zeigt alle Helper an, die zur Zeit online sind. Wenn ein Helper /away ist, wird der Nickname in Klammern gesetzt.",
+        "$uSiehe auch:$u staff");
+        
+"INFO" ("/msg $C INFO <#Channel>",
+        "Dieser Befehl zeigt viele Informationen über einen Channel an, wie zum Beispiel maximale Besucher, Anzahl der Bans und User.");
+        
+"INVITE" ("/msg $C INVITE <#Channel> [Nick [Grund]]",
+        "Lädt einen User in den Channel ein. Falls ein Grund angegeben wird, wird dieser mit verschickt. Wenn du weniger als $bMaster$b im Channel hast, kannst du nur dich selber in den Channel einladen. Wenn du keinen Nick angibst, wirst du in den Channel eingeladen.");
+
+"INVITEME" ("/msg $S INVITEME <#channel>",
+        "Lädt dich in den angegebenen Channel ein.");
+        
+"IRCOPS" ("/msg $C IRCOPS",
+        "Zeigt alle IRC Operatoren an, die zur Zeit online sind. Wenn ein IRCOp /away ist, wird der Nickname in Klammern gesetzt.",
+        "$uSiehe auch:$u staff");
+
+"KICK" ("/msg $C KICK <#Channel> <Mask|Nick> [Grund]",
+        "Kickt einen User aus dem Channel. Wenn kein Grund angegeben wird, wird ein Standardgrund verwendet.",
+        "$uSiehe auch:$u kickban");
+        
+"KICKBAN" ("/msg $C KICKBAN <#Channel> <Mask|Nick> [Grund]",
+        "Kickt und bannt einen User aus dem Channel. Wenn kein Grund angegeben wird, wird der Standardgrund verwendet.",
+        "$uSiehe auch:$u addban, kick");
+        
+"MDELCOOWNER" ("/msg $C MDELCOOWNER <#Channel> <Such-Mask>",
+        "Löscht alle Coowner aus der Channel Userliste, deren Accounts auf die angegebene Such-Mask passen.",
+        "$uSiehe auch:$u clist, delcoowner");
+        
+"MDELMASTER" ("/msg $C MDELMASTER <#Channel> <Such-Mask>",
+        "Löscht alle Master aus der Channel Userliste, deren Accounts auf die angegebene Such-Mask passen.",
+        "$uSiehe auch:$u mdelban, mdelcoowner, mdelop, mdelowner, mdelpeon");
+        
+"MDELOP" ("/msg $C MDELOP <#Channel> <Such-Mask>",
+        "Löscht alle Ops aus der Channel Userliste, deren Accounts auf die angegebene Such-Mask passen.");
+
+"MDELOWNER" ("/msg $C MDELOWNER <#Channel> <Such-Mask>",
+        "Löscht alle Owner aus der Channel Userliste, deren Accounts auf die angegebene Such-Mask passen.",
+        "$uSiehe auch:$u addowner, mdelcoowner, mdelmaster, mdelop, mdelpeon");
+
+"MDELPEON" ("/msg $C MDELPEON <#Channel> <Such-Mask>",
+        "Löscht alle Peons aus der Channel Userliste, deren Accounts auf die angegebene Such-Mask passen.",
+        "$uSiehe auch:$u addpeon, mdelcoowner, mdelmaster, mdelop");
+
+"MERGE" ("/msg $C MERGE <#Channel> <Ziel>",
+        "Kopiert alle Daten wie User und Bans von dem alten Channel in den neuen Channel. User, die ihm Ziel Channel mehr Access haben als im Alten, behalten den höheren Access.",
+        "$uSiehe auch:$u register, move, unregister");
+
+"MLIST" ("/msg $C MLIST <#Channel> [Such-Maske]",
+        "Dieser Befehl listet alle $bMaster$b des Channels auf. Wenn eine Such-Maske angegeben wird, werden nur Master aufgelistet, deren Accounts auf die Such-Maske passen.",
+        "$uSiehe auch:$u addmaster, delmaster, mdelmaster, users");
+
+"MODE" ("/msg $C MODE <#Channel>",
+        "Setzt Channel Modi oder ändert sie auf die Modi, die bei SET MODES angegeben sind.",
+        "$uSiehe auch:$u open, set");
+
+"MOVE" ("/msg $C MOVE <#Channel> <Ziel>",
+        "Verschiebt den Channel zu einem anderen Channel, eingeschlossen den Einstellungen und der User/Ban Listen. Alle Einschränkungen, die für $bregister$b gelten, gelten auch für $bmove$b.",
+        "$uSiehe auch:$u register, merge, unregister");
+
+"NETINFO" ("/msg $C NETINFO",
+        "Zeigt Informationen über $b$C$b und das Netzwerk.",
+        "$uSiehe auch:$u info, staff");
+
+"NOREGISTER" ("/msg $C NOREGISTER <#Channel|*Account> <Grund>",
+        "Ohne Parameter werden alle Einträge der do-not-register Liste aufgelistet.",
+        "Mit Parametern wird der angegebene Channel (oder Account) der Liste hinzugefügt. Die Wildcards * und ? können für Channelnamen verwendet werden.",
+        "$uSiehe auch:$u allowregister, register, unregister");
+
+"NOTE" ("/msg $C NOTE <#Channel> [<Typ> [NeuerText]]",
+        "Ohne Parameter werden die Notes des Channels angezeigt (wenn vorhanden).",
+        "Mit einem Parameter wird der angegebene Note Typ und die dazugehörige Note angezeigt.",
+        "Mit mehr als einem Parameter wird die Note geändert.",
+        "$uSiehe auch:$u delnote, note types");
+
+"NOTE TYPES" ("$bNOTE TYPES$b",
+        "${notes}",
+        "$uSiehe auch:$u note, delnote");
+
+"OLIST" ("/msg $C OLIST <#Channel> [Such-Maske]",
+        "Dieser Befehl listet alle $bOps$b des Channels auf. Wenn eine Such-Maske angegeben wird, werden nur Ops aufgelistet, deren Accounts auf die Such-Maske passen.",
+        "$uSiehe auch:$u addop, delop, mdelop, users");
+
+"OP" ("/msg $C OP <#Channel> <Nick> [Nick]...",
+        "Mit diesem Befehl kannst du durch $C anderen Usern Op geben.",
+        "$uSiehe auch:$u addop, delop, deop");
+
+"OPCHAN" ("/msg $C OPCHAN <#Channel>",
+        "Durch diesen Befehl gibt sich $C in dem Channel selber Op.");
+
+"OPEN" ("/msg $C OPEN <#Channel>",
+        "Durch diesen Befehl entfernt $C alle Channel Modi, die einen User daran hindern könnten, den Channel zu betreten und löscht alle Bans, die mit der Hostmask des Users übereinstimmen.",
+        "$uSiehe auch:$u unbanme");
+
+"PEEK" ("/msg $C PEEK <#Channel>",
+        "Zeigt das aktuelle Topic, die Channel Modi und Ops in dem Channel. Anders als $binfo$b, zeigt $bpeek$b Channel Information, die nicht mit $b$C$b zusammen hängen.",
+        "$uSiehe auch:$u info");
+
+"PLIST" ("/msg $C PLIST <#Channel> [Such-Maske]",
+        "Dieser Befehl listet alle $bPeons$b des Channels auf. Wenn eine Such-Maske angegeben wird, werden nur Peons aufgelistet, deren Accounts auf die Such-Maske passen.",
+        "$uSiehe auch:$u addpeon, delpeon, mdelpeon, users");
+        
+"REGISTER" ("/msg $C REGISTER <#Channel> [User|*Account] [Force]",
+        "Registriert einen Channel mit $b$C$b und gibt dem angegebenen User Owner Rechte. Wenn kein User angegeben wird, gibt $b$C$b die Owner Rechte an den User, der den Befehl benutzt hat.",
+        "Wenn der Registrar Netzwerk Staff ist und $bForce$b angibt, ist es möglich, einen Channel an einen User zu registrieren, auch wenn der Channel und/oder der User auf der do-not-register Liste sind.",
+        "Zusätzlich muss man $bForce$b benutzen, wenn jemand mehr Channel besitzt, als in den Einstellungen angegeben und noch einen weiteren Channel benötigt.",
+        "$uSiehe auch:$u addowner, noregister, unregister");
+
+"REMOVENOTE" ("/msg $S REMOVENOTE <Typ> [FORCE]",
+        "Löscht einen Note Typ.  Ohne das Wort $bFORCE$b, wird nur ein Typ gelöscht, der in keinem Channel verwendet wird.",
+        "$uSiehe auch:$u createnote");
+
+"RESYNC" ("/msg $S RESYNC <#Channel>",
+        "Synchronisiert die User des Channels mit der Channel Userliste. Das bedeutet, wenn ein User normal beim Betreten des Channels Op bekommt, stellt $S sicher, dass der User Op hat.  Wenn ein User normal Voice bekommt, stellt $S sicher, dass der User Voice hat aber kein Op.  Wenn User keinen Access im Channel haben, stellt $S sicher, dass diese weder Op noch Voice haben.");
+
+"SAY" ("/msg $C SAY <#Channel> <Text>",
+        "Durch diesen Befehl kann man $b$C$b in einem Channel sprechen lassen.",
+        "$uSiehe auch:$u emote");
+
+"SEARCH CRITERIA" ("$bSEARCH CRITERIA$b",
+        "Die folgenden Kriterien können benutzt werden:",
+        "  NAME        Channel, deren Namen auf die angebenene Such-Maske passen",
+        "  REGISTRAR   Channel, dessen Registrar auf die angebenene Such-Maske passt",
+        "  UNVISITED   Channel, die in der angegebenen Zeit nicht besucht wurden",
+        "  REGISTERED  Channel, die länger als der angegebene Zeitraum registriert sind",
+        "  FLAGS       Channel, die die angegebenen Flags haben",
+        "  LIMIT       Limitiert die Ausgabe der Suche",
+        "Flags können sein: nodelete und suspended.",
+        "$uSiehe auch:$u search, search actions");
+
+"SEARCH ACTIONS" ("$bSEARCH ACTIONS$b",
+       "Die folgenden Aktionen sind gültig:",
+       "  PRINT       Zeigt die Channel, die den Kriterien entsprechen",
+       "  COUNT       Zählt die Channel, die den Kriterien entsprechen",
+       "$uSiehe auch:$u search, search criteria");
+
+"SEARCH" ("/msg $C SEARCH <Aktion> <Kriterium> <Wert> [<Kriterium> <Wert>]...",
+        "Sucht nach Channeln, die mit den angegebenen Kriterien übereinstimmen und führt dann die Aktion aus.",
+        "$uSiehe auch:$u search actions, search criteria");
+
+"SEEN" ("/msg $C SEEN <#Channel> <Account>",
+        "Dieser Befehl zeigt an, wann ein User letztmalig im Channel war.",
+        "$uSiehe auch:$u access, users");
+
+"SET" ("/msg $C SET <#Channel> [<Einstellung> [Wert]]",
+        "Mit diesem Befehl ist es möglich, zahlreiche Channel Einstellungen zu verändern.  Ohne Parameter zeigt $C alle aktuellen Einstellungen.",
+        "DEFAULTTOPIC: Default Topic des Channels.",
+        "TOPICMASK:    Vorlage, wie das Channel Topic aussehen soll.",
+        "GREETING:     Begrüßung für Channel Besucher.",
+        "USERGREETING: Begrüßung für User, die auf der Channel Userliste sind.",
+        "MODES:        Default Channel Modi.",
+       "PUBCMD:       Wer darf ! Befehle benutzen.",
+        "INVITEME:     Wer darf INVITEME und AUTOINVITE benutzen.",
+        "USERINFO:     Bei wem soll die Infoline angezeigt werden.",
+        "GIVEVOICE:    Wer bekommt von $b$C$b Voice.",
+        "GIVEOPS:      Wer bekommt von $b$C$b Op.",
+        "ENFOPS:       Wer darf anderen Usern Op geben.",
+        "ENFMODES:     Wer darf die Channel Modi verändern.",
+        "ENFTOPIC:     Wer darf das Topic verändern.",
+        "TOPICSNARF:   Bei wem soll $b$C$b das Default Topic ändern, wenn dieser /TOPIC #Channel benutzt.",
+        "SETTERS:      Wer darf die Channel Einstellungen verändern (durch $bSET$b).",
+        "CTCPUSERS:    Wer darf CTCPs an den Channel senden.",
+        "CTCPREACTION: Reaktion bei einem unerlaubten CTCP.",
+        "PROTECT:      Wen soll $b$C$b vor anderen Usern beschützen.",
+       "TOYS:         Wie soll mit Toy Befehlen umgegangen werden (!8ball etc).",
+        "TOPICREFRESH: Hiermit kann eingestellt werden, ob und wie oft das Topic erneuert werden soll.",
+        "DYNLIMIT:     Regelt das Userlimit (Channel Modus +l), um Join-Floods zu verhindern.",
+        "$bIRCOP$b:",
+        "NODELETE:  Verhindert, dass der Channel gelöscht werden kann.",
+        "Wenn du willst, dass die Standard Channel Einstellungen wiederhergestellt werden, kannst du den $bSET DEFAULTS$b Befehl benutzen.",
+        "$uSiehe auch:$u set pubcmd, set giveops, set enfops, set enfmodes, set enftopic, set protect, set toys, set setters, set topicrefresh, set ctcpusers, set ctcpreaction, set defaults");
+
+"SET DEFAULTTOPIC" ("/msg $C SET <#Channel> DEFAULTTOPIC <Neues Topic>",
+        "Dieser Befehl ändert das Default Topic des Channels. $C wird dieses Topic setzen, wenn jemand den $btopic$b Befehl ohne Parameter verwendet, wenn das Topic in bestimmten Zeitabständen erneuert werden soll (falls $bset topicrefresh$b aktiviert ist) oder wenn ein unauthorisierter User das Topic ändert.",
+        "$uSiehe auch:$u set, set topicrefresh, set enftopic, set topicmask");
+
+"SET TOPICMASK" ("/msg $C SET <#Channel> TOPICMASK <Topic Mask mit *>",
+        "Dieser Befehl setzt eine Vorlage, wie das Topic aussehen sollte.  Die Wilcard $b*$b bedeutet, dass dort nachher unendlich viele Zeichen stehen dürfen.  Ein User darf das Topic verändern, wenn das entweder $btopicmask$b oder $benftopic$b erlauben.",
+        "Um eine Topic Mask zu setzen, musst du folgendes machen: $b!set topicmask Willkommen - News: *$b und dann $b!set enftopic 501$b.",
+        "Wenn du dann $b!topic keine$b eingibst, ändert $C das Topic in $uWillkommen - News: keine$u. Wenn du die Topic Mask wieder ändern möchtest, musst du $benftopic$b auf einen niedrigeren Access Level setzen.",
+        "Eine Topic Mask darf nur eine WildCard $b*$b enthalten, ansonsten funtkioniert die Topic Mask nicht wie gewünscht, wenn mehrere * oder ? angegeben sind.",
+        "Falls du immer noch nicht genau weißt, wie du Topic Mask verwenden kannst, gehe auf diese Seite: http://www.gamesurge.net/cms/Topic%%20Masking%%20Guide/",
+        "$uSiehe auch:$u set, set topic, set enftopic");
+
+"SET TOYS" ("/msg $C SET <#Channel> TOYS <Wert>",
+       "In dieser Einstellung kannst du angeben, wie und ob $C auf Befehle wie !8ball reagieren soll.  Gültige Werte sind:",
+       "$b0$b  Toys sind vollständig abgeschaltet.",
+       "$b1$b  Toys werden nur dem User direkt beantwortet.",
+       "$b2$b  Toys werden im Channel beantwortet.",
+       "$uSiehe auch:$u set");
+
+"SET PUBCMD" ("/msg $C SET <#Channel> PUBCMD <Wert>",
+        "Mit diesem Befehl kannst du den Access Level festsetzen, den man benötigt, um Befehle via ! direkt im Channel nutzen zu können. Du kannst Access Level 0 - 501 verwenden. 0 bedeutet, jeder darf ! Befehle verwenden; 501 bedeutet, niemand darf ! Befehle verwenden.",
+        "$uSiehe auch:$u set");
+
+"SET ENFOPS" ("/msg $C SET <#Channel> ENFOPS <Wert>",
+        "Mit diesem Befehl kannst du den Access Level angegeben, den man benötigt, um Usern Op zu geben, die weniger als Op Access im Channel haben. Wenn ein unbekannter User Op erhält, wird $C ihm die Op-Rechte wieder entziehen.  Du kannst Access Level 0 - 501 verwenden. 501 bedeutet, niemand darf unbekannte Usern Op geben.",
+        "$uSiehe auch:$u set");
+
+"SET GIVEOPS" ("/msg $C SET <#Channel> GIVEOPS <Wert>",
+        "Mit diesem Befehl kannst du den Access Level angegeben, den man benötigt, um von $C automatisch Op zu bekommen.  Du kannst Access Level 0 - 501 verwenden. 0 bedeutet, jeder bekommt Op; 501 bedeutet, niemand bekommt Op.",
+        "$uSiehe auch:$u set");
+
+"SET ENFMODES" ("/msg $C SET <#Channel> ENFMODES <Wert>",
+        "Mit diesem Befehl kannst du den Access Level angegeben, den man benötigt, um die Channel Modi zu verändern. Die Channel Modi Beschränkung, die mit $bset modes$b angegeben wurde, besteht für den User dann nicht. Du kannst Access Level 0 - 501 verwenden. 0 bedeutet, für niemanden gilt die $bset modes$b Beschränkung; 501 bedeutet, für alle gilt die $bset modes$b Beschränkung.",
+        "$uSiehe auch:$u set");
+
+"SET ENFTOPIC" ("/msg $C SET <#Channel> ENFTOPIC <Wert>",
+        "Mit diesem Befehl kannst du den Access Level angegeben, den ein User benötigt, um das Channel Topic zu verändern.  Du kannst Access Level 0 - 501 verwenden. 0 bedeutet, jeder darf das Topic ändern; 501 bedeutet, niemand darf das Topic ändern.",
+        "Wenn eine Topic Mask gesetzt wurde, dann darf ein User das Topic verändern, solange es zu der Topic Mask passt oder dieser mehr Access hat als bei dieser Einstellung angegeben ist.",
+        "Wenn keine Topic Mask gesetzt wurde, dann darf ein User das Topic nicht verändern, wenn dieser weniger Access hat.",
+        "$uSiehe auch:$u set, set topic, set topicmask");
+
+"SET PROTECT" ("/msg $C SET <#Channel> PROTECT <Wert>",
+        "Hier kannst du einstellen, wer von $C geschützt werden soll.  Gültige Einstellungen sind:",
+        "$b0$b  Channel Besucher und User, die Access im Channel haben, werden vor Usern mit gleichem oder weniger Access geschützt.",
+        "$b1$b  User, die Access im Channel haben, werden vor Usern mit gleichem oder weniger Access geschützt.",
+        "$b2$b  User, die Access im Channel haben, werden vor Usern mit weniger Access geschützt.",
+        "$b3$b  Niemand wird geschützt.",
+        "$uSiehe auch:$u set");
+
+"SET SETTERS" ("/msg $C SET <#Channel> SETTERS <Wert>",
+        "Hiermit kannst du einstellen, welchen Access Level ein User benötigt, um mit dem Befehl $bSET$b die $C Einstellungen zu verändern.  Du kannst Access Level 200 - 500 verwenden.",
+        "$uSiehe auch:$u set");
+
+"SET TOPICREFRESH" ("/msg $C SET <#Channel> TOPICREFRESH <Wert>",
+        "Mit diesem Befehl kannst du angeben, ob und wie oft das aktuelle Topic mit dem Default Topic überschrieben wird.  Gültige Einstellungen sind:",
+        "$b0$b  Niemals erneuern.",
+        "$b1$b  Alle 3 Stunden erneuern.",
+        "$b2$b  Alle 6 Stunden erneuern.",
+        "$b3$b  Alle 12 Stunden erneuern.",
+        "$b4$b  Alle 24 Stunden erneuern.",
+        "$uSiehe auch:$u set, set topic");
+
+"SET CTCPUSERS" ("/msg $C SET <#Channel> CTCPUSERS <Wert>",
+        "Mit diesem Befehl kannst du den Access Level angegeben, den ein User benötigt, um CTCPs an den Channel senden zu dürfen.  CTCP ACTION - sind immer erlaubt (CTCP ACTION wäre zum Beispiel /me).  Für andere CTCPs muss man genügend Access haben.  Du kannst Access Level 0 - 501 verwenden. 0 bedeutet, jeder darf CTCPs senden; 501 bedeutet, niemand darf CTCPs senden.",
+        "Wenn jemand CTCPs an den Channel sendet und nicht genug Access hat, wird er mit der bei $bCTCPReaction$b angegebenen Weise bestraft.",
+        "$uSiehe auch:$u set, set ctcpreaction");
+
+"SET CTCPREACTION" ("/msg $C SET <#Channel> CTCPREACTION <Wert>",
+        "Hiermit kannst du einstellen, was mit Usern passieren soll, die unerlaubte CTCPs verwenden:",
+        "$b0$b  Kick bei unerlaubten CTCPs.",
+        "$b1$b  Kickban bei unerlaubten CTCPs.",
+        "$b2$b  Kurzfristiger Ban (Default: 3 Minuten) bei unerlaubten CTCPs.",
+        "$b3$b  Langfristiger Ban (Default: 1 Stunde) bei unerlaubten CTCPs.",
+        "$uSiehe auch:$u set, set ctcpusers");
+
+"SET DEFAULTS" ("/msg $C SET <#Channel> DEFAULTS [<Bestätigungscode>]",
+        "Mit diesem Befehl kannst du die Standard Channel Einstellungen wiederherstellen.",
+        "Wenn du keinen Bestätigungscode angibst, zeigt dir $C, wie der Code lauten muss.",
+        "$uSiehe auch:$u set");
+
+"STAFF" ("/msg $C STAFF",
+        "Zeigt alle Helper und IRC Operatoren an, die zur Zeit online sind. Wenn ein Helper oder IRCOp /away ist, wird der Nickname in Klammern gesetzt.",
+        "$uSiehe auch:$u helpers, ircops, netinfo");
+
+"SUSPEND" ("/msg $C SUSPEND <#Channel> <Nick|*Account>",
+        "Durch diesen Befehl kannst du den Access eines Users in einem Channel suspendieren.  Den Access kannst du später mit dem $bunsuspend$b Befehl wiederherstellen.",
+        "$uSiehe auch:$u unsuspend, deluser");
+
+"TOPIC" ("/msg $C TOPIC <#Channel> [Topic]",
+        "Setzt das Topic im angegebenen Channel.  Wenn kein Topic angegeben wird, wird das Default Topic als Channel Topic gesetzt.");
+
+"TRIM" ("/msg $C TRIM <#Channel> <Ziel> <Zeitangabe>",
+       "Der Trim Befehl löscht User oder Bans, die für die angegebene Zeit inaktiv waren. Das Ziel muss ein Access Level, ein Bereich von Access Leveln (Beispiel: \"300-399\"), \"users\" oder \"bans\" sein.",
+       "$uSiehe auch:$u durations");
+
+"UNBAN" ("/msg $C UNBAN <#Channel> <Mask|Nick>",
+        "Löscht einen temporären Ban, der für den angegeben User oder die Mask gilt. Wenn ein Nick angegeben wird, sucht sich $b$C$b die Bans, die gelöscht werden müssen.",
+        "$uSiehe auch:$u ban, kick, kickban");
+
+"UNBANALL" ("/msg $C UNBANALL <#Channel>",
+        "Löscht alle temporären Channel Bans.",
+        "$uSiehe auch:$u ban, unban, unbanme");
+
+"UNBANME" ("/msg $C UNBANME <#Channel>",
+        "Löscht alle Bans, die für deine Hostmask gelten. Damit kannst du Bans löschen, falls dich jemand von einem Channel gebannt hat.",
+        "$uSiehe auch:$u ban, unban");
+
+"UNREGISTER" ("/msg $C UNREGISTER <#Channel> [<Bestätigungscode>]",
+        "Löscht einen Channel, der mit $b$C$b registriert ist. $bWICHTIG$b: Wenn der Channel einmal gelöscht wurde, kann die Userliste $bNICHT$b wiederhergestellt werden.",
+        "Wenn du kein Netzwerk Staff Mitglied bist, musst du einen Bestätigungscode angeben, um den Channel zu löschen.  Wenn du keinen Code angibst, wird dir $C sagen, wie der Code lauten muss.",
+        "$uSiehe auch:$u register");
+
+"UNSUSPEND" ("/msg $C UNSUSPEND <#Channel> <Nick|*Account>",
+        "Stellt den Access eines Users wieder her, wenn dieser suspendiert wurde.",
+        "$uSiehe auch:$u suspend, deluser");
+
+"UNVISITED" ("/msg $C UNVISITED [Zeitangabe] [Limit]",
+        "Zeigt Channel bis zu einem Limit an, welche in der angegebenen Zeit nicht besucht wurden. Wenn keine Zeitangabe angegeben wird, wird ein Defaultwert benutzt.",
+        "$uSiehe auch:$u expire, search, durations");
+
+"UP" ("/msg $C UP <#Channel>",
+     "Dieser Befehl wird dir im angegebenen Channel Op/Voice geben, wenn du genügend Access hast.  Wenn dein Access geringer ist als bei GiveVoice angegeben, passiert nichts. Wenn dein Access geringer ist als bei GiveOps angegeben, dann wird dir $b$C$b Voice geben und wenn du mehr Access hast, gibt dir $b$C$b Op.");
+
+"UPALL" ("/msg $C UPALL",
+        "Führt den $bup$b Befehl für jeden Channel aus, in dem du Access hast.",
+        "$uSiehe auch:$u up, down, downall");
+
+"USET"  ("/msg $C USET <#Channel> [<Einstellung> [<Wert>]]",
+         "Der $buset$b Befehl erlaubt dir einige Channel-User Einstellungen zu verändern. Ohne Parameter zeigt der Befehl die aktuellen Einstellungen an.",
+         "$bOptionen:$b",
+         "INFO:       Setzt deine Infoline, die $C an den Channel sendet, wenn du diesen joinst.",
+         "NOAUTOOP:   Wenn aktiviert, gibt dir $C kein Op, wenn du den Channel betrittst.",
+         "AUTOINVITE: Wenn aktiviert, wird dich $C in den Channel einladen, wenn du dich bei $N einloggst und der Channel entweder +i oder +k ist.",
+         "Anmerkung: Die NoAutoOp Einstellung ist dem alten !togop Befehl sehr ähnlich.",
+         "$uSiehe auch:$u set");
+
+"USET INFO" ("/msg $C USET <#Channel> INFO <Text>",
+        "Mit diesem Befehl kannst du einen Text angeben, der an den Channel gesendet wird, wenn du diesen betrittst. Um den Text zu löschen, benutze '*' als Text.",
+        "$uSiehe auch:$u access");
+
+"USERS" ("/msg $C USERS <#Channel> [Such-Maske]",
+        "Zeigt die Userliste des angegebenen Channels an. Wenn eine Such-Maske angegeben wird, werden nur die User angezeigt, deren Accounts auf die Such-Maske passen.",
+        "$uSiehe auch:$u clist, mlist, olist, plist, wlist");
+
+"VOICE" ("/msg $C VOICE <#Channel> <Nick> [Nick]...",
+        "Mit diesem Befehl kannst du durch $C anderen Usern Voice geben.",
+        "$uSiehe auch:$u devoice");
+
+"WIPEINFO" ("/msg $C WIPEINFO <#Channel> <Nick|*Account>",
+        "Mit diesem Befehl kannst du die Infoline eines anderen Users löschen, wenn dieser weniger Access im Channel hat als du.");
+
+"WLIST" ("/msg $C WLIST <#Channel> [Such-Maske]",
+        "Dieser Befehl listet alle $bOwner$b des Channels auf. Wenn eine Such-Maske angegeben wird, werden nur Owner aufgelistet, deren Accounts auf die Such-Maske passen.",
+        "$uSiehe auch:$u addcoowner, delcoowner, mdelcoowner, users");
+
+"I'VE FALLEN AND I CAN'T GET UP" ("$bHelp, I've fallen and I can't get up$b!",
+        "If you drank your milk, you might not feel so vulnerable right now.",
+        "So next time you're sitting in front of a tall frosty glass of milk, just think how much it will help build up your bone structure.");
+"ME"   "Help you? You're beyond help.";
+"Zoot" "Crash it again, please?";
+"Entrope" "C Code.  C Code Run.  Run, Code, Run!!    (please?)";
+"emacs" ("A novice of the temple once approached the Chief Priest with a question.",
+        "The novice asked, \"Master, does Emacs have the Buddha nature?\"",
+        "The Chief Priest had been in the temple for many years and could be relied upon to know these things.  He thought for several minutes before replying.",
+        "\"I don't see why not.  It's got bloody well everything else.\"",
+        "With that, the Chief Priest went to lunch.  The novice suddenly achieved enlightenment, several years later.");
+"thanks" ("The srvx developers would like to thank the following people for their help in making srvx as polished as it is today:",
+        "$bGameSurge IRC Network$b - All the users and staff there bear with our shortcomings and bugs and let us know what needs to be fixed.",
+        "$bIC5 Networks$b (and JohnM in particular) - Never afraid to critique things, even if we are the 800 pound gorilla.",
+        "$bMeeko, eraser, hock(ey), KilledInAction, MadEwokHerd, Milon and Shoat$b - Hardcore beta testing and bug finding on the testnet.",
+        "$bCrips and feigling$b - Reading through all the boring messages and finding ways to make them clearer.");
diff --git a/languages/de/global.help b/languages/de/global.help
new file mode 100644 (file)
index 0000000..6f70a0f
--- /dev/null
@@ -0,0 +1,35 @@
+"<INDEX>" ("$b$G Hilfe$b",
+        "Der $b$G$b Service erlaubt den Netzwerk Administratoren, wichtige Nachrichten zu verwalten und an alle User zu senden. Den Usern erlaubt dieser, Nachrichten zu lesen, die an sie gerichtet sind.",
+        "$bUser Befehle:$b",
+        "  MESSAGES   Zeigt dir alle Nachrichten, auf die zu Zugriff hast.",
+        "  VERSION    $G's Version.",
+        "$bPrivilegierte Befehle:$b",
+        "  NOTICE     Sendet eine Nachricht an alle User des Netzwerkes.",
+        "  MESSAGE    Fügt der $G Datenbank eine Nachricht hinzu.",
+        "  LIST       Zeigt alle aktiven Nachrichten.",
+        "  REMOVE     Löscht eine Nachricht.");
+"LIST" ("/msg $G LIST",
+        "Zeigt alle aktiven Nachrichten und weitere Informationen über diese, wie zum Beispiel Target, Message ID, Gültigkeitsdauer einer Nachricht und wer eine Nachricht gesetzt hat.",
+        "$uSiehe auch:$u message, messages, remove");
+"MESSAGE" ("/msg $G MESSAGE [<Optionen> <Wert>] text <Nachricht>",
+        "Fügt der $b$G$b Datenbank eine Nachricht hinzu. Diese Nachrichten werden an die User gesendet, wenn sie connecten oder die angegebene Target Class betreten. $bMessage$b hat folgende Optionen:",
+        "$bTARGET$b:   Stellt den Empfänger der Nachricht ein. Diese Option kann mehrere Male verwendet werden. Siehe $btarget$b, um eine Liste aller verfügbaren Ziele zu bekommen.",
+        "$bDURATION$b: Setzt die Gültigkeitsdauer der Nachricht. Nach der angegebenen Zeit wird die Nachricht aus der $b$G$b Datenbank gelöscht.",
+        "$uSiehe auch:$u list, messages, remove, target");
+"MESSAGES" ("/msg $G MESSAGES",
+        "Zeigt dir alle Nachrichten, auf die du Lesezugriff hast.");
+"NOTICE" ("/msg $G NOTICE <Ziel> <Nachricht>",
+        "Sendet sofort eine Nachricht an das angegebene Ziel. Siehe $btarget$b, um eine Liste aller verfügbaren Ziele zu bekommen.",
+        "$uSiehe auch:$u target");
+"REMOVE" ("/msg $G REMOVE <ID>",
+        "Löscht eine Nachricht, bevor sie erlischt. Die Message ID kannst du in der Nachricht von $bsend$b finden oder indem du $blist$b benutzt.",
+        "$uSiehe auch:$u list, message");
+"TARGET" ("$bTARGET$b",
+        "$bTarget$b wird in vielen Befehlen als Unterbefehl benutzt. Gültige Werte sind:",
+        "$bUSERS$b:      Die Nachricht wird an alle User des Netzwerkes ausser an Channel gesendet, eingeschlossen IRC Operatoren und Helper.",
+        "$bANNOUNCEMENT$b: Die Nachricht wird an alle User des Netzwerkes gesendet, die Community Announcements empfangen wollen.",
+        "$bHELPERS$b:    Die Nachricht wird nur an alle Helper gesendet.",
+        "$bOPERS$b:      Die Nachricht wird nur an alle IRC Operatoren gesendet.",
+        "$bSTAFF$b:      Die Nachricht wird nur an alle Helper und IRC Operatoren gesendet.",
+        "$bCHANNELS$b:   Die Nachricht wird an alle Channel gesendet.",
+        "$bALL$b:        Eine Kombination von USERS und CHANNELS.");
\ No newline at end of file
diff --git a/languages/de/mod-serverspy.help b/languages/de/mod-serverspy.help
new file mode 100644 (file)
index 0000000..5c5f0c5
--- /dev/null
@@ -0,0 +1,11 @@
+"connect" ("/msg $S CONNECT",
+        "Verbindet srvx mit dem ServerSpy Server.",
+        "(Das kann je nach Netzwerk einige Zeit dauert.)",
+        "$uSiehe auch:$u disconnect");
+"disconnect" ("/msg $S DISCONNECT",
+        "Disconnected srvx von dem ServerSpy Server.",
+        "$uSiehe auch:$u connect");
+"serverspy" ("/msg $S SERVERSPY [Player|Server] <Name-Mask> game <Game-ID> mod <Mod-ID>",
+        "Listet Server und Player auf, die auf die angegebene Name-Mask zutreffen.",
+        "Name-Mask kann die Wildcards * und ? enthalten.  Game-ID und Mod-ID können folgende sein:",
+        "${game-mod-table}");
diff --git a/languages/de/modcmd.help b/languages/de/modcmd.help
new file mode 100644 (file)
index 0000000..364bf09
--- /dev/null
@@ -0,0 +1,88 @@
+"bind" ("/msg $S BIND <service> <bindname> <command> [additional args..]",
+        "Binds (adds) a command to an existing service.  $bbindname$b is the name of the new command for the service.  $bcommand$b may be one of:",
+        "  CommandName              To refer to a command on the same service.",
+        "  ServiceNick.CommandName  To refer to a command bound on a different service.",
+        "  *ModuleName.CommandName  To bind a command directly from a module (note the asterisk before the module name).",
+        "  *ModuleName.*            To bind all commands from the named module.",
+        "For simplicity, you cannot bind to a command that is itself an alias.  Certain commands will not bound with the last form; you must bind them by name.",
+        "(A command binding is very similar to an alias, but only pays the speed penalty for alias expansion when there are additional arguments in the binding.)",
+        "$uSee also:$u unbind");
+"commands" "${index}";
+"god" ("/msg $C GOD [on|off]",
+        "Aktiviert und deaktiviert Security Override.");
+"help" ("/msg $S HELP [Befehl]",
+        "Zeigt die Hilfe des angegebenen Befehls an.",
+        "Alle Hilfedateien benutzen die gleiche Syntax. Optionale Argumente werden mit [] und benötigte Argumente mit <> angegeben.",
+        "Um zu sehen, welche Befehle du mit $S verwenden kannst, benutze /msg $S help commands. Um Hilfe für einen speziellen Befehl zu bekommen, benutze /msg $S help <command>.");
+"readhelp" ("/msg $S READHELP <module>",
+        "Re-reads the module's help file from disk.",
+        "$uSee Also:$u help");
+"unbind" ("/msg $S UNBIND <service> <command>",
+        "Unbinds a command from a service, so that it is no longer accessible.",
+        "Some commands (such as $bauth$b and $bbind$b) will not let you unbind their last binding -- for obvious reasons.",
+        "$uSee Also:$u bind");
+"timecmd" ("/msg $S TIMECMD <command and args>",
+        "Reports how long it takes to run the specified command.");
+"command" ("/msg $S COMMAND <Befehl>", 
+        "Zeigt die Einschränkungen, wer den Befehl wie verwenden darf.");
+"modcmd" ("/msg $S MODCMD <command> [<option> <newval> ...]",
+        "Displays options for the specified command, or changes the options and values listed.  The command name may be prefixed with $bServiceNick.$b to specify another service's command (for example, $N.AUTH to refer to the auth command).",
+        "Supported options are:",
+        "  FLAGS          Comma-separated, +/- prefixed list of flags to add or remove.",
+        "  CHANNEL_ACCESS Minimum ChanServ access.",
+        "  OPER_ACCESS    Minimum OpServ access.",
+        "  ACCOUNT_FLAGS  Account flags to require or deny (for example, +R-S)",
+        "See the $bmodcmd flags$b help entry for a list of supported flags.");
+"modcmd flags" ("The following flags are supported for commands:",
+        "  ACCEPTCHAN     Treat a normal channel name (if specified) as the context for the command",
+        "  ACCEPTPLUSCHAN Accept modeless channel names as well as normal channel names",
+        "  AUTHED         Require that the user be authed to use the command",
+        "  CHANNEL        Require that an existing channel be given as the context",
+        "  CHANUSER       Require that the user have $C access to the context",
+        "  DISABLED       Command is disabled",
+        "  HELPING        Require that the user have security override enabled",
+        "  IGNORE_CSUSPEND  Allow a +REGCHAN command to work even if the channel is suspended",
+        "  JOINABLE       Require that the user have $C access to the channel, be in the channel, or be network staff to use the command",
+        "  KEEPBOUND      Do not let the last instance of the command be removed",
+        "  LOGHOSTMASK    Log the user's ident, hostname and IP (as well as nick and account name)",
+        "  NOLOG          Do not log the command at all",
+        "  NETWORKHELPER  Allow network helpers to use the command",
+        "  OPER           Allow opers to use the command",
+        "  QUALIFIED      Require $b/msg Service@$s$b addressing when using the command",
+        "  REGCHAN        Require a registered channel to be give as the context",
+        "  SUPPORTHELPER  Allow support helpers to use the command",
+        "  TOY            Command is a toy (cannot be invoked on a channel from outside the channel)",
+        "Note: If any of SUPPORTHELPER, NETWORKHELPER, OPER, any of the specified flags is considered sufficient.  For example, NETWORKHELPER and OPER both specified means both network helpers and opers can use the command.");
+"joiner" ("/msg $S JOINER [subcmd ...]",
+        "Magically looks up subcommands and redirects to them.  Use the command by itself to see what subcommands are known.");
+"stats modules" ("/msg $S STATS MODULES [modulename]",
+        "With no module name argument, shows a list of loaded modules and brief statistics for each.",
+        "When a module name is given, shows commands exported by that module.",
+        "$uSee Also:$u stats services, command, modcmd, bind");
+"stats services" ("/msg $S STATS SERVICES [botnick]",
+        "With no bot nick argument, shows a list of the service bots using the unified command framework, and brief statistics for each.",
+        "When a bot nick is given, shows commands bound to that service.",
+        "$uSee Also:$u stats modules, command, modcmd, bind, unbind");
+"showcommands" ("/msg $S SHOWCOMMANDS [opserv-access] [channel-access]",
+        "Shows commands which you can execute (with their required access levels).  If you give a numeric $O access level or text $C access name, it further restricts output to only show commands which can be executed by users with that access.",
+        "$uSee Also:$u command");
+"helpfiles" ("/msg $S HELPFILES <service> [module list]",
+        "With only a service nick, shows the helpfiles used by that service.",
+        "With a list of modules, sets the order that the service will look up non-command help entries.",
+        "$uSee Also:$u bind, unbind");
+"service add" ("/msg $S SERVICE ADD <nick> <description>",
+        "Creates a new service bot.",
+        "$uSee Also:$u service rename, service trigger, service remove");
+"service rename" ("/msg $S SERVICE RENAME <oldnick> <newnick>",
+        "Renames a service bot.  Currently does not support the default services.",
+        "$uSee Also:$u service add, service trigger, service remove");
+"service trigger" ("/msg $S SERVICE TRIGGER <nick> [remove|<trigger>]",
+        "Sets or clears the trigger character that the named service uses to identify in-channel messages directed at it.",
+        "To remove a trigger, use the word $bremove$b (or $bnone$b) as the argument.  Otherwise, the first letter of the argument will be used as the new trigger.",
+        "If no argument is given, shows the current trigger for the service.",
+        "$uSee Also:$u service add, service rename, service remove");
+"service remove" ("/msg $S SERVICE REMOVE <nick> [<quit reason>]",
+        "Destroys a service.  If a default service is named, it will be recreated when srvx restarts.",
+        "$uSee Also:$u service add, service rename, service trigger");
+"version" ("/msg $S version",
+        "Sendet dir Informationen über die Software und das Copyright.");
diff --git a/languages/de/nickserv.help b/languages/de/nickserv.help
new file mode 100644 (file)
index 0000000..82bfac1
--- /dev/null
@@ -0,0 +1,523 @@
+"<INDEX>" {
+        "/services/nickserv/disable_nicks" {
+        "/services/nickserv/email_enabled" (
+                "$b$N Hilfe$b",
+                "$b$N$b ist ein Service, welcher dazu dient, die Accounts aller User zu verwalten. $b$C$b, $b$O$b und $b$G$b greifen alle auf $b$N$b zu, um sicherzustellen, dass User ihren Channel Access haben und niemand den Channel Access von jemand anderem benutzen kann.",
+                "$b$N$b's Kategorien sind:",
+                "  ACCOUNT    Account Management.",
+                "  NOT NICKSERV   Beschreibung, was dieser Service macht und auch nicht macht.",
+                "  EMAIL      Alle Befehle, die Emails betreffen.",
+                "  OTHERS     Andere Befehle.",
+                "  COMMANDS   Liste aller verfügbaren Befehle."
+        );
+        "!/services/nickserv/email_enabled" (
+                "$b$N Hilfe$b",
+                "$b$N$b ist ein Service, welcher dazu dient, die Accounts aller User zu verwalten. $b$C$b, $b$O$b und $b$G$b greifen alle auf $b$N$b zu, um sicherzustellen, dass User ihren Channel Access haben und niemand den Channel Access von jemand anderem benutzen kann.",
+               "$b$N$b's Kategorien sind:",
+               "  ACCOUNT    Account Management.",
+                "  NOT NICKSERV   Beschreibung, was dieser Service macht und auch nicht macht.",
+               "  OTHERS     Andere Befehle.",
+                "  COMMANDS   Liste aller verfügbaren Befehle."
+        );
+        };
+        "!/services/nickserv/disable_nicks" {
+        "/services/nickserv/email_enabled" (
+                "$b$N Hilfe$b",
+                "$b$N$b ist ein Service, welcher dazu dient, die Nicknamen und Accounts aller User zu verwalten. $b$C$b, $b$O$b und $b$G$b greifen alle auf $b$N$b zu, um sicherzustellen, dass User ihren Channel Access haben und niemand den Channel Access von jemand anderem benutzen kann.",
+               "$b$N$b's Kategorien sind:",
+               "  ACCOUNT    Account Management.",
+                "  NICK       Nick Management.",
+                "  EMAIL      Alle Befehle, die Emails betreffen.",
+               "  OTHERS     Andere Befehle.",
+                "  COMMANDS   Liste aller verfügbaren Befehle."
+        );
+        "!/services/nickserv/email_enabled" (
+                "$b$N Hilfe$b",
+                "$b$N$b ist ein Service, welcher dazu dient, die Nicknamen und Accounts aller User zu verwalten. $b$C$b, $b$O$b und $b$G$b greifen alle auf $b$N$b zu, um sicherzustellen, dass User ihren Channel Access haben und niemand den Channel Access von jemand anderem benutzen kann.",
+               "$b$N$b's Kategorien sind:",
+               "  ACCOUNT    Account Management.",
+                "  NICK       Nick Management.",
+               "  OTHERS     Andere Befehle.",
+                "  COMMANDS   Liste aller verfügbaren Befehle."
+        );
+        };
+};
+
+"HANDLE" ("Der Begriff $uHandle$u von früheren Versionen war für viele User verwirrend.  Daher verwenden wir nun $uAccount$u anstatt $uHandle$u.");
+
+"ACCOUNT" {
+        "/services/nickserv/enable_ghost" (
+                "Anhand deines Accounts erkennt dich $b$C$b und weiß, welchen Access du in einem Channel hast.  Diese Accounts sind den IRC Nicknamen sehr ähnlich, allerdings haben sie nur für die Services Bedeutung.  Solange du nicht mit einem Account bei $b$N$b eingeloggt bist, kannst du nur die Befehle $bREGISTER$b und $bAUTH$b verwenden.",
+                "Account Management Befehle sind:",
+                "  REGISTER   Registrieren eines neuen Accounts.",
+                "  AUTH       Einloggen mit einem registrierten Account bei $b$N$b.",
+                "  PASS       Ändern des Passworts.",
+                "  ADDMASK    Fügt deinem Account eine Hostmask hinzu.",
+                "  DELMASK    Löscht eine Hostmask von deinem Account.",
+                "  SET        Setzt verschiedene Account Optionen.",
+                "  UNREGISTER Löscht einen Account.",
+                "  GHOST      Killt alte eingeloggte Clients.",
+                "  ACCOUNT FLAGS Definitionen der Account Flags."
+        );
+        "!/services/nickserv/enable_ghost" (
+                "Anhand deines Accounts erkennt dich $b$C$b und weiß, welchen Access du in einem Channel hast.  Diese Accounts sind den IRC Nicknamen sehr ähnlich, allerdings haben sie nur für die Services Bedeutung.  Solange du nicht mit einem Account bei $b$N$b eingeloggt bist, kannst du nur die Befehle $bREGISTER$b und $bAUTH$b verwenden.",
+                "Account Management Befehle sind:",
+                "  REGISTER   Registrieren eines neuen Accounts.",
+                "  AUTH       Einloggen mit einem registrierten Account bei $b$N$b.",
+                "  PASS       Ändern des Passworts.",
+                "  ADDMASK    Fügt deinem Account eine Hostmask hinzu.",
+                "  DELMASK    Löscht eine Hostmask von deinem Account.",
+                "  SET        Setzt verschiedene Account Optionen.",
+                "  UNREGISTER Löscht einen Account.",
+                "  ACCOUNT FLAGS Definitionen der Account Flags."
+        );
+};
+
+"NOT NICKSERV" {
+        "/services/nickserv/disable_nicks" (
+        "$bNOT NICKSERV$b",
+        "Dieser $b$N$b ist kein Standard NickServ.",
+        "Die meisten NickServ Bots bieten \"Nick Ownership\", also Besitz eines Nicknamens an und erlauben dir, falls jemand deinen Nicknamen benutzt, diesen zu /KILLen oder dessen Nicknamen gewaltsam zu ändern.",
+        "Dieser $b$N$b wird das nicht ermöglichen.  $b$N$b erlaubt \"nur\", einen $bAccount$b zu registrieren, an welchem $b$C$b die einzelnen User erkennt.  Man kann eigentlich sagen, dass ein Account ein virtueller Nickname ist.  Wenn du dich bei $b$N$b einloggst, ist es vollkommen egal, welchen IRC Nicknamen du gerade benutzt.",
+        "$b$N$b kann dir sagen, welchen Account ein anderer User benutzt. Dazu musst du einfach den $bUSERINFO$b Befehl benutzen.  Falls du Probleme mit dem Registrieren eines Accounts oder generell mit $b$N$b hast, solltest du in #support um Hilfe bitten."
+        );
+};
+
+"OUNREGISTER" {
+        "/services/nickserv/disable_nicks" (
+        "/msg $N OUNREGISTER <Nick|*Account>",
+        "Löscht den angegebenen Account.",
+        "Du kannst *Account statt Nick verwenden. Das * Zeichen bedeutet, dass $N direkt den Account benutzt (nützlich, falls der User nicht online ist).",
+        "$uSiehe auch:$u oregister"
+        );
+        "!/services/nickserv/disable_nicks" (
+        "/msg $N OUNREGISTER <Nick|*Account>",
+        "Löscht den angegebenen Account und alle Nicknamen, welche auf den Account registriert wurden.",
+        "Du kannst *Account statt Nick verwenden. Das * Zeichen bedeutet, dass $N direkt den Account benutzt (nützlich, falls der User nicht online ist).",
+        "$uSiehe auch:$u oregister, oregnick, ounregnick"
+        );
+};
+
+"UNREGISTER" {
+        "/services/nickserv/disable_nicks" (
+        "/msg $N@$s UNREGISTER <Passwort>",
+        "Löscht den Account, mit dem du eingeloggt bist.",
+        "$uSiehe auch:$u register"
+        );
+        "!/services/nickserv/disable_nicks" (
+        "/msg $N@$s UNREGISTER <Passwort>",
+        "Löscht den Account, mit dem du eingeloggt bist und alle Nicknamen, welche auf den Account registriert wurden.",
+        "$uSiehe auch:$u register, regnick, unregnick"
+        );
+};
+
+"NICK" {
+        "!/services/nickserv/disable_nicks" (
+        "Du kannst dir Nicknamen registrieren. Dadurch wird es möglich, den User zu /KILLen, der einen deiner Nicknamen benutzt.",
+       "Nick Management Befehle sind:",
+        "  NICKINFO   Findet heraus, wer einen bestimmten Nicknamen registriert hat.",
+        "  REGNICK    Registriert einen Nicknamen.",
+        "  UNREGNICK  Löscht einen Nicknamen.",
+        "  RECLAIM    Fordert einen Nicknamen zurück, der dir gehört."
+        );
+};
+
+"NICKINFO" {
+        "!/services/nickserv/disable_nicks" (
+        "/msg $N NICKINFO <Nick>",
+        "Zeigt Informationen über den Nicknamen an.",
+        "$uSiehe auch:$u accountinfo, userinfo"
+        );
+};
+
+"REGNICK" {
+        "!/services/nickserv/disable_nicks" (
+        "/msg $N REGNICK ",
+        "Registriert den Nicknamen, den du zur Zeit benutzt.",
+        "$uSiehe auch:$u register, unregister, unregnick"
+        );
+};
+
+"OREGNICK" {
+        "!/services/nickserv/disable_nicks" (
+        "/msg $N OREGNICK [<Nick|*Account>, <Nick>]",
+        "Registriert den angegebenen Nicknamen zu dem Account. Falls kein Nickname und Account angegeben werden, registriert $boregnick$b deinen jetzigen Nick auf den Account, mit dem zu gerade eingeloggt bist.",
+        "Du kannst *Account statt Nick verwenden. Das * Zeichen bedeutet, dass $N direkt den Account benutzt (nützlich, falls der User nicht online ist).",
+        "$uSiehe auch:$u oregister, ounregister, ounregnick"
+        );
+};
+
+"OUNREGNICK" {
+        "!/services/nickserv/disable_nicks" (
+        "/msg $N OUNREGNICK <Nick>",
+        "Löscht einen registrierten Nicknamen.",
+        "$uSiehe auch:$u oregister, oregnick, ounregister"
+        );
+};
+
+"UNREGNICK" {
+        "!/services/nickserv/disable_nicks" (
+        "/msg $N UNREGNICK [Nick]",
+        "Löscht einen Nicknamen, der an dich registriert ist.  Wenn kein Nickname angegeben wird, wird dein aktueller Nickname gelöscht.",
+        "$uSiehe auch:$u register, regnick, unregister"
+        );
+};
+
+"RECLAIM" {
+        "!/services/nickserv/disable_nicks" (
+        "/msg $N RECLAIM <Nick>",
+        "Fordert den angegebenen Nicknamen zurück. Du musst mit dem Account eingeloggt sein, zu dem der Nickname gehört.",
+        "Ausgehend von der Konfiguration, wird nichts passieren; wird der User gefragt, ob er den Nicknamen ändern könnte; wird dessen Nickname geändert oder der User wird per /KILL disconnected."
+        );
+};
+
+"EMAIL" {
+        "/services/nickserv/email_enabled" (
+        "Email-basierende Befehle sind:",
+        "  AUTHCOOKIE Mailt ein Cookie, damit du dich auch ohne passende Hostmask authen kannst.",
+        "  RESETPASS  Mailt ein Cookie, falls du dein Passwort vergessen hast und es daher ändern möchtest.",
+        "  COOKIE     Schließt den AUTHCOOKIE oder RESETPASS Prozess ab.",
+        "  DELCOOKIE  Löscht das AUTHCOOKIE oder RESETPASS Cookie.",
+        "  EMAIL POLICY  Gibt die Verfahrensweise bezüglich der bei den Accounts angegebenen Email Adressen an."
+        );
+};
+
+"AUTHCOOKIE" {
+        "/services/nickserv/email_enabled" (
+        "/msg $N AUTHCOOKIE <Account>",
+        "Durch diesen Befehl sendet $N dir eine Email mit einem Cookie, welches dir erlaubt, dich mit deinem Account einzuloggen, auch wenn du keine gültige Hostmask für den Account hast. Zum Beispiel, wenn dein Internet Provider deine IP geändert hat.",
+        "Wenn du die Email bekommen hast, kannst du das Cookie in der Email mit dem $bcookie$b Befehl eingeben, um dich einzuloggen.",
+        "$uSiehe auch:$u cookie, delcookie"
+        );
+};
+
+"RESETPASS" {
+        "/services/nickserv/email_enabled" (
+        "/msg $N@$s RESETPASS <Account> <NeuesPasswort>",
+        "Durch diesen Befehl sendet $N dir eine Email mit einem Cookie, welches nach der Eingabe dein Passwort ändert (falls du mal dein Passwort vergessen haben solltest).  Wenn du die Email bekommen hast, kannst du das Cookie in der Email mit dem $bcookie$b Befehl eingeben, um das Passwort zu ändern.",
+        "$bDas Passwort wird solange nicht geändert, daher wird es nicht möglich sein, sich mit dem neuen Passwort einzuloggen, bis das Cookie der Email durch den $ucookie$u Befehl eingegeben wurde.$b",
+        "$uSiehe auch:$u cookie, delcookie"
+        );
+};
+
+"DELCOOKIE" {
+        "/services/nickserv/email_enabled" (
+        "/msg $N DELCOOKIE",
+        "Mit diesem Befehl löscht $N ein $bauthcookie$b oder $bresetpass$b Cookie.",
+        "(Da zum Ändern der Email Adresse und der Account Registrierung gültige Email Adressen benötigt werden, von denen wir nicht wissen, ob sie dir gehören, ist es nicht möglich, solche Cookies zu löschen (um Mail Flooding zu vermeiden).",
+        "$uSiehe auch:$u authcookie, resetpass, cookie"
+        );
+};
+
+"COOKIE" {
+        "/services/nickserv/email_enabled" (
+        "/msg $N@$s COOKIE <Account> <Cookie>",
+        "Mit diesem Befehl kannst du das Cookie eingeben, welches du per Mail bekommen hast, z.B. nach dem Registrieren des Accounts oder Ändern der Email Adresse.  Das Cookie ist nach der Benutzung unbrauchbar und kann nicht ein zweites Mal verwendet werden.",
+        "$uSiehe auch:$u authcookie, resetpass, set, delcookie"
+        );
+};
+
+"EMAIL POLICY" {
+        "/services/nickserv/email_enabled" (
+        "$bEMAIL POLICY",
+        "GameSurge behandelt deine Email Adresse vertraulich.  Wir werden diese nicht an dritte Parteien herausgeben, es sei denn, uns liegt dafür ein Gerichtsbeschluss vor."
+        );
+};
+
+"OTHERS" ("Andere Befehle sind:",
+        
+        "  ACCOUNTINFO Zeigt Informationen über einen Account.",
+        "  HELP        Zeigt Hilfe über $b$N$b an.",  
+        "  MERGE       Kopiert einen Account in einen Anderen.",
+        "  MERGEDB     Lädt die Datenbank in den Speicher.",
+        "  RENAME      Ändert den Namen eines Accounts.",
+        "  SEARCH      Sucht nach Accounts.",
+        "  STATUS      $b$N$b's Status.",
+        "  USERINFO    Zeigt den Account an, mit dem ein User eingeloggt ist.",        
+        "  VERSION     $b$N$b's Version.");
+
+"ADDMASK" ("/msg $N ADDMASK [User@Host]",
+        "Fügt dem Account, mit dem du bei $b$N$b eingeloggt bist, die angegebene Hostmask (User@Host) hinzu.  Falls keine Hostmask angegeben wird, wird deine aktuelle Hostmask hinzugefügt.",
+        "$uSiehe auch:$u auth, delmask");
+        
+"ALLOWAUTH" ("/msg $N ALLOWAUTH <Nick> [Account] [STAFF]",
+        "Erlaubt dem angegebenen User, sich mit dem angegebenen Account einzuloggen ($bauth$ben). $bAllowauth$b fügt dem Account NICHT die aktuelle Hostmask zu, daher sollte der User nach dem Allowauth $bADDMASK$b benutzen.",
+        "Falls kein Account angegeben wurde, wird die Erlaubnis wieder zurückgezogen (falls der User einen Allowauth bekommen hat).",
+        "Falls es sich bei dem Account um einen Helper oder Oper Account handelt, muss am Ende des Befehls STAFF stehen.",
+        "$uSiehe auch:$u addmask, auth");
+        
+"AUTH" {
+        "/services/nickserv/email_enabled" (
+        "/msg $N@$s AUTH [Account] <Passwort>",
+        "Loggt dich mit dem angegebenen Account bei $b$N$b ein. Du musst dich erst einloggen ($bauth$ben), bevor du in irgendeinem mit $b$C$b registrierten Channel Access bekommen kannst.",
+        "Wenn kein Account angegeben wird, wird der aktuelle Nickname als Accountname verwendet.",
+        "$uSiehe auch:$u pass, resetpass, authcookie",
+        );
+        "!/services/nickserv/email_enabled" (
+        "/msg $N@$s AUTH [Account] <Passwort>",
+        "Loggt dich mit dem angegebenen Account bei $b$N$b ein. Du musst dich erst einloggen ($bauth$ben), bevor du in irgendeinem mit $b$C$b registrierten Channel Access bekommen kannst.",
+        "Wenn kein Account angegeben wird, wird der aktuelle Nickname als Accountname verwendet.",
+        "$uSiehe auch:$u pass",
+        );
+};
+
+"DELMASK" ("/msg $N DELMASK <User@Host>",
+        "Löscht die angegebene Hostmask von dem Account, mit dem du eingeloggt bist.",
+        "Ein Account muss mindestens eine Hostmask besitzen, daher kannst du die letzte Hostmask nicht löschen.",
+        "$uSiehe auch:$u addmask");
+        
+"ACCOUNTINFO" {
+        "/services/nickserv/disable_nicks" (
+        "/msg $N ACCOUNTINFO <Nick|*Account>",
+        "Zeigt Informationen über einen Account an, z.B. Datum, an dem der Account registriert wurde, wann der User das letzte Mal mit dem Account eingeloggt war, die Infoline eines Accounts, die Flags, die Hostmask(s), die Channel und den Nicknamen des Users, wenn dieser eingeloggt ist.",
+        "Du kannst *Account statt Nick verwenden. Das * Zeichen bedeutet, dass $N direkt den Account benutzt (nützlich, falls der User nicht online ist).",
+        "$uSiehe auch:$u userinfo, account flags"
+        );
+        "!/services/nickserv/disable_nicks" (
+        "/msg $N ACCOUNTINFO <Nick|*Account>",
+        "Zeigt Informationen über einen Account an, z.B. Datum, an dem der Account registriert wurde, wann der User das letzte Mal mit dem Account eingeloggt war, die $b$N$b Infoline eines Accounts, die Flags, die Hostmask(s), die Channel und den Nicknamen des Users, wenn dieser eingeloggt ist.",
+        "Du kannst *Account statt Nick verwenden. Das * Zeichen bedeutet, dass $N direkt den Account benutzt (nützlich, falls der User nicht online ist).",
+        "$uSiehe auch:$u nickinfo, userinfo, account flags"
+        );
+};
+
+"ACCOUNT FLAGS" ("$bACCOUNT FLAGS$b",
+        "Die folgenden Account Flags sind gültig:",
+        "$bS$b  $O Access ist suspendiert",
+        "$bp$b  Services benutzen PRIVMSG statt NOTICE für alle Nachrichten",
+        "$bh$b  User ist ein Support Helper (dieser muss im Support Channel sein, um Security Override zu bekommen)",
+        "$bH$b  User ist ein Network Helper (kann Security Override aktivieren/deaktivieren)",
+        "$bg$b  God Mode (Security Override für IRC Staff)",
+        "$bs$b  Account ist suspendiert",
+        "$bc$b  mIRC Farb Codes werden in den Nachrichten der Services verwendet",
+        "$bf$b  Account ist im Urlaubsmodus (Account wird nicht wegen Inaktivität gelöscht. Urlaubsmodus deaktiviert sich beim nächsten Einloggen wieder)",
+        "$bn$b  No-Delete (Account wird nie wegen Inaktivität gelöscht)",
+        "$uSiehe auch:$u accountinfo, set");
+        
+"OADDMASK" ("/msg $N OADDMASK <Nick|*Account> <User@Host>",
+        "Fügt dem Account die angegebene Hostmask (User@Host) hinzu.",
+        "Du kannst *Account statt Nick verwenden. Das * Zeichen bedeutet, dass $N direkt den Account benutzt (nützlich, falls der User nicht online ist).",
+        "$uSiehe auch:$u odelmask");
+        
+"ODELMASK" ("/msg $N ODELMASK <Nick|*Account> <User@Host>",
+        "Löscht die angegebene Hostmask von dem Account.",
+        "Ein Account muss mindestens eine Hostmask besitzen, daher kannst du die letzte Hostmask nicht löschen.",
+        "Du kannst *Account statt Nick verwenden. Das * Zeichen bedeutet, dass $N direkt den Account benutzt (nützlich, falls der User nicht online ist).",
+        "$uSiehe auch:$u oaddmask");
+        
+"OREGISTER" {
+        "/services/nickserv/disable_nicks" (
+        "/msg $N@$s OREGISTER <Account> <Passwort> [User@Host|Nick]",
+        "Registriert einen Account bei $b$N$b und benutzt den angegebenen Accountnamen, das Passwort und die Hostmask (User@Host). Wenn ein Nickname anstelle von der Hostmask angegeben wird, wird die User@Host von dem User verwendet. Falls weder eine Hostmask noch ein Nickname angegeben werden, wird eine Default Hostmask verwendet, wenn sich der User einloggt.",
+        "$uSiehe auch:$u ounregister"
+        );
+        "!/services/nickserv/disable_nicks" (
+        "/msg $N@$s OREGISTER <Account> <Passwort> [User@Host|Nick]",
+        "Registriert einen Account bei $b$N$b und benutzt den angegebenen Accountnamen, das Passwort und die Hostmask (User@Host). Wenn ein Nickname anstelle von der Hostmask angegeben wird, wird die User@Host von dem User verwendet. Falls weder eine Hostmask noch ein Nickname angegeben werden, wird eine Default Hostmask verwendet, wenn sich der User einloggt.",
+        "$uSiehe auch:$u oregnick, ounregister, ounregnick"
+        );
+};
+
+"OSET" {
+        "/services/nickserv/disable_nicks" (
+        "/msg $N OSET <Nick|*Account> [<Einstellung> <Wert>]",
+        "Hiermit kann man die Einstellungen des Accounts verändern. Zusätzlich zu den normalen $bset$b Einstellungen, kann man folgendes setzen:",
+        "$bPASSWORD$b: Verändert das Passwort.",
+        "$bFLAGS$b: Verändert die Account Flags.",
+        "$bLEVEL$b: Verändert den $O Access Level.",
+        "$bEPITHET$b: Verändert die Beschreibung, die man mit dem ACCESS Befehl von $C bekommt.",
+        "Du kannst *Account statt Nick verwenden. Das * Zeichen bedeutet, dass $N direkt den Account benutzt (nützlich, falls der User nicht online ist).",
+        "$uSiehe auch:$u accountinfo, account flags, set, userinfo"
+        );
+        "!/services/nickserv/disable_nicks" (
+        "/msg $N OSET <Nick|*Account> [<Einstellung> <Wert>]",
+        "Hiermit kann man die Einstellungen des Accounts verändern. Zusätzlich zu den normalen $bset$b Einstellungen, kann man folgendes setzen:",
+        "$bPASSWORD$b: Verändert das Passwort.",
+        "$bFLAGS$b: Verändert die Account Flags.",
+        "$bLEVEL$b: Verändert den $O Access Level.",
+        "$bEPITHET$b: Verändert die Beschreibung, die man mit dem ACCESS Befehl von $C bekommt.",
+        "Du kannst *Account statt Nick verwenden. Das * Zeichen bedeutet, dass $N direkt den Account benutzt (nützlich, falls der User nicht online ist).",
+        "$uSiehe auch:$u accountinfo, account flags, nickinfo, set, userinfo"
+        );
+};
+
+"PASS" ("/msg $N@$s PASS <AltesPasswort> <NeuesPasswort>",
+        "Ändert dein $b$N$b Passwort.",
+        "$uSiehe auch:$u auth");
+
+"REGISTER" {
+        "0: /services/nickserv/email_required" (
+        "/msg $N@$s REGISTER <Account> <Passwort> <Email>",
+        "Registriert einen Account bei $b$N$b und fügt dem Account deine aktuelle Hostmask (User@Host) hinzu. Du musst das Passwort, welches du bei dem $bregister$b Befehl angibst auch beim späteren Einloggen ($bauth$ben) verwenden.",
+        "Es wird eine Email an die angegebene Email Adresse gesendet, in welcher ein Cookie steht, mit dem du den Account aktivieren kannst. Wenn du das Cookie bekommen hast, musst du den $bcookie$b Befehl benutzen, um die Registrierung abzuschließen.",
+        "$uSiehe auch:$u auth, unregister"
+        );
+        "1: /services/nickserv/email_enabled" (
+        "/msg $N@$s REGISTER <Account> <Passwort> [Email]",
+        "Registriert einen Account bei $b$N$b und fügt dem Account deine aktuelle Hostmask (User@Host) hinzu. Du musst das Passwort, welches du bei dem $bregister$b Befehl angibst auch beim späteren Einloggen ($bauth$ben) verwenden.",
+        "Wenn du eine Email Adresse angibst, wird eine Email an die angegebene Email Adresse gesendet, in welcher ein Cookie steht, mit dem du den Account aktivieren kannst. Wenn du das Cookie bekommen hast, musst du den $bcookie$b Befehl benutzen, um die Registrierung abzuschließen.",
+        "$uSiehe auch:$u auth, unregister"
+        );
+        "2: !/services/nickserv/email_enabled" (
+        "/msg $N@$s REGISTER <Account> <Passwort>",
+        "Registriert einen Account bei $b$N$b und fügt dem Account deine aktuelle Hostmask (User@Host) hinzu. Du musst das Passwort, welches du bei dem $bregister$b Befehl angibst auch beim späteren Einloggen ($bauth$ben) verwenden.",
+        "$uSiehe auch:$u auth, unregister"
+        );
+};
+
+"SET" {
+        "/services/nickserv/email_enabled && /services/nickserv/disable_nicks" (
+        "/msg $N SET [<Einstellung> [Wert]]",
+        "Hiermit kannst du die Einstellungen deines Accounts verändern. Mögliche Einstellungen sind:",
+        "$bANNOUNCEMENTS$b: Wenn aktiviert, bekommst du Community Ankündigungen via $G.",
+        "$bCOLOR$b: Wenn aktiviert, werden $b$N$b und $b$C$b $bbold$b und $uunderlines$u in den Nachrichten verwenden.",
+        "$bEMAIL$b: Ändert deine Email Adresse.",
+        "$bINFO$b:  Ändert deine Infoline, die ein anderer User per $baccountinfo$b Befehl sehen kann.",
+        "$bLANGUAGE$b: Ändert die Sprache, die die Services verwenden sollen.",
+        "$bPRIVMSG$b: Wenn aktiviert, werden $b$N$b und $b$C$b PRIVMSGs statt NOTICEs verwenden, um dir eine Nachricht zu schicken.",
+        "$bSTYLE$b: Ändert den Style der Channel Userliste. $bSTYLE$b kann entweder $bDef$b (Default) oder $bZoot$b sein.",
+        "$bTABLEWIDTH$b: Ändert die Länge für die an Tabellen formatierten Texte (Benutze 0 für den Default Wert).",
+        "$bWIDTH$b: Ändert die Länge der Texte, die dir srvx schickt (Benutze 0 für den Default Wert).",
+        "$bMAXLOGINS$b: Ändert die Anzahl der Clients, die gleichzeitig in den Account eingeloggt sein dürfen (Benutze 0 für den Default Wert).",
+        "$bset$b ohne irgendwelche Parameter listet die aktuellen Einstellungen auf.",
+        "$uSiehe auch:$u accountinfo, userinfo"
+        );
+        "/services/nickserv/email_enabled && !/services/nickserv/disable_nicks" (
+        "/msg $N SET [<Einstellung> [Wert]]",
+        "Hiermit kannst du die Einstellungen deines Accounts verändern. Mögliche Einstellungen sind:",
+        "$bANNOUNCEMENTS$b: Wenn aktiviert, bekommst du Community Ankündigungen via $G.",
+        "$bCOLOR$b: Wenn aktiviert, werden $b$N$b und $b$C$b $bbold$b und $uunderlines$u in den Nachrichten verwenden.",
+        "$bEMAIL$b: Ändert deine Email Adresse.",
+        "$bINFO$b:  Ändert deine $b$N$b Infoline, die ein anderer User per $baccountinfo$b Befehl sehen kann.",
+        "$bLANGUAGE$b: Ändert die Sprache, die die Services verwenden sollen.",
+        "$bPRIVMSG$b: Wenn aktiviert, werden $b$N$b und $b$C$b PRIVMSGs statt NOTICEs verwenden, um dir eine Nachricht zu schicken.",
+        "$bSTYLE$b: Ändert den Style der Channel Userliste. $bSTYLE$b kann entweder $bDef$b (Default) oder $bZoot$b sein.",
+        "$bTABLEWIDTH$b: Ändert die Länge für die an Tabellen formatierten Texte (Benutze 0 für den Default Wert).",
+        "$bWIDTH$b: Ändert die Länge der Texte, die dir srvx schickt (Benutze 0 für den Default Wert).",
+        "$bMAXLOGINS$b: Ändert die Anzahl der Clients, die gleichzeitig in den Account eingeloggt sein dürfen (Benutze 0 für den Default Wert).",
+        "$bset$b ohne irgendwelche Parameter listet die aktuellen Einstellungen auf.",
+        "$uSiehe auch:$u accountinfo, nickinfo, userinfo"
+        );
+        "!/services/nickserv/email_enabled && /services/nickserv/disable_nicks" (
+        "/msg $N SET [<Einstellung> [Wert]]",
+        "Hiermit kannst du die Einstellungen deines Accounts verändern. Mögliche Einstellungen sind:",
+        "$bANNOUNCEMENTS$b: Wenn aktiviert, bekommst du Community Ankündigungen via $G.",
+        "$bCOLOR$b: Wenn aktiviert, werden $b$N$b und $b$C$b $bbold$b und $uunderlines$u in den Nachrichten verwenden.",
+        "$bINFO$b:  Ändert deine $b$N$b Infoline, die ein anderer User per $baccountinfo$b Befehl sehen kann.",
+        "$bLANGUAGE$b: Ändert die Sprache, die die Services verwenden sollen.",
+        "$bPRIVMSG$b: Wenn aktiviert, werden $b$N$b und $b$C$b PRIVMSGs statt NOTICEs verwenden, um dir eine Nachricht zu schicken.",
+        "$bSTYLE$b: Ändert den Style der Channel Userliste. $bSTYLE$b kann entweder $bDef$b (Default) oder $bZoot$b sein.",
+        "$bTABLEWIDTH$b: Ändert die Länge für die an Tabellen formatierten Texte (Benutze 0 für den Default Wert).",
+        "$bWIDTH$b: Ändert die Länge der Texte, die dir srvx schickt (Benutze 0 für den Default Wert).",
+        "$bMAXLOGINS$b: Ändert die Anzahl der Clients, die gleichzeitig in den Account eingeloggt sein dürfen (Benutze 0 für den Default Wert).",
+        "$bset$b ohne irgendwelche Parameter listet die aktuellen Einstellungen auf.",
+        "$uSiehe auch:$u accountinfo, userinfo"
+        );
+        "!/services/nickserv/email_enabled && !/services/nickserv/disable_nicks" (
+        "/msg $N SET [<Einstellung> [Wert]]",
+        "Hiermit kannst du die Einstellungen deines Accounts verändern. Mögliche Einstellungen sind:",
+        "$bANNOUNCEMENTS$b: Wenn aktiviert, bekommst du Community Ankündigungen via $G.",
+        "$bCOLOR$b: Wenn aktiviert, werden $b$N$b und $b$C$b $bbold$b und $uunderlines$u in den Nachrichten verwenden.",
+        "$bINFO$b:  Ändert deine $b$N$b Infoline, die ein anderer User per $baccountinfo$b Befehl sehen kann.",
+        "$bLANGUAGE$b: Ändert die Sprache, die die Services verwenden sollen.",
+        "$bPRIVMSG$b: Wenn aktiviert, werden $b$N$b und $b$C$b PRIVMSGs statt NOTICEs verwenden, um dir eine Nachricht zu schicken.",
+        "$bSTYLE$b: Ändert den Style der Channel Userliste. $bSTYLE$b kann entweder $bDef$b (Default) oder $bZoot$b sein.",
+        "$bTABLEWIDTH$b: Ändert die Länge für die an Tabellen formatierten Texte (Benutze 0 für den Default Wert).",
+        "$bWIDTH$b: Ändert die Länge der Texte, die dir srvx schickt (Benutze 0 für den Default Wert).",
+        "$bMAXLOGINS$b: Ändert die Anzahl der Clients, die gleichzeitig in den Account eingeloggt sein dürfen (Benutze 0 für den Default Wert).",
+        "$bset$b ohne irgendwelche Parameter listet die aktuellen Einstellungen auf.",
+        "$uSiehe auch:$u accountinfo, nickinfo, userinfo"
+        );
+};
+
+"STATUS" {
+        "/services/nickserv/disable_nicks" (
+        "/msg $N STATUS",
+        "Zeigt den Status von $b$N$b, das heißt wieviele Accounts registriert sind."
+        );
+        "!/services/nickserv/disable_nicks" (
+        "Zeigt den Status von $b$N$b, das heißt wieviele Accounts und Nicknamen registriert sind und wieviele Nicknamen auf deinen Account registriert sind (wenn du eingeloggt bist)."
+        );
+};
+
+"USERINFO" ("/msg $N USERINFO <Nick>",
+        "Zeigt an, mit welchem Account ein User eingeloggt ist.",
+        "$uSiehe auch:$u auth, accountinfo");
+               
+"GHOST" ("/msg $N GHOST <Nick>",
+        "Dieser Befehl disconnected einen alten Client, welcher mit deinem Account eingeloggt ist (Ghost).  Dies ist $bnicht$b das gleiche wie Nick Ownership. Der User $bmuss$b mit dem Account eingeloggt sein, mit dem du auch eingeloggt bist.",
+        "$uSiehe auch:$u auth");
+        
+"RENAME" ("/msg $N RENAME <Nick|*Alter-Account> <Neuer-Account>",
+        "Ändert den Namen eines Accounts.",
+        "Dieser Befehl steht nur Helpern und IRC Operatoren zur Verfügung.",
+        "$uSiehe auch:$u merge");
+        
+"VACATION" ("/msg $N VACATION",
+        "Der Account wird in den \"Urlaubsmodus\" gesetzt, bis du dich das nächste Mal bei $N einloggst.",
+        "Während der Account im \"Urlaubsmodus\" ist, wird der Account wegen Inaktivität nicht gelöscht.");
+        
+"SEARCH" ("/msg $N SEARCH <Aktion> <Kriterium> <Wert> [<Kriterium> <Wert>]...",
+        "Sucht nach Accounts, die mit den angegebenen Kriterien übereinstimmen und führt dann die Aktion aus.",
+        "$uSiehe auch:$u search action, search criteria");
+        
+"SEARCH ACTION" ("$bSEARCH ACTION$b",
+        "Die folgenden Aktionen sind gültig:",
+        "  PRINT      - Zeigt die Accounts, die den Kriterien entsprechen",
+        "  COUNT      - Zählt die Accounts, die den Kriterien entsprechen",
+        "  UNREGISTER - Löscht die Accounts, die den Kriterien entsprechen",
+        "$uSiehe auch:$u search, search criteria");
+        
+"SEARCH CRITERIA" {
+        "/services/nickserv/disable_nicks" (
+        "$bSEARCH CRITERIA$b",
+        "Die folgenden Kriterien sind gültig.  Jedes benötigt einen weiteren Parameter, welcher das eigentliche Kriterium enthält:",
+        "  LIMIT      - Limitiert die Anzahl der Treffer",
+        "  FLAGS      - Account Flags bei einem Account, welche aktiviert (e.g. +h) und/oder deaktiviert (e.g. -S) sein müssen",
+        "  REGISTERED - Zeit, die ein Account registriert ist (<Nu, <=Nu, =Nu, >=Nu oder >Nu)",
+        "  SEEN       - Accounts, in die sich für die Zeit niemand eingeloggt hat",
+        "  ACCOUNTMASK - Accounts, deren Namen auf das Kriterium passt",
+        "  EMAIL      - Accounts, deren Email auf das Kriterium passt",
+        "  HOSTMASK SUPERSET - Accounts, bei denen sich jemand mit der Hostmask authen kann, die bei Kriterium angegeben ist",
+        "  HOSTMASK EXACT - Accounts, bei denen die exakte Hostmask gesetzt ist, die bei Kriterium angegeben ist",
+        "  HOSTMASK SUBSET - Accounts, bei denen die Hostmask gesetzt ist, die bei Kriterium angegeben ist",
+       "  HOSTMASK LASTQUIT - Accounts, bei denen \"Letzte Quit Hostmask\" mit dem Kriterium übereinstimmt",
+        "  HOSTMASK   - Accounts, bei denen die Hostmask gesetzt ist, die bei Kriterium angegeben ist (genau wie HOSTMASK SUPERSET)",
+        "  ACCESS     - $O Access (<nnn, <=nnn, =nnn, >=nnn oder >nnn)",
+        "$uSiehe auch:$u search, search action"
+        );
+        "!/services/nickserv/disable_nicks" (
+        "$bSEARCH CRITERIA$b",
+        "Die folgenden Kriterien sind gültig.  Jedes benötigt einen weiteren Parameter, welcher das eigentliche Kriterium enthält:",
+        "  LIMIT      - Limitiert die Anzahl der Treffer",
+        "  FLAGS      - Account Flags bei einem Account, welche aktiviert (e.g. +h) und/oder deaktiviert (e.g. -S) sein müssen",
+        "  REGISTERED - Zeit, die ein Account registriert ist (<Nu, <=Nu, =Nu, >=Nu oder >Nu)",
+        "  SEEN       - Accounts, in die sich für die Zeit niemand eingeloggt hat",
+        "  ACCOUNTMASK - Accounts, deren Namen auf das Kriterium passt",
+        "  EMAIL      - Accounts, deren Email auf das Kriterium passt",
+        "  NICKMASK   - Accounts, deren Nicknamen mit dem Kriterium übereinstimmen",
+        "  HOSTMASK SUPERSET - Accounts, bei denen sich jemand mit der Hostmask authen kann, die bei Kriterium angegeben ist",
+        "  HOSTMASK EXACT - Accounts, bei denen die exakte Hostmask gesetzt ist, die bei Kriterium angegeben ist",
+        "  HOSTMASK SUBSET - Accounts, bei denen die Hostmask gesetzt ist, die bei Kriterium angegeben ist",
+       "  HOSTMASK LASTQUIT - Accounts, bei denen \"Letzte Quit Hostmask\" mit dem Kriterium übereinstimmt",
+        "  HOSTMASK   - Accounts, bei denen die Hostmask gesetzt ist, die bei Kriterium angegeben ist (genau wie HOSTMASK SUPERSET)",
+        "  ACCESS     - $O Access (<nnn, <=nnn, =nnn, >=nnn oder >nnn)",
+        "$uSiehe auch:$u search, search action"
+        );
+};
+
+"MERGE" ("/msg $N MERGE <Start-Nick|*Start-Account> <Ziel-Nick|*Ziel-Account>",
+        "Kopiert den Channel Access vom $bStart-Account$b zum $bZiel-Account$b.  Das beinhaltet Hostmasks, registrierte Nicknamen, eingeloggte User und $O Access (falls vorhanden).  Wenn $bZiel-Account$b gleich viel oder mehr Access hat als $bStart-Account$b (oder eine allgemeinere Hostmask, etc), dann behält $bZiel-Account$b diese Information.",
+        "Dieser Befehl steht nur Helpern und IRC Operatoren zur Verfügung.",
+        "$uSiehe auch:$u rename");
+        
+"MERGEDB" ("/msg $N MERGEDB <DBFilename>",
+        "Kopiert den Inhalt von $bDBFilename$b in den Speicher.  Jegliche Accounts, die in $bDBFilename$b als auch im Speicher sind, werden mit den Daten aus der Datei $bÜBERSCHRIEBEN$b.",
+        "Dieser Befehl steht nur IRC Operatoren zur Verfügung.",
+        "$uSiehe auch:$u write");
+
+"SET LANGUAGE" ("/msg $S set language <Sprache>",
+        "Ändert die Sprache, die $S und andere Services verwenden sollen, wenn sie dir Nachrichten schicken.",
+        "Falls eine Nachricht in deiner Sprache nicht vorhanden sein sollte, wird der naheliegendeste Treffer verwendet.",
+        "Unterstützte Sprachen sind: ${modcmd:languages}",
+        "$uSiehe auch:$u set");
\ No newline at end of file
diff --git a/languages/de/strings.db b/languages/de/strings.db
new file mode 100644 (file)
index 0000000..dc84e31
--- /dev/null
@@ -0,0 +1,550 @@
+"CSMSG_ACCESS_ALL_HEADER" "%s User von Level %d bis %d:";
+"CSMSG_ACCESS_SEARCH_HEADER" "%s User von Level %d bis %d mit %s:";
+"CSMSG_ACTION_INVALID" "$b%s$b ist eine ungültige Suchaktion.";
+"CSMSG_ADDED_USER" "%s wurde der %s Userliste mit Access %d hinzugefügt.";
+"CSMSG_ALREADY_DOWN" "Du hast weder Op noch Voice in $b%s$b.";
+"CSMSG_ALREADY_OPCHANNED" "Es gab kein Net.Join seit dem letzen Opchan in $b%s$b.";
+"CSMSG_ALREADY_OPPED" "Du hast bereits Op in $b%s$b.";
+"CSMSG_ALREADY_PRESENT" "%s ist bereits in $b%s$b.";
+"CSMSG_ALREADY_REGGED" "$b%s$b ist schon von jemand anderem registriert worden.";
+"CSMSG_ALREADY_SUSPENDED" "$b%s$b ist bereits suspendiert.";
+"CSMSG_ALREADY_VOICED" "Du hast bereits Voice in $b%s$b.";
+"CSMSG_BAD_DICE_COUNT" "%d sind zu viele Würfel.  Bitte benutze maximal %d.";
+"CSMSG_BAD_DIE_FORMAT" "Was genau soll $b%s$b sein ?  Bitte benutze eine einzelne Zahl oder das 4d6+3 Format.";
+"CSMSG_BAD_GIVEOPS" "GiveOps kann nicht niedriger sein als GiveVoice (%d).";
+"CSMSG_BAD_GIVEVOICE" "GiveVoice kann nicht höher sein als GiveOps (%d).";
+"CSMSG_BAD_MAX_LENGTH" "$b%s$b ist keine gültige maximale Länge (Sie muss zwischen 20 und 450 Zeichen liegen).";
+"CSMSG_BAD_NOTE_ACCESS" "$b%s$b ist kein gültiger Note Zugriffstyp.";
+"CSMSG_BAD_NOTE_TYPE" "Note Typ $b%s$b existiert nicht.";
+"CSMSG_BAD_NUMBER" "$b%s$b ist eine ungültige Zahl.  Bitte benutze eine Zahl, die größer als 1 ist.";
+"CSMSG_BAD_RANGE" "Ungültige Access Weite; Minimum (%d) muss größer als Maximum (%d) sein.";
+"CSMSG_BAD_SETLEVEL" "Du kannst keine Einstellungen verändern, die mehr Access erfordern als du hast.";
+"CSMSG_BAD_SETTERS" "Du kannst die Einstellung Setters nicht auf ein höheres als dein eigenes Level setzen.";
+"CSMSG_BAN_ADDED" "$b%s$b wurde permanent aus %s gebannt.";
+"CSMSG_BAN_DONE" "$b%s$b wurde aus %s gebannt.";
+"CSMSG_BAN_EXTENDED" "Der Ban für $b%s$b wird in %s automatisch gelöscht.";
+"CSMSG_BAN_NOT_FOUND" "Kein Ban für $b%s$b gefunden.";
+"CSMSG_BAN_REMOVED" "Passende Bans für $b%s$b gelöscht.";
+"CSMSG_BANLIST_FULL" "Die $b%s$b Ban Liste ist $bvoll$b.";
+"CSMSG_BANS_REMOVED" "Es wurden alle Channel Bans aus $b%s$b gelöscht.";
+"CSMSG_BURST_LENGTH" "$bLetzte Burst Länge:    $b%s";
+"CSMSG_CANNOT_SET" "Um diese Einstellung zu verändern, benötigst du ein höheres Access Level.";
+"CSMSG_CANNOT_TRIM" "Die Dauer muss mindestens 60 Sekunden betragen, um TRIM zu benutzen.";
+"CSMSG_CHAN_SUSPENDED" "$b$C$b wurde von $b%s$b temporär suspendiert (%s).";
+"CSMSG_CHANGED_ACCESS" "%s hat nun Access Level $b%d$b in %s.";
+"CSMSG_CHANNEL_BANS" "$bBan Anzahl:          $b%i";
+"CSMSG_CHANNEL_HISTORY" "Suspensionen der Vergangenheit für $b%s$b:";
+"CSMSG_CHANNEL_INFO" "$b%s$b Informationen:";
+"CSMSG_CHANNEL_MAX" "$bMax. Besucher:       $b%i";
+"CSMSG_CHANNEL_MODES" "$bMode Lock:           $b%s";
+"CSMSG_CHANNEL_NAMES" "User in $b%s$b:%s";
+"CSMSG_CHANNEL_NOTE" "$b%s:%*s$b%s";
+"CSMSG_CHANNEL_OPENED" "$b%s$b wurde geöffnet.";
+"CSMSG_CHANNEL_OPTIONS" "Channel Optionen:";
+"CSMSG_CHANNEL_OWNER" "$bOwner:               $b%s";
+"CSMSG_CHANNEL_REGISTERED" "$bRegistriert:         $bvor %s.";
+"CSMSG_CHANNEL_REGISTRAR" "$bRegistriert von:     $b%s";
+"CSMSG_CHANNEL_SEARCH_RESULTS" "Folgende Channel wurden gefunden:";
+"CSMSG_CHANNEL_SUSPENDED" "$b%s$b ist suspendiert:";
+"CSMSG_CHANNEL_SUSPENDED_0" " von %s: %s";
+"CSMSG_CHANNEL_SUSPENDED_1" " von %s; läuft in %s aus: %s";
+"CSMSG_CHANNEL_SUSPENDED_2" " von %s; lief vor %s aus: %s";
+"CSMSG_CHANNEL_SUSPENDED_3" " von %s; zurückgenommen vor %s: %s";
+"CSMSG_CHANNEL_SUSPENDED_4" " vor %s von %s: %s";
+"CSMSG_CHANNEL_SUSPENDED_5" " vor %s von %s; läuft in %s aus: %s";
+"CSMSG_CHANNEL_SUSPENDED_6" " vor %s von %s; lief vor %s aus: %s";
+"CSMSG_CHANNEL_SUSPENDED_7" " vor %s von %s; zurückgenommen vor %s: %s";
+"CSMSG_CHANNEL_TOPIC" "$bDefault Topic:       $b%s";
+"CSMSG_CHANNEL_USERS" "$bUser Anzahl:         $b%i";
+"CSMSG_CHANNEL_VISITED" "$bLetztmalig besucht:  $bvor %s.";
+"CSMSG_CHANNELS_EXPIRED" "%i Channel verfallen.";
+"CSMSG_CONFIRM_DEFAULTS" "Um %s's Einstellungen zu resetten, musst du 'set defaults %s' benutzen.";
+"CSMSG_CONFIRM_DELETEME" "Um deinen Access zu löschen, musst du 'deleteme %s' benutzen.";
+"CSMSG_CONFIRM_UNREG" "Um den Channel zu löschen, musst du 'unregister %s' benutzen.";
+"CSMSG_CTCPREACTION_KICK" "Kick bei unerlaubten CTCPs";
+"CSMSG_CTCPREACTION_KICKBAN" "Kickban bei unerlaubten CTCPs";
+"CSMSG_CTCPREACTION_LONGBAN" "Langfristiger Ban bei unerlaubten CTCPs";
+"CSMSG_CTCPREACTION_SHORTBAN" "Kurzfristiger Ban bei unerlaubten CTCPs";
+"CSMSG_DEFAULTED_MODES" "Channel Modi für $b%s$b wurden resetted.";
+"CSMSG_DELETED_USER" "%s (Access Level %d) wurde aus der %s Userliste gelöscht.";
+"CSMSG_DELETED_USERS" "Accounts mit $b%s$b mit Access von $b%d$b bis $b%d$b wurden von der %s Userliste gelöscht.";
+"CSMSG_DELETED_YOU" "Dein Access (Level $b%d$b) wurde aus $b%s$b gelöscht.";
+"CSMSG_DEOPPED_USERS" "User(n) in $b%s$b wurde Op weggenommen.";
+"CSMSG_DEVOICED_USERS" "User(n) in $b%s$b wurde Voice weggenommen.";
+"CSMSG_DICE_ROLL" "Die Gesamtsumme ist $b%d$b (von %dd%d+%d).";
+"CSMSG_DIE_ROLL" "$b%d$b wird auf dem %d-seitigen Würfel angezeigt.";
+"CSMSG_DNR_ACCOUNT" "Nur Netzwerk Staff darf einen Channel an $b%s$b registrieren.";
+"CSMSG_DNR_CHANNEL" "Nur Netzwerk Staff darf $b%s$b registrieren.";
+"CSMSG_DNR_CHANNEL_MOVE" "Nur Netzwerk Staff darf $b%s$b verschieben.";
+"CSMSG_DNR_INFO" "$b%s$b ist do-not-register (gesetzt von $b%s$b): %s";
+"CSMSG_DNR_INFO_SET" "$b%s$b ist do-not-register (gesetzt am %s von $b%s$b): %s";
+"CSMSG_DNR_REMOVED" "$b%s$b wurde von der do-not-register Liste gelöscht.";
+"CSMSG_DNR_SEARCH_RESULTS" "Die folgenden do-not-register Einträge wurden gefunden:";
+"CSMSG_DURATION_TOO_HIGH" "Die Dauer des Bans darf maximal 2 Jahre betragen.";
+"CSMSG_DURATION_TOO_LOW" "Die Dauer des Bans muss mindestens 15 Sekunden betragen.";
+"CSMSG_END_NAMES" "Ende von names in $b%s$b";
+"CSMSG_EVENT_SEARCH_RESULTS" "Die folgenden Channel Events wurden gefunden:";
+"CSMSG_GODMODE_UP" "Du darfst $b%s$b nicht verwenden, um dir Op zu geben, wenn du nicht auf der Userliste bist.  Benutze stattdessen den $bop$b Befehl.";
+"CSMSG_GREETING_TOO_LONG" "Das Greeting (zur Zeit $b%d$b Zeichen) muss weniger als $b%d$b Zeichen haben.";
+"CSMSG_HANDLE_UNREGISTERED" "Durch die Löschung deines Accounts wurde dein Access in allen Channeln gelöscht.";
+"CSMSG_HELPER_HAS_ACCESS" "%s hat Access Level $b%d$b in %s und $bSecurity Override$b aktiviert.";
+"CSMSG_HELPER_NO_ACCESS" "%s hat keinen Access in %s aber $bSecurity Override$b aktiviert.";
+"CSMSG_HUGGLES_HIM" "\ 1ACTION huggles %s\ 1";
+"CSMSG_HUGGLES_YOU" "\ 1ACTION huggles you\ 1";
+"CSMSG_ILLEGAL_CHANNEL" "$b%s$b ist ein illegaler Channel und kann daher nicht registriert werden.";
+"CSMSG_INCORRECT_ACCESS" "%s hat Access Level $b%d$b, nicht %s.";
+"CSMSG_INFOLINE_LIST" "Der Account $b%s$b hat in folgenden Channeln Access:";
+"CSMSG_INVALID_ACCESS" "$b%s$b ist ein ungültiger Access Level.";
+"CSMSG_INVALID_MODE_LOCK" "$b%s$b ist ein ungültiger Mode Lock.";
+"CSMSG_INVALID_NUMERIC" "$b%d$b ist nicht gültig.  Wähle:";
+"CSMSG_INVALID_OPTION" "$b%s$b ist keine gültige %s Option.";
+"CSMSG_INVALID_TRIM" "$b%s$b ist kein gültiges Trim Ziel.";
+"CSMSG_INVITED_USER" "$b%s$b wurde in %s eingeladen.";
+"CSMSG_INVITING_YOU" "$b%s$b hat dich in %s eingeladen.";
+"CSMSG_INVITING_YOU_REASON" "$b%s$b hat dich in %s eingeladen: %s";
+"CSMSG_IS_CHANSERV" "$b$C$b ist der $bChannel Service Bot$b.";
+"CSMSG_KICK_BAN_DONE" "$b%s$b wurde aus %s gekickt und gebannt.";
+"CSMSG_KICK_DONE" "$b%s$b wurde aus %s gekickt.";
+"CSMSG_LAME_MASK" "$b%s$b ist zu allgemein. Versuche, eine bessere Mask zu wählen.";
+"CSMSG_LAME_SMURF_TARGET" "%s ist ein IRC Operator.";
+"CSMSG_LAZY_SMURF_TARGET" "%s is %s ($bIRCOp$b; nicht eingeloggt).";
+"CSMSG_LOW_CHANNEL_ACCESS" "Du hast nicht genug Access in %s, um diesen Befehl auszuführen.";
+"CSMSG_MASK_BUT_NO_TOPIC" "Warnung: $b%s$b besitzt kein Default Topic, aber du hast die Topic Mask verändert.";
+"CSMSG_MASK_PROTECTED" "$b%s$b kann nicht gebannt werden, da ein User mit dieser Mask beschützt werden muss.";
+"CSMSG_MAXIMUM_BANS" "Es ist nicht möglich, mehr als $b%d$b Bans zu setzen.";
+"CSMSG_MAXIMUM_USERS" "Es ist nicht möglich, mehr als $b%d$b User zu adden.";
+"CSMSG_MERGE_NODELETE" "Du kannst keinen Channel mergen, der Nodelete ist.";
+"CSMSG_MERGE_NOT_OWNER" "Du musst der Owner des Channels (oder ein Helper) sein, um den Channel zu mergen.";
+"CSMSG_MERGE_SELF" "Die Channel können nicht gemerged werden, da der Ausgangs- und der Ziel Channel identisch sind.";
+"CSMSG_MERGE_SUCCESS" "Der Channel wurde erfolgreich mit $b%s$b gemerged.";
+"CSMSG_MERGE_SUSPENDED" "Die Channel können nicht gemerged werden, wenn der Ausgangs- oder der Ziel Channel suspendiert ist.";
+"CSMSG_MODE_LOCKED" "Mode Konflikte mit $b%s$b sind in %s nicht erlaubt.";
+"CSMSG_MODES_SET" "Channel Modi sind nun $b%s$b.";
+"CSMSG_MORE_DNRS" "%d weitere do-not-register Einträge wurden weggelassen.";
+"CSMSG_MOVE_NODELETE" "$b%s$b kann weder verschoben noch gelöscht werden.";
+"CSMSG_MOVE_SUCCESS" "Channel wurde in $b%s$b umbenannt.";
+"CSMSG_MULTIPLE_OWNERS" "Es gibt mehr als einen Owner in %s; bitte benutze $bCLVL$b, $bDELOWNER$b und/oder $bADDOWNER$b.";
+"CSMSG_MUST_BE_OPPED" "Du musst in $b%s$b Op haben, um den Channel zu registrieren.";
+"CSMSG_MYACCESS_SELF_ONLY" "Du kannst nur deine Infoline sehen (in dem du $b%s$b ohne Parameter benutzt).";
+"CSMSG_NETWORK_BANS" "$bBan Anzahl:            $b%i";
+"CSMSG_NETWORK_CHANNELS" "$bRegistrierte Channel:  $b%i";
+"CSMSG_NETWORK_CHANUSERS" "$bUser Anzahl:           $b%i";
+"CSMSG_NETWORK_INFO" "Netzwerk Informationen:";
+"CSMSG_NETWORK_OPERS" "$bIRC Operatoren:        $b%i";
+"CSMSG_NETWORK_SERVERS" "$bServer:                $b%i";
+"CSMSG_NETWORK_STAFF" "$bNetzwerk Staff, welcher zur Zeit online ist:$b";
+"CSMSG_NETWORK_USERS" "$bZur Zeit aktive User:  $b%i";
+"CSMSG_NEVER_SEEN" "%s war niemals in $b%s$b.";
+"CSMSG_NO_ACCESS" "Du hast nicht genügend Access, um den Befehl auszuführen.";
+"CSMSG_NO_BANS" "Es wurden keine Bans in $b%s$b gefunden.";
+"CSMSG_NO_BUMP_ACCESS" "Du kannst Usern nicht mehr Access geben als du hast.";
+"CSMSG_NO_CHAN_USER" "%s hat keinen Access in $b%s$b.";
+"CSMSG_NO_MATCHING_USERS" "Niemand in $b%s$b hat eine passende Hostmask zu $b%s$b.";
+"CSMSG_NO_MODES" "$b%s$b hat keine Default Modes.";
+"CSMSG_NO_OWNER_DELETEME" "Du kannst deinen Owner Access in $b%s$b nicht löschen.";
+"CSMSG_NO_SELF_CLVL" "Du kannst deinen eigenen Access nicht ändern.";
+"CSMSG_NO_SUCH_DNR" "$b%s$b ist nicht in der do-not-register Liste.";
+"CSMSG_NO_SUCH_NOTE" "Channel $b%s$b hat keine Note namens $b%s$b.";
+"CSMSG_NO_TOPIC" "$b%s$b hat kein Default Topic.";
+"CSMSG_NO_TRANSFER_SELF" "Du kannst dir nicht selber Owner geben.";
+"CSMSG_NOREGISTER_CHANNEL" "$b%s$b wurde zu der do-not-register Liste hinzugefügt.";
+"CSMSG_NOT_DNR" "$b%s$b ist kein gültiger Channel oder *Account.";
+"CSMSG_NOT_REGISTERED" "$b%s$b wurde nicht mit $b$C$b registriert.";
+"CSMSG_NOT_SUSPENDED" "$b%s$b ist nicht suspendiert.";
+"CSMSG_NOT_USER" "Du hast keinen Access in $b%s$b.";
+"CSMSG_NOTE_CREATED" "Note Typ $b%s$b wurde erstellt.";
+"CSMSG_NOTE_DELETED" "Note Typ $b%s$b wurde gelöscht.";
+"CSMSG_NOTE_FORMAT" "%s (gesetzt von %s): %s";
+"CSMSG_NOTE_MODIFIED" "Note Typ $b%s$b verändert.";
+"CSMSG_NOTE_REMOVED" "Note $b%s$b wurde in $b%s$b gelöscht.";
+"CSMSG_NOTE_SET" "Note $b%s$b wurde in $b%s$b gesetzt.";
+"CSMSG_NOTE_TYPE_USED" "Note Typ $b%s$b wird verwendet; benutze FORCE als Argument, um diesen zu löschen.";
+"CSMSG_NOTELIST_EMPTY" "Keine Notes in $b%s$b.";
+"CSMSG_NOTELIST_END" "Ende der Notes in $b%s$b.";
+"CSMSG_NOTELIST_HEADER" "Notes für $b%s$b:";
+"CSMSG_OPBY_LOCKED" "Du darfst niemandem Op geben, der kein Op Access oder höher im Channel hat.";
+"CSMSG_OPCHAN_DONE" "Ich habe mir selbst Op in $b%s$b gegeben.";
+"CSMSG_OPPED_USERS" "User(n) in $b%s$b wurde Op gegeben.";
+"CSMSG_OWN_TOO_MANY" "%s besitzt schon genug Channel (maximal %d); benutze FORCE um den Channel dennoch zu registrieren.";
+"CSMSG_OWNER_DEFAULTS" "Du musst Access Level 500 in %s haben, um die Default Einstellungen zu verändern.";
+"CSMSG_OWNERSHIP_GIVEN" "Owner Rechte in $b%s$b wurde an Account $b%s$b abgegeben.";
+"CSMSG_PEEK_INFO" "$b%s$b Status:";
+"CSMSG_PEEK_MODES" "$bModes:          $b%s";
+"CSMSG_PEEK_NO_OPS" "$bOps:            $bkeine";
+"CSMSG_PEEK_OPS" "$bOps:$b";
+"CSMSG_PEEK_TOPIC" "$bTopic:          $b%s";
+"CSMSG_PEEK_USERS" "$bUser Anzahl:    $b%d";
+"CSMSG_PING_RESPONSE" "Pong!";
+"CSMSG_PROCESS_FAILED" "$b$C$b konnte die angegebenen Nicknamen nicht finden.";
+"CSMSG_PROTECT_ALL" "Channel Besucher und User, die Access im Channel haben, werden vor Usern mit gleichem oder weniger Access geschützt.";
+"CSMSG_PROTECT_EQUAL" "User, die Access im Channel haben, werden vor Usern mit gleichem oder weniger Access geschützt.";
+"CSMSG_PROTECT_LOWER" "User, die Access im Channel haben, werden vor Usern mit weniger Access geschützt.";
+"CSMSG_PROTECT_NONE" "Niemand wird geschützt.";
+"CSMSG_PROXY_FORBIDDEN" "Du darfst keinen Channel für jemand anderen registrieren.";
+"CSMSG_PROXY_SUCCESS" "%s hat nun Owner Rechte in $b%s$b.";
+"CSMSG_REASON_CHANGE" "Grund für $b%s$b wurde verändert.";
+"CSMSG_REDUNDANT_BAN" "$b%s$b ist schon in %s gebannt.";
+"CSMSG_REG_SUCCESS" "Du hast nun Owner Access in $b%s$b.";
+"CSMSG_REPLACED_NOTE" "$b%s$b Note in %s (gesetzt von %s) wurde ersetzt. Alter Text: %s";
+"CSMSG_RESYNCED_USERS" "User in $b%s$b wurden mit der Userliste abgeglichen.";
+"CSMSG_SERVICES_UPTIME" "$bServices Uptime:       $b%s";
+"CSMSG_SET_CTCPREACTION" "$bCTCPReaction$b %d - %s";
+"CSMSG_SET_CTCPUSERS" "$bCTCPUsers   $b %d";
+"CSMSG_SET_DEFAULT_TOPIC" "$bDefaultTopic$b %s";
+"CSMSG_SET_DYNLIMIT" "$bDynLimit    $b %s";
+"CSMSG_SET_ENFMODES" "$bEnfModes    $b %d";
+"CSMSG_SET_ENFOPS" "$bEnfOps      $b %d";
+"CSMSG_SET_ENFTOPIC" "$bEnfTopic    $b %d";
+"CSMSG_SET_GIVE_OPS" "$bGiveOps     $b %d";
+"CSMSG_SET_GIVE_VOICE" "$bGiveVoice   $b %d";
+"CSMSG_SET_GREETING" "$bGreeting    $b %s";
+"CSMSG_SET_INVITEME" "$bInviteMe    $b %d";
+"CSMSG_SET_MODES" "$bModes       $b %s";
+"CSMSG_SET_NODELETE" "$bNoDelete    $b %s";
+"CSMSG_SET_PROTECT" "$bProtect     $b %d - %s";
+"CSMSG_SET_PUBCMD" "$bPubCmd      $b %d";
+"CSMSG_SET_SETTERS" "$bSetters     $b %d";
+"CSMSG_SET_TOPICMASK" "$bTopicMask   $b %s";
+"CSMSG_SET_TOPICREFRESH" "$bTopicRefresh$b %d - %s";
+"CSMSG_SET_TOPICSNARF" "$bTopicSnarf  $b %d";
+"CSMSG_SET_TOYS" "$bToys        $b %d - %s";
+"CSMSG_SET_USERGREETING" "$bUserGreeting$b %s";
+"CSMSG_SET_USERINFO" "$bUserInfo    $b %d";
+"CSMSG_SETTINGS_DEFAULTED" "Alle Einstellungen in %s wurden resetted.";
+"CSMSG_SMURF_TARGET" "%s is %s ($b%s$b).";
+"CSMSG_SQUAT_ACCESS" "$b%s$b hat keinen Access in irgendeinem Channel.";
+"CSMSG_STAFF_HELPERS" "$bHelper:$b";
+"CSMSG_STAFF_OPERS" "$bIRC Operatoren:$b";
+"CSMSG_SUSPEND_NODELETE" "$b%s$b kann nicht gelöscht oder suspendiert werden.";
+"CSMSG_SUSPENDED" "$b$C$b wurde von $b%s$b temporär suspendiert.";
+"CSMSG_TIMED_BAN_ADDED" "$b%s$b wurde von %s für %s gebannt.";
+"CSMSG_TOPIC_LOCKED" "Das %s Topic ist geschützt.";
+"CSMSG_TOPIC_MISMATCH" "Warnung: Das Default Topic in $b%s$b ist nicht gleich der Topic Mask.";
+"CSMSG_TOPIC_SET" "Topic ist nun '%s'.";
+"CSMSG_TOPICMASK_CONFLICT1" "Dieses Topic in $b%s$b kann nicht verwendet werden, da es nicht zu der aktuellen Topic Mask passt. Aktuelle Topic Mask ist: %s";
+"CSMSG_TOPICMASK_CONFLICT2" "Bitte stelle sicher, dass das Topic maximal %d Zeichen hat und zu der Topic Mask passt.";
+"CSMSG_TOPICREFRESH_12_HOURS" "Alle 12 Stunden erneuern.";
+"CSMSG_TOPICREFRESH_24_HOURS" "Alle 24 Stunden erneuern.";
+"CSMSG_TOPICREFRESH_3_HOURS" "Alle 3 Stunden erneuern.";
+"CSMSG_TOPICREFRESH_6_HOURS" "Alle 6 Stunden erneuern.";
+"CSMSG_TOPICREFRESH_NEVER" "Niemals erneuern.";
+"CSMSG_TOYS_DISABLED" "Toys sind vollständig abgeschaltet.";
+"CSMSG_TOYS_PRIVATE" "Toys werden nur dem User direkt beantwortet.";
+"CSMSG_TOYS_PUBLIC" "Toys werden im Channel beantwortet.";
+"CSMSG_TRIMMED_BANS" "Es wurden $b%d Bans$b von der %s Banliste gelöscht, welche für mindestens %s inaktiv waren.";
+"CSMSG_TRIMMED_USERS" "Es wurden $b%d User$b mit dem Access Level von %d bis %d von der %s Userliste gelöscht, welche für mindestens %s inaktiv waren.";
+"CSMSG_UNF_RESPONSE" "Ich will kein Teil deiner versauten Phantasien sein !";
+"CSMSG_UNREG_NODELETE" "$b%s$b kann nicht gelöscht werden.";
+"CSMSG_UNREG_SUCCESS" "$b%s$b wurde gelöscht.";
+"CSMSG_UNSUSPENDED" "$b$C$b's Access in $b%s$b wurde wieder hergestellt.";
+"CSMSG_UNVISITED_DATA" "%s: $b%s$b";
+"CSMSG_UNVISITED_HEADER" "Es werden maximal %d Channel angezeigt, die $b%s$b nicht besucht wurden:";
+"CSMSG_USER_EXISTS" "%s ist bereits in der $b%s$b Userliste (mit Access Level %d).";
+"CSMSG_USER_HAS_ACCESS" "%s hat Access Level $b%d$b in %s.";
+"CSMSG_USER_NO_ACCESS" "%s hat keinen Access in %s.";
+"CSMSG_USER_OPTIONS" "User Optionen:";
+"CSMSG_USER_PRESENT" "%s ist $bzur Zeit$b im Channel.";
+"CSMSG_USER_PROTECTED" "Dieser User ist geschützt.";
+"CSMSG_USER_SEEN" "%1$s wurde das letzte Mal vor %3$s in $b%2$s$b gesehen.";
+"CSMSG_USER_SUSPENDED" "$b%s$b wurde in $b%s$b suspendiert.";
+"CSMSG_USER_UNSUSPENDED" "$b%s$b's Suspension in $b%s$b wurde aufgehoben.";
+"CSMSG_USER_VACATION" "%s ist zur Zeit im Urlaubmodus.";
+"CSMSG_USET_AUTOINVITE" "$bAutoInvite  $b %s";
+"CSMSG_USET_INFO" "$bInfo        $b %s";
+"CSMSG_USET_NOAUTOOP" "$bNoAutoOp    $b %s";
+"CSMSG_USET_NOAUTOVOICE" "$bNoAutoVoice $b %s";
+"CSMSG_VOICED_USERS" "User(n) in $b%s$b wurde Voice gegeben.";
+"CSMSG_WIPED_INFO_LINE" "$b%s$b's Infoline in $b%s$b wurde gelöscht.";
+"CSMSG_WUT_RESPONSE" "wut";
+"CSMSG_YOU_ALREADY_PRESENT" "Du bist bereits in $b%s$b.";
+"GMSG_ID_INVALID" "$b%s$b ist eine ungültige ID.";
+"GMSG_INVALID_TARGET" "$b%s$b ist ein ungültiges Target.";
+"GMSG_MESSAGE_ADDED" "Nachricht an $b%s$b mit ID %ld wurde hinzugefügt.";
+"GMSG_MESSAGE_COUNT" "$b%d$b Nachricht(en) gefunden.";
+"GMSG_MESSAGE_DELETED" "Nachricht $b%s$b wurde gelöscht.";
+"GMSG_MESSAGE_REQUIRED" "Du $bmusst$b eine Nachricht angeben, die gesendet werden kann.";
+"GMSG_MESSAGE_SENT" "Nachricht an $b%s$b wurde gesendet.";
+"GMSG_MESSAGE_SOURCE" "[$b%s$b] Notice von %s, gepostet um %s:";
+"GMSG_MOTD_FOOTER" "$b---------- END OF MESSAGE(S) OF THE DAY ----------$b";
+"GMSG_MOTD_HEADER" "$b------------- MESSAGE(S) OF THE DAY --------------$b";
+"GMSG_NO_MESSAGES" "Keine Nachrichten für dich vorhanden.";
+"GMSG_NOTICE_SOURCE" "[$b%s$b] Notice von %s:";
+"MCMSG_ACCOUNT_SUSPENDED" "Dein Account ist suspendiert.";
+"MCMSG_ALREADY_HELPING" "Security Override ist bereits aktiviert.";
+"MCMSG_ALREADY_NOT_HELPING" "Security Override ist bereits deaktiviert.";
+"MCMSG_BAD_CHANSERV_LEVEL" "Ungültiger $C Access Level %s.";
+"MCMSG_BAD_OPSERV_LEVEL" "Ungültiger $O Access Level %s.";
+"MCMSG_BAD_OPTION" "Unbekannte Option %s.";
+"MCMSG_BAD_SERVICE_NICK" "$b%s$b ist ein ungültiger Nickname.";
+"MCMSG_CHAN_NOT_REGISTERED" "%s ist nicht mit $C registriert.";
+"MCMSG_CHAN_SUSPENDED" "$b$C$b wurde von $b%s$b temporär suspendiert (%s).";
+"MCMSG_COMMAND_ACCESS_LEVEL" "Benötigt Channel Access %d und $O Access %d.";
+"MCMSG_COMMAND_ACCOUNT_FLAGS" "Benötigt Account Flags +%s, verbietet Account Flags +%s.";
+"MCMSG_COMMAND_ALIASES" "%s ist ein Alias für: %s";
+"MCMSG_COMMAND_BINDING" "%s ist ein Binding von: %s";
+"MCMSG_COMMAND_BOUND" "Neuer Befehl %s an %s gebunden.";
+"MCMSG_COMMAND_FLAGS" "Befehls-Flags sind %s (inferred: %s).";
+"MCMSG_END_REQUIREMENTS" "Ende der Anforderungen für $b%s$b.";
+"MCMSG_INSPECTION_REFUSED" "Du hast keinen Access, um den Befehl %s zu betrachten.";
+"MCMSG_IS_TOY" "$b%s$b ist ein Toy Befehl.";
+"MCMSG_JOINER_CHOICES" "Unterbefehle von %s: %s";
+"MCMSG_LEVEL_TOO_HIGH" "Du kannst die Access Anforderungen von %s nicht sehen (zu hoch).";
+"MCMSG_LEVEL_TOO_LOW" "Du kannst die Access Anforderungen von %s nicht sehen (dein Level ist zu klein.)";
+"MCMSG_LOW_CHANNEL_ACCESS" "Du hast nicht genug Access in %s, um diesen Befehl zu benutzen.";
+"MCMSG_MISSING_COMMAND" "Du musst sowohl einen Befehl als auch einen Channel angeben.";
+"MCMSG_MUST_BE_HELPING" "Du benötigst Security Override (helping mode), um diesen Befehl zu verwenden.";
+"MCMSG_MUST_QUALIFY" "Du $bMUSST$b \"/msg %s@$s %s\" benutzen (nicht /msg %s).";
+"MCMSG_NEED_ACCOUNT_FLAGS" "Du musst die Account Flags $b%s$b haben.";
+"MCMSG_NEED_AUTHED" "Du musst bei $N eingeloggt sein.";
+"MCMSG_NEED_CHANNEL" "Du musst einen Channel angeben, der existiert.";
+"MCMSG_NEED_CHANSERV_LEVEL" "Du musst mindestens Access Level $b%u$b im Channel besitzen.";
+"MCMSG_NEED_CHANUSER" "Du musst auf der Channel Userliste sein.";
+"MCMSG_NEED_CHANUSER_CSUSPENDABLE" "Du musst auf der Channel Userliste sein. Der Channel kann suspendiert werden.";
+"MCMSG_NEED_JOINABLE" "Der Channel muss für jeden betretbar sein oder du musst auf der Userliste sein.";
+"MCMSG_NEED_NOTHING" "Jeder darf den $b%s$b Befehl benutzen.";
+"MCMSG_NEED_OPSERV_LEVEL" "Du musst mindestens $b%u$b $O Access haben.";
+"MCMSG_NEED_REGCHAN" "Du musst einen Channel angeben, der mit $C registriert ist.";
+"MCMSG_NEED_STAFF_ACCESS" "Du musst Netzwerk Staff sein.";
+"MCMSG_NEED_STAFF_HELPER" "Du musst ein Network oder Support Helper sein.";
+"MCMSG_NEED_STAFF_NETHELPER" "Du musst ein Network Helper sein.";
+"MCMSG_NEED_STAFF_NETHELPER_OR_OPER" "Du musst ein Network Helper oder IRC Operator sein.";
+"MCMSG_NEED_STAFF_OPER" "Du musst ein IRC Operator sein.";
+"MCMSG_NEED_STAFF_SHELPER" "Du musst ein Support Helper sein.";
+"MCMSG_NEED_STAFF_SHELPER_OR_OPER" "Du musst ein Support Helper oder IRC Operator sein.";
+"MCMSG_NO_CHANNEL_ACCESS" "Du hast keinen Access in %s.";
+"MCMSG_NO_CHANNEL_BEFORE" "Du musst erst den Befehl angeben, dann den Channel.";
+"MCMSG_NO_COMMAND_BOUND" "%s hat keinen Befehl namens %s.";
+"MCMSG_NOW_HELPING" "Security Override wurde aktiviert.";
+"MCMSG_NOW_NOT_HELPING" "Security Override wurde deaktiviert.";
+"MCMSG_PUBLIC_DENY" "Öffentliche Befehle sind in $b%s$b verboten.";
+"MCMSG_REQUIRES_JOINABLE" "Du musst in %s (oder auf der Userliste) sein, um den Befehl ausführen zu können.";
+"MCMSG_SERVICE_PRIVILEGED" "Service $b%s$b ist privilegiert: $b%s$b.";
+"MCMSG_TOYS_DISABLED" "Toys sind in %s ausgeschaltet.";
+"MCMSG_UNKNOWN_COMMAND_2" "Unbekannter Befehl %s (Service %s).";
+"MCMSG_UNKNOWN_FLAG" "Unbekanntes Module Flag %.*s.";
+"MCMSG_UNKNOWN_MODULE" "Unbekanntes Module %s.";
+"MCMSG_UNKNOWN_SERVICE" "Unbekannter Service %s.";
+"MCMSG_MESSAGE_DUMP_FAILED" "Message Dump fehlgeschlagen: %s.";
+"MSG_AUTHENTICATE" "Du musst dich erst bei $b$N$b einloggen.";
+"MSG_CHANNEL_ABSENT" "Du bist zur Zeit nicht in $b%s$b.";
+"MSG_CHANNEL_UNKNOWN" "Der Channel mit dem Namen $b%s$b existiert nicht.";
+"MSG_CHANNEL_USER_ABSENT" "$b%s$b ist zur Zeit nicht in $b%s$b.";
+"MSG_COMMAND_DISABLED" "$b%s$b ist zur Zeit deaktiviert.";
+"MSG_COMMAND_PRIVILEGED" "$b%s$b ist ein privilegierter Befehl.";
+"MSG_COMMAND_UNKNOWN" "$b%s$b ist ein unbekannter Befehl.";
+"MSG_DB_IS_MONDO" "Datenbank %s ist in der \"mondo\" Datenbank und kann nicht seperat geschrieben werden.";
+"MSG_DB_UNKNOWN" "Datenbank mit dem Namen %s nicht bekannt.";
+"MSG_DB_WRITE_ERROR" "Es ist ein Fehler bei dem Schreiben der Datenbank %s aufgetreten.";
+"MSG_DB_WROTE_ALL" "Datenbanken wurden geschrieben (in %li.%06lu Sekunden).";
+"MSG_DB_WROTE_DB" "Datenbank %s wurde geschrieben (in %li.%06lu Sekunden).";
+"MSG_DEPRECATED_COMMAND" "Der Befehl $b%s$b wurde ersetzt und wird bald gelöscht. Bitte benutze stattdessen $b%s$b.";
+"MSG_HANDLE_UNKNOWN" "Account $b%s$b ist nicht registriert.";
+"MSG_INTERNAL_FAILURE" "Der Befehl konnte nicht bearbeitet werden, da ein interner Fehler aufgetreten ist.";
+"MSG_INVALID_BINARY" "$b%s$b ist ein ungültiger Binärwert.";
+"MSG_INVALID_CHANNEL" "Du musst einen Channel angeben, der existiert.";
+"MSG_INVALID_CRITERIA" "$b%s$b ist ein ungültiges Such Kriterium.";
+"MSG_INVALID_DURATION" "Ungültige Zeitspanne '%s'.";
+"MSG_INVALID_FACILITY" "$b%s$b ist eine ungültig Facility.";
+"MSG_INVALID_GLINE" "Ungültige G-Line '%s'.";
+"MSG_INVALID_MODES" "$b%s$b ist eine ungültige Kombination von Channel Modi.";
+"MSG_INVALID_SEVERITY" "$b%s$b ist ein ungültiger Severity Level.";
+"MSG_MATCH_COUNT" "$b%u$b Übereinstimmung(en) gefunden.";
+"MSG_MISSING_PARAMS" "$b%s$b benötigt weitere Parameter.";
+"MSG_MODULE_UNKNOWN" "Kein Modul mit dem Namen $b%s$b registriert.";
+"MSG_NEVER" "Niemals";
+"MSG_NICK_UNKNOWN" "User mit dem Nick $b%s$b existiert nicht.";
+"MSG_NO_MATCHES" "Keine Übereinstimmung gefunden.";
+"MSG_NO_SEARCH_ACCESS" "Du hast nicht genug Access, um $b%s$b zu verwenden.";
+"MSG_NONE" "none";
+"MSG_NOT_A_SERVICE" "$b%s$b ist kein Service Bot.";
+"MSG_NOT_CHANNEL_NAME" "Du musst einen gültigen Channel Namen angeben.";
+"MSG_NOT_TARGET_NAME" "Du musst einen Channel oder Nick angeben.";
+"MSG_OFF" "Off";
+"MSG_ON" "On";
+"MSG_OPER_SUSPENDED" "Dein $b$O$b Access wurde suspendiert.";
+"MSG_SERVER_UNKNOWN" "Der Server mit Namen $b%s$b existiert nicht oder ist nicht gelinkt.";
+"MSG_SERVICE_IMMUNE" "$b%s$b darf nicht gekickt, gekillt, gebannt oder deoppt werden.";
+"MSG_SERVICE_PRIVILEGED" "$b%s$b ist ein privilegierter Service.";
+"MSG_SET_EMAIL_ADDR" "Du musst erst deine Email Adresse gesetzt haben.  (Kontaktiere den Netzwerk Staff, falls du dich nicht einloggen kannst.)";
+"MSG_SETTING_PRIVILEGED" "$b%s$b ist eine privilegierte Einstellung.";
+"MSG_STUPID_ACCESS_CHANGE" "Bitte frage jemand $banderen$b, dir weniger Access zu geben.";
+"MSG_TOPIC_UNKNOWN" "Keine Hilfe zu diesem Thema gefunden.";
+"MSG_USER_AUTHENTICATE" "User %s muss sich erst bei $b$N$b einloggen.";
+"MSG_USER_OUTRANKED" "$b%s$b hat mehr Access als du (Befehl hat keine Wirkung).";
+"MSG_YEAR" "Jahr";
+"MSG_YEARS" "Jahre";
+"MSG_WEEK" "Woche";
+"MSG_WEEKS" "Wochen";
+"MSG_DAY" "Tag";
+"MSG_DAYS" "Tage";
+"MSG_HOUR" "Stunde";
+"MSG_HOURS" "Stunden";
+"MSG_MINUTE" "Minute";
+"MSG_MINUTES" "Minuten";
+"MSG_SECOND" "Sekunde";
+"MSG_SECONDS" "Sekunden";
+"MSG_AND" "und";
+"MSG_0_SECONDS" "0 Sekunden";
+"NSEMAIL_ACTIVATION_BODY" "Diese Email wurde verschickt, um sicher zu stellen, dass die Email Adresse demjenigen gehört, der versucht hat, den Account auf %1$s zu registrieren. Dein Cookie ist:\n    %2$s\nUm die Email Adresse zu bestätigen, connecte zu %1$s und gebe folgenden Befehl ein:\n    /msg %3$s@%4$s COOKIE %5$s %2$s\nFalls du diesen Account nicht registriert hast, brauchst du nichts zu unternehmen. Bitte kontaktiere den %1$s Netzwerk Staff, falls du Fragen haben solltest.";
+"NSEMAIL_ACTIVATION_SUBJECT" "%s Account Bestätigung";
+"NSEMAIL_ALLOWAUTH_BODY" "Diese Email wurde verschickt, um dir zu erlauben, dich mit dem Account %5$s auf %1$s einzuloggen.  Dein Cookie ist:\n    %2$s\nUm die Email Adresse zu bestätigen, connecte zu %1$s und gebe folgenden Befehl ein:\n    /msg %3$s@%4$s COOKIE %5$s %2$s\nFalls du diese Email nicht angefordert hast, brauchst du nichts zu unternehmen. Bitte kontaktiere den %1$s Netzwerk Staff, falls du Fragen haben solltest.";
+"NSEMAIL_ALLOWAUTH_SUBJECT" "Erlaubnis zum Einloggen auf %s";
+"NSEMAIL_EMAIL_CHANGE_BODY_NEW" "Diese Email wurde verschickt, um sicher zu stellen, dass die Email Adresse demjenigen gehört, der versucht hat, das Passwort für den Account %5$s auf %1$s zu ändern.  Der ZWEITE TEIL des Cookies ist %2$.*6$s.\nUm die Email Adresse zu bestätigen, connecte zu %1$s und gebe folgenden Befehl ein:\n    /msg %3$s@%4$s COOKIE %5$s ?????%2$.*6$s\n(Ersetze die ????? mit dem ERSTEN TEIL des Cookies, welcher zu deiner alten Email gesendet wurde.)\nFalls du diese Email nicht angefordert hast, brauchst du nichts zu unternehmen. Bitte kontaktiere den %1$s Netzwerk Staff, falls du Fragen haben solltest.";
+"NSEMAIL_EMAIL_CHANGE_BODY_OLD" "Diese Email wurde verschickt, um sicher zu stellen, dass du die Email Adresse für den Account %5$s auf %1$s von dieser Adresse in %7$s ändern möchtest.  Die ERSTE HÄLFTE des Cookies ist %2$.*6$s\nUm die Email Adresse zu bestätigen, connecte zu %1$s und gebe folgenden Befehl ein:\n    /msg %3$s@%4$s COOKIE %5$s %2$.*6$s?????\n(Ersetze die ????? mit dem ZWEITEN TEIL des Cookies, welcher zu deiner NEUEN Email Adresse geschickt wurde.)\nFalls du diese Email nicht angefordert hast, brauchst du nichts zu unternehmen. Bitte kontaktiere den %1$s Netzwerk Staff, falls du Fragen haben solltest.";
+"NSEMAIL_EMAIL_CHANGE_SUBJECT" "Bestätigung der Email Adresse für deinen %s Account";
+"NSEMAIL_EMAIL_VERIFY_BODY" "Diese Email wurde verschickt, um sicher zu stellen, dass die Email Adresse demjenigen gehört, der diese Adresse bei dem Account %5$s auf %1$s angegeben hat.  Dein Cookie ist %2$s.\nUm die Email Adresse zu bestätigen, connecte zu %1$s und gebe folgenden Befehl ein:\n    /msg %3$s@%4$s COOKIE %5$s %2$s\nFalls du diese Email nicht angefordert hast, brauchst du nichts zu unternehmen. Bitte kontaktiere den %1$s Netzwerk Staff, falls du Fragen haben solltest.";
+"NSEMAIL_EMAIL_VERIFY_SUBJECT" "Bestätigung der Email Adresse für deinen %s Account";
+"NSEMAIL_PASSWORD_CHANGE_BODY" "Diese Email wurde verschickt, um sicher zu stellen, dass du das Passwort für den Account %5$s ändern möchtest.  Dein Cookie ist %2$s.\nUm das Passwort zu bestätigen, connecte zu %1$s und gebe folgenden Befehl ein:\n    /msg %3$s@%4$s COOKIE %5$s %2$s\nFalls du diese Email nicht angefordert hast, brauchst du nichts zu unternehmen. Bitte kontaktiere den %1$s Netzwerk Staff, falls du Fragen haben solltest.";
+"NSEMAIL_PASSWORD_CHANGE_SUBJECT" "Bestätigung des Passwortes für deinen %s Account";
+"NSMSG_ACCOUNT_SEARCH_RESULTS" "Die folgenden Accounts wurden gefunden:";
+"NSMSG_ADDMASK_ALREADY" "Hostmask $b%s$b ist bereits gesetzt.";
+"NSMSG_ADDMASK_SUCCESS" "Hostmask %s wurde hinzugefügt.";
+"NSMSG_ALLOWAUTH_STAFF" "$b%s$b ist ein Helper oder Oper; bitte benutze $bstaff$b nach dem Account, um fortzufahren.";
+"NSMSG_ALREADY_AUTHED" "Du bist bereit mit dem Account $b%s$b eingeloggt; du musst neu connecten, um zu dich mit einem anderen Account einzuloggen.";
+"NSMSG_ATE_COOKIE" "Das Cookie wurde gelöscht.";
+"NSMSG_AUTH_ALLOWED" "User $b%s$b darf sich nun mit dem Account $b%s$b einloggen.";
+"NSMSG_AUTH_ALLOWED_EMAIL" "Du kannst (nach dem Einloggen) $b/msg $N set email user@dein.provider$b eingeben, um deine Email Adresse anzugeben.  Das erlaubt dir, den $bauthcookie$b Befehl zu verwenden.";
+"NSMSG_AUTH_ALLOWED_MSG" "Du kannst dich nun mit dem Account $b%s$b einloggen, in dem du $b/AuthServ auth %s passwort$b eingibst (passwort muss mit deinem Passwort ersetzt werden).  Wenn du diesen Computer öfters benutzt, solltest du $b/msg $N addmask$b eingeben (NACH dem Einloggen), damit du dich jedesmal von diesem PC einloggen kannst.";
+"NSMSG_AUTH_NORMAL_ONLY" "User $b%s$b kann nun nur mit der passenden Hostmask einloggen.";
+"NSMSG_AUTH_SUCCESS" "Du bist nun eingeloggt.";
+"NSMSG_AUTH_UNSPECIAL" "User $b%s$b hat keine spezielle Erlaubnis (allowauth), sich einzuloggen.";
+"NSMSG_BAD_COOKIE" "Das Cookie ist nicht korrekt.  Bitte versichere dich, dass du es EXAKT aus der Email kopierst. Achte auch auf Groß- und Kleinschreibung, also $bABC$b ist etwas anderes als $babc$b.";
+"NSMSG_BAD_COOKIE_TYPE" "Ungültiger Cookie Typ %d; Bitte melde diesen Bug einem Admin.";
+"NSMSG_BAD_EMAIL_ADDR" "Bitte benutze eine korrekte Email Adresse.";
+"NSMSG_BAD_HANDLE" "Account $b%s$b kann nicht registriert werden, da er von einem Netzwerk Service verwendet wird, zu lang ist, oder ungültige Zeichen enthält.";
+"NSMSG_BAD_MAX_LOGINS" "MaxLogins darf höchstens %d sein.";
+"NSMSG_BAD_NICK" "Nickname $b%s$b kann nicht registriert werden, da er von einem Netzwerk Service verwendet wird, zu lang ist, oder ungültige Zeichen enthält.";
+"NSMSG_CANNOT_COOKIE" "Du kannst dieses Cookie nicht verwenden, wenn du eingeloggt bist.";
+"NSMSG_CANNOT_GHOST_SELF" "Du kannst dich nicht selber Ghost-killen.";
+"NSMSG_CANNOT_GHOST_USER" "$b%s$b ist nicht mit deinem Account eingeloggt. Du kannst ihn nicht Ghost-killen.";
+"NSMSG_CANNOT_MERGE_SELF" "Du kannst den Account $b%s$b nicht mit sich selber mergen.";
+"NSMSG_CLONE_AUTH" "Warnung: %s (%s@%s) hat sich mit deinem Account eingeloggt.";
+"NSMSG_COOKIE_LIVE" "Account $b%s$b hat bereits ein aktives Cookie.  Bitte benutze erst das Cookie, warte, bis es erlischt oder logge dich mit dem Account ein und benutze den $bdelcookie$b Befehl.";
+"NSMSG_DB_MERGED" "$N merged DB von %s (in %li.%03lu Sekunden).";
+"NSMSG_DB_UNREADABLE" "Kann Datenbank %s nicht lesen; siehe Log für weitere Informationen.";
+"NSMSG_DELMASK_NOT_FOUND" "Diese Hostmask ist nicht vorhanden.";
+"NSMSG_DELMASK_NOTLAST" "Du kannst deine letzte Hostmask nicht löschen.";
+"NSMSG_DELMASK_SUCCESS" "Hostmask %s wurde gelöscht.";
+"NSMSG_EMAIL_CHANGED" "Deine Email Adresse wurde erfolgreich geändert.";
+"NSMSG_EMAIL_OVERUSED" "Diese Email Adresse kann nicht verwendet werden, da diese schon bei anderen Accounts verwendet wird.";
+"NSMSG_EMAIL_PROHIBITED" "%s kann nicht als Email Adresse genutzt werden: %s";
+"NSMSG_EMAIL_SAME" "Diese Email Adresse ist schon gesetzt, daher braucht sie nicht verändert werden.";
+"NSMSG_EMAIL_UNACTIVATED" "An diese Email Adresse wurde schon ein Cookie versendet.  Bitte benutze erst dieses Cookie oder warte, bis es erlischt.";
+"NSMSG_FAIL_RENAME" "Account $b%s$b kann nicht in $b%s$b umbenannt werden, da er von einem Netzwerk Service verwendet wird, zu lang ist, oder ungültige Zeichen enthält.";
+"NSMSG_FLAG_PRIVILEGED" "Du hast keinen Access, um Flag %c zu setzen.";
+"NSMSG_GHOST_KILLED" "$b%s$b wurde gekillt.";
+"NSMSG_GLOBAL_STATS" "Es sind %d Accounts und %d Nicknamen registriert.";
+"NSMSG_GLOBAL_STATS_NONICK" "Es sind %d Accounts registriert.";
+"NSMSG_HANDLE_ACTIVATED" "Dein Account ist nun aktiviert (mit dem Passwort, dass du bei der Registrierung angegeben hast).  Du bist nun mit dem Account eingeloggt.";
+"NSMSG_HANDLE_CHANGED" "$b%s$b's Account wurde in $b%s$b umbenannt.";
+"NSMSG_HANDLE_EXISTS" "Account $b%s$b ist bereits registriert.";
+"NSMSG_HANDLE_NONE" "Du bist nicht eingeloggt.";
+"NSMSG_HANDLE_NOT_FOUND" "Der Account wurde nicht gefunden -- Hast du dich schon registriert ?";
+"NSMSG_HANDLE_STATS" "Es wurden %d Nicknamen mit deinem Account registriert.";
+"NSMSG_HANDLE_SUSPENDED" "Dein $b$N$b Account wurde suspendiert, daher kannst du diesen nicht nutzen.";
+"NSMSG_HANDLEINFO_CHANNELS" "  Channel Access: %s";
+"NSMSG_HANDLEINFO_COOKIE_ACTIVATION" "  Cookie: Zur Zeit ist ein Aktivierungs-Cookie aktiv";
+"NSMSG_HANDLEINFO_COOKIE_ALLOWAUTH" "  Cookie: Zur Zeit ist ein AllowAuth Cookie aktiv";
+"NSMSG_HANDLEINFO_COOKIE_EMAIL" "  Cookie: Zur Zeit ist ein Cookie zum Ändern der Email Adresse aktiv";
+"NSMSG_HANDLEINFO_COOKIE_PASSWORD" "  Cookie: Zur Zeit ist ein Cookie zum Ändern des Passworts aktiv";
+"NSMSG_HANDLEINFO_COOKIE_UNKNOWN" "  Cookie: Zur Zeit ist ein unbekanntes Cookie aktiv";
+"NSMSG_HANDLEINFO_CURRENT" "  Nickname(n): %s";
+"NSMSG_HANDLEINFO_DNR" "  Do-not-register (gesetzt von %s): %s";
+"NSMSG_HANDLEINFO_EMAIL_ADDR" "  Email Adresse: %s";
+"NSMSG_HANDLEINFO_EPITHET" "  Epithet: %s";
+"NSMSG_HANDLEINFO_FLAGS" "  Flags: %s";
+"NSMSG_HANDLEINFO_ID" "  Account ID: %lu";
+"NSMSG_HANDLEINFO_INFOLINE" "  Infoline: %s";
+"NSMSG_HANDLEINFO_LAST_HOST" "  Letzte Quit Hostmask: %s";
+"NSMSG_HANDLEINFO_LAST_HOST_UNKNOWN" "  Letzte Quit Hostmask: unbekannt";
+"NSMSG_HANDLEINFO_LASTSEEN" "  Zuletzt gesehen: %s";
+"NSMSG_HANDLEINFO_LASTSEEN_NOW" "  Zuletzt gesehen: Zur Zeit online !";
+"NSMSG_HANDLEINFO_MASKS" "  Hostmask(s): %s";
+"NSMSG_HANDLEINFO_NICKS" "  Nickname(n): %s";
+"NSMSG_HANDLEINFO_ON" "Account Informationen für $b%s$b:";
+"NSMSG_HANDLEINFO_REGGED" "  Registriert am: %s";
+"NSMSG_HANDLEINFO_VACATION" "  Im Urlaubsmodus.";
+"NSMSG_HANDLES_MERGED" "Account $b%s$b in $b%s$b gemerged.";
+"NSMSG_HOSTMASK_INVALID" "Deine Hostmask passt nicht zu dem Account $b%s$b. Bitte kontaktiere den Netzwerk Staff.";
+"NSMSG_INVALID_ACTION" "%s ist eine ungültige Suchaktion.";
+"NSMSG_INVALID_ANNOUNCE" "$b%s$b ist ein ungültiger Announcements Wert.";
+"NSMSG_INVALID_FLAG" "$b%c$b ist ein ungültiger $N Account Flag.";
+"NSMSG_INVALID_OPTION" "$b%s$b ist eine ungültige Account Option.";
+"NSMSG_LANGUAGE_NOT_FOUND" "Sprache $b%s$b wird nicht unterstützt; $b%s$b war die naheliegendste Sprache.";
+"NSMSG_MASK_INVALID" "$b%s$b ist eine ungültige Hostmask.";
+"NSMSG_MAX_LOGINS" "In deinem Account ist die maximale Anzahl von %d Usern eingeloggt.";
+"NSMSG_MUST_AUTH" "Du musst dich erst einloggen.";
+"NSMSG_MUST_TIME_OUT" "Du musst warten, bis das Cookie erlischt.";
+"NSMSG_NICK_EXISTS" "Nickname $b%s$b ist bereits registriert.";
+"NSMSG_NICK_NOT_REGISTERED" "Nickname $b%s$b wurde noch nicht registriert.";
+"NSMSG_NICK_USER_YOU" "Du kannst dich nicht selber killen.";
+"NSMSG_NICKINFO_OWNER" "Nickname $b%s$b gehört dem Account $b%s$b.";
+"NSMSG_NO_ACCESS" "Zugriff verweigert.";
+"NSMSG_NO_COOKIE" "Dein Account hat zur Zeit keine aktiven Cookies.";
+"NSMSG_NOT_YOUR_NICK" "Nickname $b%s$b wurde nicht von dir registriert.";
+"NSMSG_ON_VACATION" "Du bist nun im Urlaubsmodus.  Dieser bleibt aktiv, bis du dich erneut einloggst.";
+"NSMSG_OPSERV_LEVEL_BAD" "Du kannst einem anderen Oper nicht mehr Access geben, als du hast.";
+"NSMSG_OREGISTER_H_SUCCESS" "Account wurde registriert.";
+"NSMSG_OREGISTER_VICTIM" "%s hat dir einen neuen Account namens %s registriert.";
+"NSMSG_OREGNICK_SUCCESS" "Nickname $b%s$b wurde auf den Account $b%s$b registriert.";
+"NSMSG_PARTIAL_REGISTER" "Der Account wurde auf dich registriert; der Nickname ist allerdings vergeben.";
+"NSMSG_PASS_SUCCESS" "Passwort wurde geändert.";
+"NSMSG_PASSWORD_ACCOUNT" "Dein Passwort darf nicht so lauten wie dein Account.";
+"NSMSG_PASSWORD_CHANGED" "Dein Passwort wurde erfolgreich zu dem Passwort geändert, welches du bei dem $bresetpass$b Befehl angegeben hast.";
+"NSMSG_PASSWORD_DICTIONARY" "Dein Passwort sollte nicht das Wort \"password\" oder ein anderes Wort aus einem Wörterbuch sein.";
+"NSMSG_PASSWORD_INVALID" "Falsches Passwort - versuche es erneut.";
+"NSMSG_PASSWORD_READABLE" "Dein Passwort muss aus mindestens %lu Zahl(en), %lu Großbuchstabe(n) und %lu Kleinbuchstabe(n) bestehen.";
+"NSMSG_PASSWORD_SHORT" "Dein Passwort muss mindestens %lu Zeichen lang sein.";
+"NSMSG_PLEASE_SET_EMAIL" "Du musst deine Email Adresse angeben.  Bitte benutze den $bset email$b Befehl, um deine Email Adresse zu setzen !";
+"NSMSG_RECLAIM_KILL" "Dieser Nickname ist reserviert.";
+"NSMSG_RECLAIM_WARN" "%s ist ein registrierter Nickname - du musst dich mit dem Account %s einloggen oder deinen Nicknamen ändern.";
+"NSMSG_RECLAIMED_KILL" "User %s gekillt.";
+"NSMSG_RECLAIMED_NONE" "Du kannst manuell keinen Nick zurückfordern.";
+"NSMSG_RECLAIMED_SVSNICK" "%s's Nickname wurde geändert.";
+"NSMSG_RECLAIMED_WARN" "Warnung wurde an %s gesendet, damit dieser den Nicknamen ändert.";
+"NSMSG_REGISTER_BAD_NICKMASK" "$b%s$b ist weder ein aktueller Nick noch eine Hostmask.";
+"NSMSG_REGISTER_H_SUCCESS" "Account wurde auf dich registriert.";
+"NSMSG_REGISTER_HN_SUCCESS" "Account und Nickname wurden auf dich registriert.";
+"NSMSG_REGNICK_SUCCESS" "Nickname $b%s$b wurde auf dich registriert.";
+"NSMSG_REQUIRE_OPER" "Du musst ein $bIRC Operator$b sein, um den ersten Account zu registrieren.";
+"NSMSG_ROOT_HANDLE" "Account %s wurden $broot-level Privilegien$b erteilt.";
+"NSMSG_SEARCH_MATCH" "Übereinstimmung(en): %s";
+"NSMSG_SET_ANNOUNCEMENTS" "$bANNOUNCEMENTS: $b%s";
+"NSMSG_SET_COLOR" "$bCOLOR:        $b%s";
+"NSMSG_SET_EMAIL" "$bEMAIL:        $b%s";
+"NSMSG_SET_EPITHET" "$bEPITHET:      $b%s";
+"NSMSG_SET_FLAG" "Flags $b%s$b wurden bei %s's $N Account geändert.";
+"NSMSG_SET_FLAGS" "$bFLAGS:        $b%s";
+"NSMSG_SET_INFO" "$bINFO:         $b%s";
+"NSMSG_SET_LANGUAGE" "$bLANGUAGE:     $b%s";
+"NSMSG_SET_LEVEL" "$bLEVEL:        $b%d";
+"NSMSG_SET_MAXLOGINS" "$bMAXLOGINS:    $b%d";
+"NSMSG_SET_PASSWORD" "$bPASSWORD:     $b%s";
+"NSMSG_SET_PRIVMSG" "$bPRIVMSG:      $b%s";
+"NSMSG_SET_STYLE" "$bSTYLE:        $b%s";
+"NSMSG_SET_TABLEWIDTH" "$bTABLEWIDTH:   $b%d";
+"NSMSG_SET_WIDTH" "$bWIDTH:        $b%d";
+"NSMSG_SETTING_LIST" "$b$N Account Einstellungen:$b";
+"NSMSG_STAMPED_AUTH" "Du bist diese Session bereits eingeloggt. Du kannst dich nicht nochmal eingeloggen ohne vorher neu zu connecten.";
+"NSMSG_STAMPED_AUTHCOOKIE" "Du bist diese Session bereits eingeloggt. Du kannst daher kein Auth-Cookie verwenden, um dich einzuloggen.";
+"NSMSG_STAMPED_REGISTER" "Du bist diese Session bereits eingeloggt. Du kannst dir daher keinen neuen Account registrieren.";
+"NSMSG_STAMPED_RESETPASS" "Du bist diese Session bereits eingeloggt. Du kannst daher $bresetpass$b nicht benutzen.";
+"NSMSG_TOO_MANY_NICKS" "Du hast bereits die maximale Anzahl von Nicknamen registriert.";
+"NSMSG_UNKNOWN_NICK" "Nickname $b%s$b ist unbekannt.";
+"NSMSG_UNREGISTER_NICKS_SUCCESS" "Account $b%s$b und alle dazugehörigen Nicknamen wurden gelöscht.";
+"NSMSG_UNREGISTER_SUCCESS" "Account $b%s$b wurde gelöscht.";
+"NSMSG_UNREGNICK_SUCCESS" "Nickname $b%s$b wurde gelöscht.";
+"NSMSG_USE_AUTHCOOKIE" "Deine Hostmask ist nicht gültig für den Account $b%1$s$b.  Bitte benutze den $bauthcookie$b Befehl (/msg $S authcookie %1$s), danach rufe deine Mails ab.";
+"NSMSG_USE_CMD_PASS" "Bitte benutze den PASS Befehl, um das Passwort zu ändern.";
+"NSMSG_USE_COOKIE_AUTH" "Ein Cookie wurde generiert und an deine Email Adresse gesendet.  Wenn du die Email bekommen hast, wirst du in dieser ein Cookie finden. Um einzuloggen, benutze den $bcookie$b Befehl.";
+"NSMSG_USE_COOKIE_EMAIL_1" "Ein Cookie wurde generiert und an deine Email Adresse gesendet.  Wenn du die Mail bekommen hast, wirst du in dieser ein Cookie finden. Bitte bestätige die Email mit dem $bcookie$b Befehl.";
+"NSMSG_USE_COOKIE_EMAIL_2" "Ein Cookie wurde generiert und ein Teil des Cookies wurde an die alte Email Adresse, der Andere an die neue Adresse gesendet.  Um die Änderung der Email Adresse zu bestätigen, lese die Mails und benutze den $bcookie$b Befehl.";
+"NSMSG_USE_COOKIE_REGISTER" "Um den Account zu aktivieren, musst du deine Mail abrufen, da wir dir ein \"Cookie\" gesendet haben.  Wenn du die Email bekommen hast, benutze den $bcookie$b Befehl, um die Registrierung abzuschliessen.";
+"NSMSG_USE_COOKIE_RESETPASS" "Ein Cookie wurde generiert und an deine Email Adresse gesendet.  Wenn du die Mail bekommen hast, wirst du in dieser ein Cookie finden. Bitte bestätige die Email mit dem $bcookie$b Befehl, um die Passwort Änderung abzuschliessen.";
+"NSMSG_USE_RENAME" "Du bist bereits mit dem Account $b%s$b eingeloggt -- Kontaktiere den Support Staff, um den Account umzubenennen.";
+"NSMSG_USER_IS_SERVICE" "$b%s$b ist ein Netzwerk Service. Du kannst diesen Befehl nur auf reale User anwenden.";
+"NSMSG_USER_PREV_AUTH" "$b%s$b ist bereits eingeloggt.";
+"NSMSG_USER_PREV_STAMP" "$b%s$b ist bereits eingeloggt und kann sich daher nicht noch einmal einloggen.";
+"NSMSG_USERINFO_AUTHED_AS" "$b%s$b ist mit dem Account $b%s$b eingeloggt.";
+"NSMSG_USERINFO_NOT_AUTHED" "$b%s$b ist nicht eingeloggt.";
+"NSMSG_WEAK_PASSWORD" "WARNUNG: Du benutzt ein Passwort, welches leicht zu erraten ist.  Es wird dringend empfohlen, das Passwort zu ändern. Benutze \"/AUTHSERV PASS altes_passwort neues_passwort\", um es zu ändern.";
diff --git a/languages/en/README b/languages/en/README
new file mode 100644 (file)
index 0000000..75c58a7
--- /dev/null
@@ -0,0 +1 @@
+This directory intentionally left blank.
diff --git a/languages/validate.pl b/languages/validate.pl
new file mode 100644 (file)
index 0000000..c7c822f
--- /dev/null
@@ -0,0 +1,208 @@
+#! /usr/bin/perl -w
+
+use strict;
+use warnings;
+use vars qw($field_re %lang %escapes);
+use FileHandle ();
+
+$| = 1;
+
+$field_re = qr/%.*?[diouxXeEfFgGaAcspn%]/;
+
+%escapes = (
+            '"' => '"',
+            'n' => "\n",
+            '\\' => "\\"
+           );
+
+sub split_format ($$$) {
+  my ($language, $key, $format) = @_;
+  my (@fields, @sorted, $indexed, $idx);
+
+  # C indexes things from argument 1.
+  $fields[0] = { type => 'dummy' };
+
+  # Parse each format field in the string.
+  while ($format =~ /($field_re)/g) {
+    my $field = $1;
+    next if substr($field, -1) eq '%';
+    if ($field =~ /^%(\d+\$)(#?0?-? ?\+?)(\*\d+\$|\d*)(.\*\d+\$|\.\d+)?((?:hh?|ll?|L|j|z|t)?.)$/) {
+      if (not defined $indexed) {
+        $indexed = 1;
+      } elsif (not $indexed) {
+        print "MISMATCH: ${language} ${key}, mix of indexed and unindexed fields\n";
+        return ();
+      }
+      my $res = {};
+      $res->{index} = substr($1, 0, -1);
+      $res->{flags} = $2;
+      $res->{width} = $3;
+      $res->{precision} = $4;
+      $res->{type} = $5;
+      $res->{width_idx} = $1
+        if $res->{width} and $res->{width} =~ /^\*\d+\$$/;
+      $res->{prec_idx} = $1
+        if $res->{precision} and $res->{precision} =~ /^.\*(\d+)\$$/;
+      push @fields, $res;
+    } elsif ($field =~ /^%(#?0?-? ?\+?)(\*|\d*)(.\*|\.\d+)?((?:hh?|ll?|L|j|z|t)?.)$/) {
+      if (not defined $indexed) {
+        $indexed = 0;
+        $idx = 1;
+      } elsif ($indexed) {
+        print "MISMATCH: ${language} ${key}, mix of indexed and unindexed fields\n";
+        return ();
+      }
+      my $res = {};
+      $res->{flags} = $1;
+      $res->{width} = $2;
+      $res->{precision} = $3;
+      $res->{type} = $4;
+      $res->{width_idx} = $idx++
+        if $res->{width} and $res->{width} eq '*';
+      $res->{prec_idx} = $idx++
+        if $res->{precision} and $res->{precision} eq '.*';
+      $res->{index} = $idx++;
+      push @fields, $res;
+    } else {
+      print "Unparsed field ${language} ${key}: $field\n";
+      next;
+    }
+  }
+
+  # Go through and make sure they are in fully sorted order, with
+  # precision arguments marked properly.
+  foreach my $field (@fields) {
+    next if $field->{type} eq 'dummy' or $field->{type} eq 'width' or $field->{type} eq 'precision';
+    my $idx = $field->{index};
+
+    # Check for conflicts with this field.
+    if (my $old = $sorted[$idx]) {
+      if ($old->{type} ne $field->{type}) {
+        print "MISMATCH ${key}: ${language} refers to param $idx as both type ".$old->{type}." and ".$field->{type}.".\n";
+        next;
+      }
+      if ($old->{precision} or $field->{precision}) {
+        if (exists($old->{prec_idx}) != exists($field->{prec_idx})) {
+          print "MISMATCH ${key}: ${language} has param $idx with and without a precision argument.\n";
+          next;
+        } elsif ($old->{prec_idx} != $field->{prec_idx}) {
+          print "MISMATCH ${key}: ${language} has param $idx with different precision arguments.\n";
+          next;
+        }
+      }
+      if ($old->{width} or $field->{width}) {
+        if (exists($old->{width_idx}) != exists($field->{width_idx})) {
+          print "MISMATCH ${key}: ${language} has param $idx with and without width argument.\n";
+        } elsif ($old->{width_idx} != $field->{width_idx}) {
+          print "MISMATCH ${key}: ${language} has param $idx with different width arguments.\n";
+        }
+      }
+    }
+    $sorted[$idx] = $field;
+
+    if (exists($field->{width_idx})) {
+      my $width_idx = $field->{width_idx};
+      if (my $old = $sorted[$width_idx]) {
+        if ($old->{type} ne 'width') {
+          print "MISMATCH ${key}: ${language} refers to param $idx as both type ".$old->{type}." and type width.\n";
+          next;
+        }
+      }
+      $sorted[$width_idx] = { type => 'width' };
+    }
+
+    if (exists($field->{prec_idx})) {
+      my $prec_idx = $field->{prec_idx};
+      # Check for conflicts with this field's precision argument.
+      if (my $old = $sorted[$prec_idx]) {
+        if ($old->{type} ne 'precision') {
+          print "MISMATCH ${key}: ${language} refers to param $idx as both type ".$old->{type}." and type precision.\n";
+          next;
+        }
+      }
+      $sorted[$prec_idx] = { type => 'precision' };
+    }
+  }
+
+  return @sorted;
+}
+
+sub compare_formats ($$$$) {
+  my ($language, $key, $orig_fmt, $new_fmt) = @_;
+
+  my @orig_fields = split_format('C', $key, $orig_fmt);
+  my @new_fields = split_format($language, $key, $new_fmt);
+  if (scalar(@orig_fields) != scalar(@new_fields)) {
+    print "MISMATCH ${key}: C has ".scalar(@orig_fields)." fields, ${language} has ".scalar(@new_fields)."\n";
+    return;
+  }
+  for (my $x = 1; $x <= $#orig_fields; $x++) {
+    my $orig = $orig_fields[$x];
+    my $new = $new_fields[$x];
+    if (not exists $orig->{type}) {
+      print "MISMATCH ${key}: C has no type for format $x!\n";
+    } elsif (not exists $new->{type}) {
+      print "MISMATCH ${key}: ${language} has no type for format $x!\n";
+    } if ($orig->{type} ne $new->{type}) {
+      print "MISMATCH ${key}: C refers to argument $x as type ".$orig->{type}.", ${language} as type ".$new->{type}.".\n";
+      next;
+    }
+    if ($orig->{width} or $new->{width}) {
+      if (not exists ($orig->{width_idx}) and not exists($new->{width_idx})) {
+        # both used fixed widths: no problem
+      } elsif (exists($orig->{width_idx}) and not exists($new->{width_idx})) {
+        print "MISMATCH ${key}: C has a width argument for format $x, ${language} does not.\n";
+      } elsif (not exists($orig->{width_idx}) and exists($new->{width_idx})) {
+        print "MISMATCH ${key}: ${language} has a width argument for format $x, C does not.\n";
+      } elsif ($orig->{width_idx} != $new->{width_idx}) {
+        print "MISMATCH ${key}: C and ${language} disagree on width argument for format $x.\n";
+      }
+    }
+    if ($orig->{precision} or $new->{precision}) {
+      if (not exists($orig->{prec_idx}) and not exists($new->{prec_idx})) {
+        # both used fixed precisions: no problem
+      } elsif (exists($orig->{prec_idx}) and not exists($new->{prec_idx})) {
+        print "MISMATCH ${key}: C has a precision argument for format $x, ${language} does not.\n";
+        next;
+      } elsif (not exists($orig->{prec_idx}) and exists($new->{prec_idx})) {
+        print "MISMATCH ${key}: $language has a precision argument for format $x, C does not.\n";
+        next;
+      } elsif ($orig->{prec_idx} != $new->{prec_idx}) {
+        print "MISMATCH ${key}: C and $language disagree on precision argument for format $x.\n";
+        next;
+      }
+    }
+  }
+}
+
+sub read_language ($) {
+  my $fname = shift;
+  my $fh = new FileHandle($fname, "r");
+  return undef unless defined $fh;
+  my $res = {};
+  while (defined($_ = $fh->getline)) {
+    chomp;
+    if (my ($key, $val) = /^"(\w+)" "(.+)";$/) {
+      $val =~ s/\\(.)/$escapes{$1}/eg;
+      $res->{$key} = $val;
+    } else {
+      print "Unrecognized line in $fname: $_\n";
+    }
+  }
+  return $res;
+}
+
+$lang{C} = read_language("strings.db");
+
+foreach my $language (@ARGV) {
+  next if exists $lang{$language};
+  $lang{$language} = read_language("${language}/strings.db")
+    or die "Unable to read $language: $!";
+  foreach my $key (keys %{$lang{$language}}) {
+    if (not $lang{C}->{$key}) {
+      print "Extra entry in ${language}: $key\n";
+      next;
+    }
+    compare_formats($language, $key, $lang{C}->{$key}, $lang{$language}->{$key});
+  }
+}
index 9fdec6c577a3d6fe4117ec83601915511a448f61..9642a1023294f7c3f5f935fc228a49ee22cd941e 100644 (file)
@@ -396,6 +396,7 @@ static const struct message_entry msgtab[] = {
     { "CSMSG_NETWORK_SERVERS", "$bServers:             $b%i" },
     { "CSMSG_NETWORK_USERS",   "$bTotal Users:         $b%i" },
     { "CSMSG_NETWORK_BANS",    "$bTotal Ban Count:     $b%i" },
+    { "CSMSG_NETWORK_CHANUSERS", "$bTotal User Count:    $b%i" },
     { "CSMSG_NETWORK_OPERS",   "$bIRC Operators:       $b%i" },
     { "CSMSG_NETWORK_CHANNELS","$bRegistered Channels: $b%i" },
     { "CSMSG_SERVICES_UPTIME", "$bServices Uptime:     $b%s" },
@@ -3907,7 +3908,7 @@ static CHANSERV_FUNC(cmd_netinfo)
     reply("CSMSG_NETWORK_OPERS", curr_opers.used);
     reply("CSMSG_NETWORK_CHANNELS", registered_channels);
     reply("CSMSG_NETWORK_BANS", banCount);
-    reply("CSMSG_CHANNEL_USERS", userCount);
+    reply("CSMSG_NETWORK_CHANUSERS", userCount);
     reply("CSMSG_SERVICES_UPTIME", intervalString(interval, time(NULL) - boot_time, user->handle_info));
     reply("CSMSG_BURST_LENGTH", intervalString(interval, burst_length, user->handle_info));
     return 1;
index 3c1fb57c97723a2f7a1d0b0247f6daa5674f6d1d..2e0d0c7d388b6a77759be73cdc1113ac80e7e0dc 100644 (file)
@@ -287,7 +287,7 @@ static const struct message_entry msgtab[] = {
     { "NSEMAIL_EMAIL_VERIFY_SUBJECT", "Email address verification for %s" },
     { "NSEMAIL_EMAIL_VERIFY_BODY", "This email has been sent to verify that this address belongs to the same person as %5$s on %1$s.  Your cookie is %2$s.\nTo verify your address as associated with this account, log on to %1$s and type the following command:\n    /msg %3$s@%4$s COOKIE %5$s %2$s\nIf you did NOT request this email address to be associated with this account, you do not need to do anything.  Please contact the %1$s staff if you have questions." },
     { "NSEMAIL_ALLOWAUTH_SUBJECT", "Authentication allowed for %s" },
-    { "NSEMAIL_ALLOWAUTH_BODY", "This email has been sent to let you authenticate (auth) to account %5$s on %1$s.  Your cookie is %2$s.\nTo auth to that account, log on to %1$s and type the following command:\n    /msg %3$s@%4$s COOKIE %5$s %1$s\nIf you did NOT request this authorization, you do not need to do anything.  Please contact the %1$s staff if you have questions." },
+    { "NSEMAIL_ALLOWAUTH_BODY", "This email has been sent to let you authenticate (auth) to account %5$s on %1$s.  Your cookie is %2$s.\nTo auth to that account, log on to %1$s and type the following command:\n    /msg %3$s@%4$s COOKIE %5$s %2$s\nIf you did NOT request this authorization, you do not need to do anything.  Please contact the %1$s staff if you have questions." },
     { "CHECKPASS_YES", "Yes." },
     { "CHECKPASS_NO", "No." },
     { NULL, NULL }