mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-11-23 11:09:23 +01:00
Merge branch 'testing' into unit-tests
Conflicts: src/utils/str.py
This commit is contained in:
commit
17248b5d2c
3
.gitignore
vendored
3
.gitignore
vendored
@ -6,3 +6,6 @@ test-logs
|
||||
*.pyc
|
||||
docs/_build
|
||||
docs/plugins
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
|
0
locale/__init__.py
Normal file
0
locale/__init__.py
Normal file
1043
locale/fr.po
Normal file
1043
locale/fr.po
Normal file
File diff suppressed because it is too large
Load Diff
100
locale/fr.py
Normal file
100
locale/fr.py
Normal file
@ -0,0 +1,100 @@
|
||||
# -*- encoding: utf8 -*-
|
||||
###
|
||||
# Copyright (c) 2010, Valentin Lorentz
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions, and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the author of this software nor the name of
|
||||
# contributors to this software may be used to endorse or promote products
|
||||
# derived from this software without specific prior written consent.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
###
|
||||
|
||||
"""
|
||||
Supybot utility functions localization in French.
|
||||
"""
|
||||
|
||||
def pluralize(s):
|
||||
"""Returns the plural of s.
|
||||
"""
|
||||
lowered = s.lower()
|
||||
if lowered.endswith('ou') and \
|
||||
lowered in ['bijou', 'caillou', 'chou', 'genou', 'hibou', 'joujou',
|
||||
'pou']:
|
||||
return s + 'x'
|
||||
elif lowered.endswith('al') and \
|
||||
lowered not in ['bal', 'carnaval', 'chacal', 'festival', 'récital',
|
||||
'régal', 'cal', 'étal', 'aval', 'caracal', 'val', 'choral',
|
||||
'corral', 'galgal', 'gayal']:
|
||||
return s[0:-2] + 'aux'
|
||||
elif lowered.endswith('ail') and \
|
||||
lowered not in ['bail', 'corail', 'émail', 'soupirail', 'travail',
|
||||
'ventail', 'vitrail', 'aspirail', 'fermail']:
|
||||
return s[0:-3] + 'aux'
|
||||
elif lowered.endswith('eau'):
|
||||
return s + 'x'
|
||||
elif lowered == 'pare-feu':
|
||||
return s
|
||||
elif lowered.endswith('eu') and \
|
||||
lowered not in ['bleu', 'pneu', 'émeu', 'enfeu']:
|
||||
# Note: when 'lieu' is a fish, it has a 's' ; else, it has a 'x'
|
||||
return s + 'x'
|
||||
else:
|
||||
return s + 's'
|
||||
|
||||
def depluralize(s):
|
||||
"""Returns the singular of s."""
|
||||
lowered = s.lower()
|
||||
if lowered.endswith('aux') and \
|
||||
lowered in ['baux', 'coraux', 'émaux', 'soupiraux', 'travaux',
|
||||
'ventaux', 'vitraux', 'aspiraux', 'fermaux']:
|
||||
return s[0:-3] + 'ail'
|
||||
elif lowered.endswith('aux'):
|
||||
return s[0:-3] + 'al'
|
||||
else:
|
||||
return s[0:-1]
|
||||
|
||||
def ordinal(i):
|
||||
"""Returns i + the ordinal indicator for the number.
|
||||
|
||||
Example: ordinal(3) => '3ème'
|
||||
"""
|
||||
i = int(i)
|
||||
if i == 1:
|
||||
return '1er'
|
||||
else:
|
||||
return '%sème' % i
|
||||
|
||||
def be(i):
|
||||
"""Returns the form of the verb 'être' based on the number i."""
|
||||
# Note: this function is used only for the third person
|
||||
if i == 1:
|
||||
return 'est'
|
||||
else:
|
||||
return 'sont'
|
||||
|
||||
def has(i):
|
||||
"""Returns the form of the verb 'avoir' based on the number i."""
|
||||
# Note: this function is used only for the third person
|
||||
if i == 1:
|
||||
return 'a'
|
||||
else:
|
||||
return 'ont'
|
1042
locale/messages.pot
Normal file
1042
locale/messages.pot
Normal file
File diff suppressed because it is too large
Load Diff
@ -30,6 +30,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Admin')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
|
202
plugins/Admin/locale/fr.po
Normal file
202
plugins/Admin/locale/fr.po
Normal file
@ -0,0 +1,202 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-16 10:43+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: ProgVal <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: French\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: Ascii\n"
|
||||
|
||||
#: plugin.py:54
|
||||
msgid "Nick/channel temporarily unavailable."
|
||||
msgstr "Nick/canal temporairement indisponible"
|
||||
|
||||
#: plugin.py:72
|
||||
msgid "Cannot join %s, it's full."
|
||||
msgstr "Ne peut joindre %s, il est plein."
|
||||
|
||||
#: plugin.py:80
|
||||
msgid "Cannot join %s, I was not invited."
|
||||
msgstr "Ne peut joindre %s, pas invité."
|
||||
|
||||
#: plugin.py:88
|
||||
msgid "Cannot join %s, it's banned me."
|
||||
msgstr "Ne peut joindre %s, j'y suis banni."
|
||||
|
||||
#: plugin.py:96
|
||||
msgid "Cannot join %s, my keyword was wrong."
|
||||
msgstr "Ne peut joindre %s, mon mot de passe est mauvais."
|
||||
|
||||
#: plugin.py:104
|
||||
msgid "Cannot join %s, I'm not identified with the NickServ."
|
||||
msgstr "Ne peut joindre %s, je ne suis pas identifié auprès de NickServ."
|
||||
|
||||
#: plugin.py:134
|
||||
msgid ""
|
||||
"<channel> [<key>]\n"
|
||||
"\n"
|
||||
" Tell the bot to join the given channel. If <key> is given, it is used\n"
|
||||
" when attempting to join the channel.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<canal> [<clef>]\n"
|
||||
"\n"
|
||||
"Dit au bot de rejoindre le canal donné. Si la <clef> est donnée, elle est utilisée pour rejoindre le canal."
|
||||
|
||||
#: plugin.py:147
|
||||
msgid "I'm already too close to maximum number of channels for this network."
|
||||
msgstr "Je suis déjà sur un nombre de canaux trop grand pour ce réseau."
|
||||
|
||||
#: plugin.py:156
|
||||
msgid ""
|
||||
"takes no arguments\n"
|
||||
"\n"
|
||||
" Returns the channels the bot is on. Must be given in private, in order\n"
|
||||
" to protect the secrecy of secret channels.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"Ne prend pas d'argument \n"
|
||||
"\n"
|
||||
"Retourne les canaux sur lesquels le bot est. Doit être en privé, dans le but d'éviter que les canaux secrets ne soient divulgués."
|
||||
|
||||
#: plugin.py:166
|
||||
msgid "I'm not currently in any channels."
|
||||
msgstr "Je ne suis actuellement sur aucun canal."
|
||||
|
||||
#: plugin.py:172
|
||||
msgid "My connection is restricted, I can't change nicks."
|
||||
msgstr "Ma connexion est restreinte, je ne peux changer de nick."
|
||||
|
||||
#: plugin.py:179
|
||||
msgid "Someone else is already using that nick."
|
||||
msgstr "Quelqu'un d'autre utilise déjà ce nick."
|
||||
|
||||
#: plugin.py:186
|
||||
msgid "That nick is currently banned."
|
||||
msgstr "Ce nick est banni."
|
||||
|
||||
#: plugin.py:193
|
||||
msgid "I can't change nicks, the server said %q."
|
||||
msgstr "Je ne peux changer de nick, le serveur a dit %q."
|
||||
|
||||
#: plugin.py:207
|
||||
msgid ""
|
||||
"[<nick>]\n"
|
||||
"\n"
|
||||
" Changes the bot's nick to <nick>. If no nick is given, returns the\n"
|
||||
" bot's current nick.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<nick>]\n"
|
||||
"\n"
|
||||
"Change le nick du bot à <nick>. Si aucun nick n'est donné, retourne le nick actuel du bot."
|
||||
|
||||
#: plugin.py:222
|
||||
msgid ""
|
||||
"[<channel>] [<reason>]\n"
|
||||
"\n"
|
||||
" Tells the bot to part the list of channels you give it. <channel> is\n"
|
||||
" only necessary if you want the bot to part a channel other than the\n"
|
||||
" current channel. If <reason> is specified, use it as the part\n"
|
||||
" message.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<raison>]\n"
|
||||
"\n"
|
||||
"Dit au bot de partir de la liste de canaux que vous avez donnée. <canal> n'est nécessaire que si vous voulez que le bot parte d'un autre canal que l'actuel. Si la <raison> est spécifiée, elle est utilisée comme message de départ."
|
||||
|
||||
#: plugin.py:240
|
||||
msgid "I'm not in %s."
|
||||
msgstr "Je ne suis pas sur %s."
|
||||
|
||||
#: plugin.py:252
|
||||
msgid ""
|
||||
"<name|hostmask> <capability>\n"
|
||||
"\n"
|
||||
" Gives the user specified by <name> (or the user to whom <hostmask>\n"
|
||||
" currently maps) the specified capability <capability>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<nom|masque d'hôte> <capacité>\n"
|
||||
"\n"
|
||||
"Donne la <capacité> à l'utilisateur spécifié par <nom> (ou l'utilisateur à qui correspond <masque d'hôte>)."
|
||||
|
||||
#: plugin.py:272
|
||||
msgid "The \"owner\" capability can't be added in the bot. Use the supybot-adduser program (or edit the users.conf file yourself) to add an owner capability."
|
||||
msgstr "La capabilité \"owner\" ne peut être ajoutée via le bot. Utilisez le programme supybot-adduser (ou éditez le fichier users.conf vous-même) pour ajouter la capacité owner."
|
||||
|
||||
#: plugin.py:283
|
||||
msgid "You can't add capabilities you don't have."
|
||||
msgstr "Vous ne pouvez ajouter des permissions que vous n'avez pas."
|
||||
|
||||
#: plugin.py:288
|
||||
msgid ""
|
||||
"<name|hostmask> <capability>\n"
|
||||
"\n"
|
||||
" Takes from the user specified by <name> (or the user to whom\n"
|
||||
" <hostmask> currently maps) the specified capability <capability>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<nom|masque d'hôte> <capacité>\n"
|
||||
"\n"
|
||||
"Retire la <capacité> à l'utilisateur spécifié par le <nom> (ou celui à qui correspond le <masque d'hôte>)."
|
||||
|
||||
#: plugin.py:300
|
||||
msgid "That user doesn't have that capability."
|
||||
msgstr "Cet utilisateur n'a pas cette permission."
|
||||
|
||||
#: plugin.py:302
|
||||
msgid "You can't remove capabilities you don't have."
|
||||
msgstr "Vous ne pouvez retirer des permissions que vous n'avez pas."
|
||||
|
||||
#: plugin.py:310
|
||||
msgid ""
|
||||
"<hostmask|nick> [<expires>]\n"
|
||||
"\n"
|
||||
" This will set a persistent ignore on <hostmask> or the hostmask\n"
|
||||
" currently associated with <nick>. <expires> is an optional argument\n"
|
||||
" specifying when (in \"seconds from now\") the ignore will expire; if\n"
|
||||
" it isn't given, the ignore will never automatically expire.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<masque d'hôte|nick> [<expiration>]\n"
|
||||
"\n"
|
||||
"Ajoute un masque d'ignorance persistant sur le <masque d'hôte>, ou sur le masque d'hôte de <nick>. <expiration> est un argument optionnel spécifiant quand (en \"secondes à partir de maintenant\") l'ignorance expirera ; si elle n'est pas donnée, l'ignorance n'expirera jamais."
|
||||
|
||||
#: plugin.py:323
|
||||
msgid ""
|
||||
"<hostmask|nick>\n"
|
||||
"\n"
|
||||
" This will remove the persistent ignore on <hostmask> or the\n"
|
||||
" hostmask currently associated with <nick>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<masque d'hôte|nick>\n"
|
||||
"\n"
|
||||
"Ceci retirera le masque d'ignorance persistant sur le <masque d'hôte>, ou sur le masque d'hôte associé au <nick>."
|
||||
|
||||
#: plugin.py:332
|
||||
msgid "%s wasn't in the ignores database."
|
||||
msgstr "%s n'étais pas dans ma base de données d'ignorance."
|
||||
|
||||
#: plugin.py:337
|
||||
msgid ""
|
||||
"takes no arguments\n"
|
||||
"\n"
|
||||
" Lists the hostmasks that the bot is ignoring.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"Ne prend pas d'argument\n"
|
||||
"\n"
|
||||
"Liste les masques d'hôte que le bot ignore."
|
||||
|
||||
#: plugin.py:345
|
||||
msgid "I'm not currently globally ignoring anyone."
|
||||
msgstr "Je n'ignore actuellement personne globalement."
|
||||
|
187
plugins/Admin/messages.pot
Normal file
187
plugins/Admin/messages.pot
Normal file
@ -0,0 +1,187 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-16 10:43+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: plugin.py:54
|
||||
#, docstring
|
||||
msgid "Nick/channel temporarily unavailable."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:72
|
||||
msgid "Cannot join %s, it's full."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:80
|
||||
msgid "Cannot join %s, I was not invited."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:88
|
||||
msgid "Cannot join %s, it's banned me."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:96
|
||||
msgid "Cannot join %s, my keyword was wrong."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:104
|
||||
msgid "Cannot join %s, I'm not identified with the NickServ."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:134
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<channel> [<key>]\n"
|
||||
"\n"
|
||||
" Tell the bot to join the given channel. If <key> is given, it is used\n"
|
||||
" when attempting to join the channel.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:147
|
||||
msgid "I'm already too close to maximum number of channels for this network."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:156
|
||||
#, docstring
|
||||
msgid ""
|
||||
"takes no arguments\n"
|
||||
"\n"
|
||||
" Returns the channels the bot is on. Must be given in private, in order\n"
|
||||
" to protect the secrecy of secret channels.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:166
|
||||
msgid "I'm not currently in any channels."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:172
|
||||
msgid "My connection is restricted, I can't change nicks."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:179
|
||||
msgid "Someone else is already using that nick."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:186
|
||||
msgid "That nick is currently banned."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:193
|
||||
msgid "I can't change nicks, the server said %q."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:207
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<nick>]\n"
|
||||
"\n"
|
||||
" Changes the bot's nick to <nick>. If no nick is given, returns the\n"
|
||||
" bot's current nick.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:222
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<reason>]\n"
|
||||
"\n"
|
||||
" Tells the bot to part the list of channels you give it. <channel> is\n"
|
||||
" only necessary if you want the bot to part a channel other than the\n"
|
||||
" current channel. If <reason> is specified, use it as the part\n"
|
||||
" message.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:240
|
||||
msgid "I'm not in %s."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:252
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<name|hostmask> <capability>\n"
|
||||
"\n"
|
||||
" Gives the user specified by <name> (or the user to whom <hostmask>\n"
|
||||
" currently maps) the specified capability <capability>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:272
|
||||
msgid "The \"owner\" capability can't be added in the bot. Use the supybot-adduser program (or edit the users.conf file yourself) to add an owner capability."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:283
|
||||
msgid "You can't add capabilities you don't have."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:288
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<name|hostmask> <capability>\n"
|
||||
"\n"
|
||||
" Takes from the user specified by <name> (or the user to whom\n"
|
||||
" <hostmask> currently maps) the specified capability <capability>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:300
|
||||
msgid "That user doesn't have that capability."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:302
|
||||
msgid "You can't remove capabilities you don't have."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:310
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<hostmask|nick> [<expires>]\n"
|
||||
"\n"
|
||||
" This will set a persistent ignore on <hostmask> or the hostmask\n"
|
||||
" currently associated with <nick>. <expires> is an optional argument\n"
|
||||
" specifying when (in \"seconds from now\") the ignore will expire; if\n"
|
||||
" it isn't given, the ignore will never automatically expire.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:323
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<hostmask|nick>\n"
|
||||
"\n"
|
||||
" This will remove the persistent ignore on <hostmask> or the\n"
|
||||
" hostmask currently associated with <nick>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:332
|
||||
msgid "%s wasn't in the ignores database."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:337
|
||||
#, docstring
|
||||
msgid ""
|
||||
"takes no arguments\n"
|
||||
"\n"
|
||||
" Lists the hostmasks that the bot is ignoring.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:345
|
||||
msgid "I'm not currently globally ignoring anyone."
|
||||
msgstr ""
|
||||
|
@ -1,5 +1,6 @@
|
||||
###
|
||||
# Copyright (c) 2002-2005, Jeremiah Fincher
|
||||
# Copyright (c) 2010, Valentin Lorentz
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@ -38,6 +39,8 @@ import supybot.ircmsgs as ircmsgs
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.schedule as schedule
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Admin')
|
||||
|
||||
class Admin(callbacks.Plugin):
|
||||
def __init__(self, irc):
|
||||
@ -46,6 +49,7 @@ class Admin(callbacks.Plugin):
|
||||
self.joins = {}
|
||||
self.pendingNickChanges = {}
|
||||
|
||||
@internationalizeDocstring
|
||||
def do437(self, irc, msg):
|
||||
"""Nick/channel temporarily unavailable."""
|
||||
target = msg.args[0]
|
||||
@ -65,7 +69,7 @@ class Admin(callbacks.Plugin):
|
||||
try:
|
||||
channel = msg.args[1]
|
||||
(irc, msg) = self.joins.pop(channel)
|
||||
irc.error('Cannot join %s, it\'s full.' % channel)
|
||||
irc.error(_('Cannot join %s, it\'s full.') % channel)
|
||||
except KeyError:
|
||||
self.log.debug('Got 471 without Admin.join being called.')
|
||||
|
||||
@ -73,7 +77,7 @@ class Admin(callbacks.Plugin):
|
||||
try:
|
||||
channel = msg.args[1]
|
||||
(irc, msg) = self.joins.pop(channel)
|
||||
irc.error('Cannot join %s, I was not invited.' % channel)
|
||||
irc.error(_('Cannot join %s, I was not invited.') % channel)
|
||||
except KeyError:
|
||||
self.log.debug('Got 473 without Admin.join being called.')
|
||||
|
||||
@ -81,7 +85,7 @@ class Admin(callbacks.Plugin):
|
||||
try:
|
||||
channel = msg.args[1]
|
||||
(irc, msg) = self.joins.pop(channel)
|
||||
irc.error('Cannot join %s, it\'s banned me.' % channel)
|
||||
irc.error(_('Cannot join %s, it\'s banned me.') % channel)
|
||||
except KeyError:
|
||||
self.log.debug('Got 474 without Admin.join being called.')
|
||||
|
||||
@ -89,7 +93,7 @@ class Admin(callbacks.Plugin):
|
||||
try:
|
||||
channel = msg.args[1]
|
||||
(irc, msg) = self.joins.pop(channel)
|
||||
irc.error('Cannot join %s, my keyword was wrong.' % channel)
|
||||
irc.error(_('Cannot join %s, my keyword was wrong.') % channel)
|
||||
except KeyError:
|
||||
self.log.debug('Got 475 without Admin.join being called.')
|
||||
|
||||
@ -97,8 +101,8 @@ class Admin(callbacks.Plugin):
|
||||
try:
|
||||
channel = msg.args[1]
|
||||
(irc, msg) = self.joins.pop(channel)
|
||||
irc.error('Cannot join %s, I\'m not identified with the NickServ.'
|
||||
% channel)
|
||||
irc.error(_('Cannot join %s, I\'m not identified with the '
|
||||
'NickServ.') % channel)
|
||||
except KeyError:
|
||||
self.log.debug('Got 515 without Admin.join being called.')
|
||||
|
||||
@ -125,6 +129,7 @@ class Admin(callbacks.Plugin):
|
||||
'the user lacked the "admin" capability.',
|
||||
channel, msg.prefix)
|
||||
|
||||
@internationalizeDocstring
|
||||
def join(self, irc, msg, args, channel, key):
|
||||
"""<channel> [<key>]
|
||||
|
||||
@ -139,13 +144,14 @@ class Admin(callbacks.Plugin):
|
||||
networkGroup.channels.key.get(channel).setValue(key)
|
||||
maxchannels = irc.state.supported.get('maxchannels', sys.maxint)
|
||||
if len(irc.state.channels) + 1 > maxchannels:
|
||||
irc.error('I\'m already too close to maximum number of '
|
||||
'channels for this network.', Raise=True)
|
||||
irc.error(_('I\'m already too close to maximum number of '
|
||||
'channels for this network.'), Raise=True)
|
||||
irc.queueMsg(networkGroup.channels.join(channel))
|
||||
irc.noReply()
|
||||
self.joins[channel] = (irc, msg)
|
||||
join = wrap(join, ['validChannel', additional('something')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def channels(self, irc, msg, args):
|
||||
"""takes no arguments
|
||||
|
||||
@ -157,34 +163,34 @@ class Admin(callbacks.Plugin):
|
||||
utils.sortBy(ircutils.toLower, L)
|
||||
irc.reply(format('%L', L))
|
||||
else:
|
||||
irc.reply('I\'m not currently in any channels.')
|
||||
irc.reply(_('I\'m not currently in any channels.'))
|
||||
channels = wrap(channels, ['private'])
|
||||
|
||||
def do484(self, irc, msg):
|
||||
irc = self.pendingNickChanges.get(irc, None)
|
||||
if irc is not None:
|
||||
irc.error('My connection is restricted, I can\'t change nicks.')
|
||||
irc.error(_('My connection is restricted, I can\'t change nicks.'))
|
||||
else:
|
||||
self.log.debug('Got 484 without Admin.nick being called.')
|
||||
|
||||
def do433(self, irc, msg):
|
||||
irc = self.pendingNickChanges.get(irc, None)
|
||||
if irc is not None:
|
||||
irc.error('Someone else is already using that nick.')
|
||||
irc.error(_('Someone else is already using that nick.'))
|
||||
else:
|
||||
self.log.debug('Got 433 without Admin.nick being called.')
|
||||
|
||||
def do435(self, irc, msg):
|
||||
irc = self.pendingNickChanges.get(irc, None)
|
||||
if irc is not None:
|
||||
irc.error('That nick is currently banned.')
|
||||
irc.error(_('That nick is currently banned.'))
|
||||
else:
|
||||
self.log.debug('Got 435 without Admin.nick being called.')
|
||||
|
||||
def do438(self, irc, msg):
|
||||
irc = self.pendingNickChanges.get(irc, None)
|
||||
if irc is not None:
|
||||
irc.error(format('I can\'t change nicks, the server said %q.',
|
||||
irc.error(format(_('I can\'t change nicks, the server said %q.'),
|
||||
msg.args[2]), private=True)
|
||||
else:
|
||||
self.log.debug('Got 438 without Admin.nick being called.')
|
||||
@ -196,6 +202,7 @@ class Admin(callbacks.Plugin):
|
||||
except KeyError:
|
||||
self.log.debug('Got NICK without Admin.nick being called.')
|
||||
|
||||
@internationalizeDocstring
|
||||
def nick(self, irc, msg, args, nick):
|
||||
"""[<nick>]
|
||||
|
||||
@ -210,6 +217,7 @@ class Admin(callbacks.Plugin):
|
||||
irc.reply(irc.nick)
|
||||
nick = wrap(nick, [additional('nick')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def part(self, irc, msg, args, channel, reason):
|
||||
"""[<channel>] [<reason>]
|
||||
|
||||
@ -229,7 +237,7 @@ class Admin(callbacks.Plugin):
|
||||
except KeyError:
|
||||
pass
|
||||
if channel not in irc.state.channels:
|
||||
irc.error('I\'m not in %s.' % channel, Raise=True)
|
||||
irc.error(_('I\'m not in %s.') % channel, Raise=True)
|
||||
irc.queueMsg(ircmsgs.part(channel, reason or msg.nick))
|
||||
if msg.nick in irc.state.channels[channel].users:
|
||||
irc.noReply()
|
||||
@ -239,6 +247,7 @@ class Admin(callbacks.Plugin):
|
||||
|
||||
class capability(callbacks.Commands):
|
||||
|
||||
@internationalizeDocstring
|
||||
def add(self, irc, msg, args, user, capability):
|
||||
"""<name|hostmask> <capability>
|
||||
|
||||
@ -260,10 +269,10 @@ class Admin(callbacks.Plugin):
|
||||
# will depend on supybot.capabilities and its child default) but
|
||||
# generally means they can't mess with channel capabilities.
|
||||
if ircutils.strEqual(capability, 'owner'):
|
||||
irc.error('The "owner" capability can\'t be added in the bot.'
|
||||
' Use the supybot-adduser program (or edit the '
|
||||
irc.error(_('The "owner" capability can\'t be added in the '
|
||||
'bot. Use the supybot-adduser program (or edit the '
|
||||
'users.conf file yourself) to add an owner '
|
||||
'capability.')
|
||||
'capability.'))
|
||||
return
|
||||
if ircdb.isAntiCapability(capability) or \
|
||||
ircdb.checkCapability(msg.prefix, capability):
|
||||
@ -271,9 +280,10 @@ class Admin(callbacks.Plugin):
|
||||
ircdb.users.setUser(user)
|
||||
irc.replySuccess()
|
||||
else:
|
||||
irc.error('You can\'t add capabilities you don\'t have.')
|
||||
irc.error(_('You can\'t add capabilities you don\'t have.'))
|
||||
add = wrap(add, ['otherUser', 'lowered'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def remove(self, irc, msg, args, user, capability):
|
||||
"""<name|hostmask> <capability>
|
||||
|
||||
@ -287,14 +297,15 @@ class Admin(callbacks.Plugin):
|
||||
ircdb.users.setUser(user)
|
||||
irc.replySuccess()
|
||||
except KeyError:
|
||||
irc.error('That user doesn\'t have that capability.')
|
||||
irc.error(_('That user doesn\'t have that capability.'))
|
||||
else:
|
||||
s = 'You can\'t remove capabilities you don\'t have.'
|
||||
s = _('You can\'t remove capabilities you don\'t have.')
|
||||
irc.error(s)
|
||||
remove = wrap(remove, ['otherUser','lowered'])
|
||||
|
||||
class ignore(callbacks.Commands):
|
||||
|
||||
@internationalizeDocstring
|
||||
def add(self, irc, msg, args, hostmask, expires):
|
||||
"""<hostmask|nick> [<expires>]
|
||||
|
||||
@ -307,6 +318,7 @@ class Admin(callbacks.Plugin):
|
||||
irc.replySuccess()
|
||||
add = wrap(add, ['hostmask', additional('expiry', 0)])
|
||||
|
||||
@internationalizeDocstring
|
||||
def remove(self, irc, msg, args, hostmask):
|
||||
"""<hostmask|nick>
|
||||
|
||||
@ -317,9 +329,10 @@ class Admin(callbacks.Plugin):
|
||||
ircdb.ignores.remove(hostmask)
|
||||
irc.replySuccess()
|
||||
except KeyError:
|
||||
irc.error('%s wasn\'t in the ignores database.' % hostmask)
|
||||
irc.error(_('%s wasn\'t in the ignores database.') % hostmask)
|
||||
remove = wrap(remove, ['hostmask'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def list(self, irc, msg, args):
|
||||
"""takes no arguments
|
||||
|
||||
@ -329,7 +342,7 @@ class Admin(callbacks.Plugin):
|
||||
if ircdb.ignores.hostmasks:
|
||||
irc.reply(format('%L', (map(repr,ircdb.ignores.hostmasks))))
|
||||
else:
|
||||
irc.reply('I\'m not currently globally ignoring anyone.')
|
||||
irc.reply(_('I\'m not currently globally ignoring anyone.'))
|
||||
list = wrap(list)
|
||||
|
||||
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Alias')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
|
99
plugins/Alias/locale/fr.po
Normal file
99
plugins/Alias/locale/fr.po
Normal file
@ -0,0 +1,99 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-16 14:10+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: plugin.py:45
|
||||
msgid ""
|
||||
"Returns the channel the msg came over or the channel given in args.\n"
|
||||
"\n"
|
||||
" If the channel was given in args, args is modified (the channel is\n"
|
||||
" removed).\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"Retourne le canal duquel vient le message ou le canal donné en argument.\n"
|
||||
"\n"
|
||||
"Si le canal était donné en argument, args est modifié (le canal est supprimé)."
|
||||
|
||||
#: plugin.py:164
|
||||
msgid " at least"
|
||||
msgstr "au moins"
|
||||
|
||||
#: plugin.py:165
|
||||
msgid ""
|
||||
"<an alias,%s %n>\n"
|
||||
"\n"
|
||||
"Alias for %q."
|
||||
msgstr ""
|
||||
"<un alias,%s %n>\n"
|
||||
"\n"
|
||||
"Alias pour %q."
|
||||
|
||||
#: plugin.py:220
|
||||
msgid ""
|
||||
"<alias>\n"
|
||||
"\n"
|
||||
" Locks an alias so that no one else can change it.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<alias>\n"
|
||||
"\n"
|
||||
"Vérouille un alias pour que personne d'autre ne puisse le changer."
|
||||
|
||||
#: plugin.py:229
|
||||
#: plugin.py:243
|
||||
msgid "There is no such alias."
|
||||
msgstr "Cet alias n'existe pas."
|
||||
|
||||
#: plugin.py:234
|
||||
msgid ""
|
||||
"<alias>\n"
|
||||
"\n"
|
||||
" Unlocks an alias so that people can define new aliases over it.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<alias>\n"
|
||||
"\n"
|
||||
"Déverrouille un alias de façon à ce que des gens puissent le redéfinir."
|
||||
|
||||
#: plugin.py:254
|
||||
msgid "That name isn't valid. Try %q instead."
|
||||
msgstr "Ce nom n'est pas valide. Essayez plutôt %q."
|
||||
|
||||
#: plugin.py:292
|
||||
msgid ""
|
||||
"<name> <alias>\n"
|
||||
"\n"
|
||||
" Defines an alias <name> that executes <alias>. The <alias>\n"
|
||||
" should be in the standard \"command argument [nestedcommand argument]\"\n"
|
||||
" arguments to the alias; they'll be filled with the first, second, etc.\n"
|
||||
" arguments. $1, $2, etc. can be used for required arguments. @1, @2,\n"
|
||||
" etc. can be used for optional arguments. $* simply means \"all\n"
|
||||
" remaining arguments,\" and cannot be combined with optional arguments.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<nom> <alias>\n"
|
||||
"\n"
|
||||
"Défini un alias <nom> qui exécute <alias>. L'<alias> peut être dans le standard \"commande argument [commandeimbriquee argument]\". Les arguments donnés à l'alias doivent être donnés dans l'ordre. Vous pouvez utiliser $1, $2, etc pour symboliser les arguments obligatoires qui seront donnés à l'alias, et @1, @2, etc pour symboliser ceux optionnels. $* signifie simplement *tous* les arguments restants, et ne peut être combiné avec des arguments optionnels."
|
||||
|
||||
#: plugin.py:315
|
||||
msgid ""
|
||||
"<name>\n"
|
||||
"\n"
|
||||
" Removes the given alias, if unlocked.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<nom>\n"
|
||||
"\n"
|
||||
"Supprime l'alias donné, si il n'est pas vérouillé."
|
||||
|
87
plugins/Alias/messages.pot
Normal file
87
plugins/Alias/messages.pot
Normal file
@ -0,0 +1,87 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-16 14:10+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: plugin.py:45
|
||||
#, docstring
|
||||
msgid ""
|
||||
"Returns the channel the msg came over or the channel given in args.\n"
|
||||
"\n"
|
||||
" If the channel was given in args, args is modified (the channel is\n"
|
||||
" removed).\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:164
|
||||
msgid " at least"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:165
|
||||
msgid ""
|
||||
"<an alias,%s %n>\n"
|
||||
"\n"
|
||||
"Alias for %q."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:220
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<alias>\n"
|
||||
"\n"
|
||||
" Locks an alias so that no one else can change it.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:229 plugin.py:243
|
||||
msgid "There is no such alias."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:234
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<alias>\n"
|
||||
"\n"
|
||||
" Unlocks an alias so that people can define new aliases over it.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:254
|
||||
msgid "That name isn't valid. Try %q instead."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:292
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<name> <alias>\n"
|
||||
"\n"
|
||||
" Defines an alias <name> that executes <alias>. The <alias>\n"
|
||||
" should be in the standard \"command argument [nestedcommand argument]\"\n"
|
||||
" arguments to the alias; they'll be filled with the first, second, etc.\n"
|
||||
" arguments. $1, $2, etc. can be used for required arguments. @1, @2,\n"
|
||||
" etc. can be used for optional arguments. $* simply means \"all\n"
|
||||
" remaining arguments,\" and cannot be combined with optional arguments.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:315
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<name>\n"
|
||||
"\n"
|
||||
" Removes the given alias, if unlocked.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
@ -37,6 +37,8 @@ from supybot.commands import *
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.registry as registry
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Alias')
|
||||
|
||||
# Copied from the old privmsgs.py.
|
||||
def getChannel(msg, args=()):
|
||||
@ -159,9 +161,9 @@ def makeNewAlias(name, alias):
|
||||
self.Proxy(irc, msg, tokens)
|
||||
flexargs = ''
|
||||
if biggestDollar and (wildcard or biggestAt):
|
||||
flexargs = ' at least'
|
||||
doc =format('<an alias,%s %n>\n\nAlias for %q.',
|
||||
flexargs, (biggestDollar, 'argument'), alias)
|
||||
flexargs = _(' at least')
|
||||
doc =format(_('<an alias,%s %n>\n\nAlias for %q.'),
|
||||
flexargs, (biggestDollar, _('argument')), alias)
|
||||
f = utils.python.changeFunctionName(f, name, doc)
|
||||
return f
|
||||
|
||||
@ -213,6 +215,7 @@ class Alias(callbacks.Plugin):
|
||||
except AttributeError:
|
||||
return self.aliases[command[0]][2]
|
||||
|
||||
@internationalizeDocstring
|
||||
def lock(self, irc, msg, args, name):
|
||||
"""<alias>
|
||||
|
||||
@ -223,9 +226,10 @@ class Alias(callbacks.Plugin):
|
||||
conf.supybot.plugins.Alias.aliases.get(name).locked.setValue(True)
|
||||
irc.replySuccess()
|
||||
else:
|
||||
irc.error('There is no such alias.')
|
||||
irc.error(_('There is no such alias.'))
|
||||
lock = wrap(lock, [('checkCapability', 'admin'), 'commandName'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def unlock(self, irc, msg, args, name):
|
||||
"""<alias>
|
||||
|
||||
@ -236,7 +240,7 @@ class Alias(callbacks.Plugin):
|
||||
conf.supybot.plugins.Alias.aliases.get(name).locked.setValue(False)
|
||||
irc.replySuccess()
|
||||
else:
|
||||
irc.error('There is no such alias.')
|
||||
irc.error(_('There is no such alias.'))
|
||||
unlock = wrap(unlock, [('checkCapability', 'admin'), 'commandName'])
|
||||
|
||||
_invalidCharsRe = re.compile(r'[\[\]\s]')
|
||||
@ -247,7 +251,7 @@ class Alias(callbacks.Plugin):
|
||||
raise AliasError, 'Names cannot contain pipes.'
|
||||
realName = callbacks.canonicalName(name)
|
||||
if name != realName:
|
||||
s = format('That name isn\'t valid. Try %q instead.', realName)
|
||||
s = format(_('That name isn\'t valid. Try %q instead.'), realName)
|
||||
raise AliasError, s
|
||||
name = realName
|
||||
if self.isCommandMethod(name):
|
||||
@ -283,6 +287,7 @@ class Alias(callbacks.Plugin):
|
||||
else:
|
||||
raise AliasError, 'There is no such alias.'
|
||||
|
||||
@internationalizeDocstring
|
||||
def add(self, irc, msg, args, name, alias):
|
||||
"""<name> <alias>
|
||||
|
||||
@ -305,6 +310,7 @@ class Alias(callbacks.Plugin):
|
||||
irc.error(str(e))
|
||||
add = wrap(add, ['commandName', 'text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def remove(self, irc, msg, args, name):
|
||||
"""<name>
|
||||
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Anonymous')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
@ -44,20 +46,20 @@ Anonymous = conf.registerPlugin('Anonymous')
|
||||
# conf.registerGlobalValue(Anonymous, 'someConfigVariableName',
|
||||
# registry.Boolean(False, """Help for someConfigVariableName."""))
|
||||
conf.registerChannelValue(conf.supybot.plugins.Anonymous,
|
||||
'requirePresenceInChannel', registry.Boolean(True, """Determines whether
|
||||
'requirePresenceInChannel', registry.Boolean(True, _("""Determines whether
|
||||
the bot should require people trying to use this plugin to be in the
|
||||
channel they wish to anonymously send to."""))
|
||||
channel they wish to anonymously send to.""")))
|
||||
conf.registerGlobalValue(conf.supybot.plugins.Anonymous, 'requireRegistration',
|
||||
registry.Boolean(True, """Determines whether the bot should require people
|
||||
trying to use this plugin to be registered."""))
|
||||
registry.Boolean(True, _("""Determines whether the bot should require
|
||||
people trying to use this plugin to be registered.""")))
|
||||
conf.registerGlobalValue(conf.supybot.plugins.Anonymous, 'requireCapability',
|
||||
registry.String('', """Determines what capability (if any) the bot should
|
||||
require people trying to use this plugin to have."""))
|
||||
registry.String('', _("""Determines what capability (if any) the bot should
|
||||
require people trying to use this plugin to have.""")))
|
||||
conf.registerGlobalValue(conf.supybot.plugins.Anonymous, 'allowPrivateTarget',
|
||||
registry.Boolean(False, """Determines whether the bot will require targets
|
||||
of the "say" command to be public (i.e., channels). If this is True, the
|
||||
bot will allow people to use the "say" command to send private messages to
|
||||
other users."""))
|
||||
registry.Boolean(False, _("""Determines whether the bot will require
|
||||
targets of the "say" command to be public (i.e., channels). If this is
|
||||
True, the bot will allow people to use the "say" command to send private
|
||||
messages to other users.""")))
|
||||
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
||||
|
80
plugins/Anonymous/locale/fr.po
Normal file
80
plugins/Anonymous/locale/fr.po
Normal file
@ -0,0 +1,80 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-16 15:14+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: config.py:49
|
||||
msgid ""
|
||||
"Determines whether\n"
|
||||
" the bot should require people trying to use this plugin to be in the\n"
|
||||
" channel they wish to anonymously send to."
|
||||
msgstr "Détermine si le bot requiérera que les gens soient sur le canal pour y envoyer des messages anonymement."
|
||||
|
||||
#: config.py:53
|
||||
msgid ""
|
||||
"Determines whether the bot should require\n"
|
||||
" people trying to use this plugin to be registered."
|
||||
msgstr "Détermine si le bot requiérera que les personnes utilisant ce plugin soient enregistrées."
|
||||
|
||||
#: config.py:56
|
||||
msgid ""
|
||||
"Determines what capability (if any) the bot should\n"
|
||||
" require people trying to use this plugin to have."
|
||||
msgstr "Détermine quelle permission (s'il y en a une) le bot requiéra que les gens utilisant ce plugin aient."
|
||||
|
||||
#: config.py:59
|
||||
msgid ""
|
||||
"Determines whether the bot will require \n"
|
||||
" targets of the \"say\" command to be public (i.e., channels). If this is\n"
|
||||
" True, the bot will allow people to use the \"say\" command to send private\n"
|
||||
" messages to other users."
|
||||
msgstr "Détermine si le bot requiérera que les cibles de la commande \"say\" soient publiques (c'est à dire des canaux). Si c'est True, le bot autorisera les personnes à utiliser la commande \"say\" pour envoyer des messages à d'autres utilisateurs en privé."
|
||||
|
||||
#: plugin.py:41
|
||||
msgid ""
|
||||
"This plugin allows users to act through the bot anonymously. The 'do'\n"
|
||||
" command has the bot perform an anonymous action in a given channel, and\n"
|
||||
" the 'say' command allows other people to speak through the bot. Since\n"
|
||||
" this can be fairly well abused, you might want to set\n"
|
||||
" supybot.plugins.Anonymous.requireCapability so only users with that\n"
|
||||
" capability can use this plugin. For extra security, you can require that\n"
|
||||
" the user be *in* the channel they are trying to address anonymously with\n"
|
||||
" supybot.plugins.Anonymous.requirePresenceInChannel, or you can require\n"
|
||||
" that the user be registered by setting\n"
|
||||
" supybot.plugins.Anonymous.requireRegistration.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:81
|
||||
msgid ""
|
||||
"<channel|nick> <text>\n"
|
||||
"\n"
|
||||
" Sends <text> to <channel|nick>. Can only send to <nick> if\n"
|
||||
" supybot.plugins.Anonymous.allowPrivateTarget is True.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<canal|nick> <text>\n"
|
||||
"\n"
|
||||
"Envoie le <texte> au <canal|nick>. Vous ne pouvez envoyer à <nick> que si /cs register ##fschfsch supybot.plugins.Anonymous.allowPrivateTarget vaut True."
|
||||
|
||||
#: plugin.py:95
|
||||
msgid ""
|
||||
"<channel> <action>\n"
|
||||
"\n"
|
||||
" Performs <action> in <channel>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<canal> <action>\n"
|
||||
"\n"
|
||||
"Effectue l'<action> sur le <canal>."
|
||||
|
79
plugins/Anonymous/messages.pot
Normal file
79
plugins/Anonymous/messages.pot
Normal file
@ -0,0 +1,79 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-16 15:14+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: config.py:49
|
||||
msgid ""
|
||||
"Determines whether\n"
|
||||
" the bot should require people trying to use this plugin to be in the\n"
|
||||
" channel they wish to anonymously send to."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:53
|
||||
msgid ""
|
||||
"Determines whether the bot should require\n"
|
||||
" people trying to use this plugin to be registered."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:56
|
||||
msgid ""
|
||||
"Determines what capability (if any) the bot should\n"
|
||||
" require people trying to use this plugin to have."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:59
|
||||
msgid ""
|
||||
"Determines whether the bot will require \n"
|
||||
" targets of the \"say\" command to be public (i.e., channels). If this is\n"
|
||||
" True, the bot will allow people to use the \"say\" command to send private\n"
|
||||
" messages to other users."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:41
|
||||
#, docstring
|
||||
msgid ""
|
||||
"This plugin allows users to act through the bot anonymously. The 'do'\n"
|
||||
" command has the bot perform an anonymous action in a given channel, and\n"
|
||||
" the 'say' command allows other people to speak through the bot. Since\n"
|
||||
" this can be fairly well abused, you might want to set\n"
|
||||
" supybot.plugins.Anonymous.requireCapability so only users with that\n"
|
||||
" capability can use this plugin. For extra security, you can require that\n"
|
||||
" the user be *in* the channel they are trying to address anonymously with\n"
|
||||
" supybot.plugins.Anonymous.requirePresenceInChannel, or you can require\n"
|
||||
" that the user be registered by setting\n"
|
||||
" supybot.plugins.Anonymous.requireRegistration.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:81
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<channel|nick> <text>\n"
|
||||
"\n"
|
||||
" Sends <text> to <channel|nick>. Can only send to <nick> if\n"
|
||||
" supybot.plugins.Anonymous.allowPrivateTarget is True.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:95
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<channel> <action>\n"
|
||||
"\n"
|
||||
" Performs <action> in <channel>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
@ -33,6 +33,8 @@ import supybot.utils as utils
|
||||
from supybot.commands import *
|
||||
import supybot.ircmsgs as ircmsgs
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Anonymous')
|
||||
|
||||
class Anonymous(callbacks.Plugin):
|
||||
"""This plugin allows users to act through the bot anonymously. The 'do'
|
||||
@ -73,6 +75,7 @@ class Anonymous(callbacks.Plugin):
|
||||
action),
|
||||
Raise=True)
|
||||
|
||||
@internationalizeDocstring
|
||||
def say(self, irc, msg, args, target, text):
|
||||
"""<channel|nick> <text>
|
||||
|
||||
@ -86,6 +89,7 @@ class Anonymous(callbacks.Plugin):
|
||||
irc.noReply()
|
||||
say = wrap(say, [first('nick', 'inChannel'), 'text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def do(self, irc, msg, args, channel, text):
|
||||
"""<channel> <action>
|
||||
|
||||
@ -97,6 +101,7 @@ class Anonymous(callbacks.Plugin):
|
||||
irc.queueMsg(ircmsgs.action(channel, text))
|
||||
irc.noReply()
|
||||
do = wrap(do, ['inChannel', 'text'])
|
||||
Anonymous = internationalizeDocstring(Anonymous)
|
||||
|
||||
Class = Anonymous
|
||||
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('AutoMode')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
@ -41,30 +43,33 @@ def configure(advanced):
|
||||
|
||||
AutoMode = conf.registerPlugin('AutoMode')
|
||||
conf.registerChannelValue(AutoMode, 'enable',
|
||||
registry.Boolean(True, """Determines whether this plugin is enabled."""))
|
||||
registry.Boolean(True, _("""Determines whether this plugin is enabled.
|
||||
""")))
|
||||
conf.registerGlobalValue(AutoMode, 'owner',
|
||||
registry.Boolean(True, """Determines whether this plugin will automode owners."""))
|
||||
registry.Boolean(True, _("""Determines whether this plugin will automode
|
||||
owners.""")))
|
||||
conf.registerChannelValue(AutoMode, 'fallthrough',
|
||||
registry.Boolean(False, """Determines whether the bot will "fall through" to
|
||||
halfop/voicing when auto-opping is turned off but auto-halfopping/voicing
|
||||
are turned on."""))
|
||||
registry.Boolean(False, _("""Determines whether the bot will "fall through
|
||||
to halfop/voicing when auto-opping is turned off but
|
||||
auto-halfopping/voicing are turned on.""")))
|
||||
conf.registerChannelValue(AutoMode, 'op',
|
||||
registry.Boolean(True, """Determines whether the bot will automatically op
|
||||
people with the <channel>,op capability when they join the channel."""))
|
||||
registry.Boolean(True, _("""Determines whether the bot will automatically
|
||||
op people with the <channel>,op capability when they join the channel.
|
||||
""")))
|
||||
conf.registerChannelValue(AutoMode, 'halfop',
|
||||
registry.Boolean(True, """Determines whether the bot will automatically
|
||||
registry.Boolean(True, _("""Determines whether the bot will automatically
|
||||
halfop people with the <channel>,halfop capability when they join the
|
||||
channel."""))
|
||||
channel.""")))
|
||||
conf.registerChannelValue(AutoMode, 'voice',
|
||||
registry.Boolean(True, """Determines whether the bot will automatically
|
||||
registry.Boolean(True, _("""Determines whether the bot will automatically
|
||||
voice people with the <channel>,voice capability when they join the
|
||||
channel."""))
|
||||
channel.""")))
|
||||
conf.registerChannelValue(AutoMode, 'ban',
|
||||
registry.Boolean(True, """Determines whether the bot will automatically ban
|
||||
people who join the channel and are on the banlist."""))
|
||||
registry.Boolean(True, _("""Determines whether the bot will automatically
|
||||
ban people who join the channel and are on the banlist.""")))
|
||||
conf.registerChannelValue(AutoMode.ban, 'period',
|
||||
registry.PositiveInteger(86400, """Determines how many seconds the bot will
|
||||
automatically ban a person when banning."""))
|
||||
registry.PositiveInteger(86400, _("""Determines how many seconds the bot
|
||||
will automatically ban a person when banning.""")))
|
||||
|
||||
|
||||
|
||||
|
67
plugins/AutoMode/locale/fr.po
Normal file
67
plugins/AutoMode/locale/fr.po
Normal file
@ -0,0 +1,67 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-16 18:48+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: config.py:46
|
||||
msgid ""
|
||||
"Determines whether this plugin is enabled.\n"
|
||||
" "
|
||||
msgstr "Détermine si ce plugin est activé."
|
||||
|
||||
#: config.py:49
|
||||
msgid ""
|
||||
"Determines whether this plugin will automode\n"
|
||||
" owners."
|
||||
msgstr "Détermine si ce plugin mettra des modes automatiques sur les owners."
|
||||
|
||||
#: config.py:52
|
||||
msgid ""
|
||||
"Determines whether the bot will \"fall through\n"
|
||||
" to halfop/voicing when auto-opping is turned off but\n"
|
||||
" auto-halfopping/voicing are turned on."
|
||||
msgstr "Détermine si le bot ne halfopera/voicera pas lorsque l'auto-op est désactivé, même si l'auto-halfopvoice est activé."
|
||||
|
||||
#: config.py:56
|
||||
msgid ""
|
||||
"Determines whether the bot will automatically\n"
|
||||
" op people with the <channel>,op capability when they join the channel.\n"
|
||||
" "
|
||||
msgstr "Détermine si le bot opera automatiquement les gens qui ont la capacité <canal>,op lorsqu'ils rejoignent le canal."
|
||||
|
||||
#: config.py:60
|
||||
msgid ""
|
||||
"Determines whether the bot will automatically\n"
|
||||
" halfop people with the <channel>,halfop capability when they join the\n"
|
||||
" channel."
|
||||
msgstr "Détermine si le bot halfopera les gens qui ont la capacité <canal>,halfop lorsqu'ils rejoignent le canal."
|
||||
|
||||
#: config.py:64
|
||||
msgid ""
|
||||
"Determines whether the bot will automatically\n"
|
||||
" voice people with the <channel>,voice capability when they join the\n"
|
||||
" channel."
|
||||
msgstr "Détermine si le bot voicera automatiquement les gens avec la capacité <canal>,voice lorsqu'ils rejoingent le canal."
|
||||
|
||||
#: config.py:68
|
||||
msgid ""
|
||||
"Determines whether the bot will automatically\n"
|
||||
" ban people who join the channel and are on the banlist."
|
||||
msgstr "Détermine si le bot bannira automatiquement les personnes qui rejoignent le canal et qui sont sur la liste de bannissement."
|
||||
|
||||
#: config.py:71
|
||||
msgid ""
|
||||
"Determines how many seconds the bot\n"
|
||||
" will automatically ban a person when banning."
|
||||
msgstr "Détermine combien de secondes durera le bannissement que le bot posera sur une personne."
|
||||
|
69
plugins/AutoMode/messages.pot
Normal file
69
plugins/AutoMode/messages.pot
Normal file
@ -0,0 +1,69 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-16 18:48+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: config.py:46
|
||||
msgid ""
|
||||
"Determines whether this plugin is enabled.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: config.py:49
|
||||
msgid ""
|
||||
"Determines whether this plugin will automode\n"
|
||||
" owners."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:52
|
||||
msgid ""
|
||||
"Determines whether the bot will \"fall through\n"
|
||||
" to halfop/voicing when auto-opping is turned off but\n"
|
||||
" auto-halfopping/voicing are turned on."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:56
|
||||
msgid ""
|
||||
"Determines whether the bot will automatically\n"
|
||||
" op people with the <channel>,op capability when they join the channel.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: config.py:60
|
||||
msgid ""
|
||||
"Determines whether the bot will automatically\n"
|
||||
" halfop people with the <channel>,halfop capability when they join the\n"
|
||||
" channel."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:64
|
||||
msgid ""
|
||||
"Determines whether the bot will automatically\n"
|
||||
" voice people with the <channel>,voice capability when they join the\n"
|
||||
" channel."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:68
|
||||
msgid ""
|
||||
"Determines whether the bot will automatically\n"
|
||||
" ban people who join the channel and are on the banlist."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:71
|
||||
msgid ""
|
||||
"Determines how many seconds the bot\n"
|
||||
" will automatically ban a person when banning."
|
||||
msgstr ""
|
||||
|
@ -35,6 +35,8 @@ import supybot.ircmsgs as ircmsgs
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.schedule as schedule
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('AutoMode')
|
||||
|
||||
class Continue(Exception):
|
||||
pass # Used below, look in the "do" function nested in doJoin.
|
||||
|
@ -31,12 +31,15 @@ import time
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('BadWords')
|
||||
|
||||
def configure(advanced):
|
||||
from supybot.questions import output, expect, anything, something, yn
|
||||
conf.registerPlugin('BadWords', True)
|
||||
if yn('Would you like to add some bad words?'):
|
||||
words = anything('What words? (separate individual words by spaces)')
|
||||
if yn(_('Would you like to add some bad words?')):
|
||||
words = anything(_('What words? (separate individual words by '
|
||||
'spaces)'))
|
||||
conf.supybot.plugins.BadWords.words.set(words)
|
||||
|
||||
class LastModifiedSetOfStrings(registry.SpaceSeparatedSetOfStrings):
|
||||
@ -47,14 +50,14 @@ class LastModifiedSetOfStrings(registry.SpaceSeparatedSetOfStrings):
|
||||
|
||||
BadWords = conf.registerPlugin('BadWords')
|
||||
conf.registerGlobalValue(BadWords, 'words',
|
||||
LastModifiedSetOfStrings([], """Determines what words are
|
||||
considered to be 'bad' so the bot won't say them."""))
|
||||
LastModifiedSetOfStrings([], _("""Determines what words are
|
||||
considered to be 'bad' so the bot won't say them.""")))
|
||||
conf.registerGlobalValue(BadWords,'requireWordBoundaries',
|
||||
registry.Boolean(False, """Determines whether the bot will require bad
|
||||
registry.Boolean(False, _("""Determines whether the bot will require bad
|
||||
words to be independent words, or whether it will censor them within other
|
||||
words. For instance, if 'darn' is a bad word, then if this is true, 'darn'
|
||||
will be censored, but 'darnit' will not. You probably want this to be
|
||||
false."""))
|
||||
false.""")))
|
||||
|
||||
class String256(registry.String):
|
||||
def __call__(self):
|
||||
@ -65,39 +68,39 @@ class String256(registry.String):
|
||||
return self.value
|
||||
|
||||
conf.registerGlobalValue(BadWords, 'nastyChars',
|
||||
String256('!@#&', """Determines what characters will replace bad words; a
|
||||
String256('!@#&', _("""Determines what characters will replace bad words; a
|
||||
chunk of these characters matching the size of the replaced bad word will
|
||||
be used to replace the bad words you've configured."""))
|
||||
be used to replace the bad words you've configured.""")))
|
||||
|
||||
class ReplacementMethods(registry.OnlySomeStrings):
|
||||
validStrings = ('simple', 'nastyCharacters')
|
||||
|
||||
conf.registerGlobalValue(BadWords, 'replaceMethod',
|
||||
ReplacementMethods('nastyCharacters', """Determines the manner in which
|
||||
ReplacementMethods('nastyCharacters', _("""Determines the manner in which
|
||||
bad words will be replaced. 'nastyCharacters' (the default) will replace a
|
||||
bad word with the same number of 'nasty characters' (like those used in
|
||||
comic books; configurable by supybot.plugins.BadWords.nastyChars).
|
||||
'simple' will replace a bad word with a simple strings (regardless of the
|
||||
length of the bad word); this string is configurable via
|
||||
supybot.plugins.BadWords.simpleReplacement."""))
|
||||
supybot.plugins.BadWords.simpleReplacement.""")))
|
||||
conf.registerGlobalValue(BadWords,'simpleReplacement',
|
||||
registry.String('[CENSORED]', """Determines what word will replace bad
|
||||
words if the replacement method is 'simple'."""))
|
||||
registry.String('[CENSORED]', _("""Determines what word will replace bad
|
||||
words if the replacement method is 'simple'.""")))
|
||||
conf.registerGlobalValue(BadWords, 'stripFormatting',
|
||||
registry.Boolean(True, """Determines whether the bot will strip
|
||||
registry.Boolean(True, _("""Determines whether the bot will strip
|
||||
formatting characters from messages before it checks them for bad words.
|
||||
If this is False, it will be relatively trivial to circumvent this plugin's
|
||||
filtering. If it's True, however, it will interact poorly with other
|
||||
plugins that do coloring or bolding of text."""))
|
||||
plugins that do coloring or bolding of text.""")))
|
||||
|
||||
conf.registerChannelValue(BadWords, 'kick',
|
||||
registry.Boolean(False, """Determines whether the bot will kick people with
|
||||
a warning when they use bad words."""))
|
||||
registry.Boolean(False, _("""Determines whether the bot will kick people with
|
||||
a warning when they use bad words.""")))
|
||||
conf.registerChannelValue(BadWords.kick, 'message',
|
||||
registry.NormalizedString("""You have been kicked for using a word
|
||||
registry.NormalizedString(_("""You have been kicked for using a word
|
||||
prohibited in the presence of this bot. Please use more appropriate
|
||||
language in the future.""", """Determines the kick message used by the bot
|
||||
when kicking users for saying bad words."""))
|
||||
language in the future."""), _("""Determines the kick message used by the
|
||||
bot when kicking users for saying bad words.""")))
|
||||
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
||||
|
114
plugins/BadWords/locale/fr.po
Normal file
114
plugins/BadWords/locale/fr.po
Normal file
@ -0,0 +1,114 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-16 18:51+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: config.py:40
|
||||
msgid "Would you like to add some bad words?"
|
||||
msgstr "Voulez-vous ajouter quelques mots interdits ?"
|
||||
|
||||
#: config.py:41
|
||||
msgid "What words? (separate individual words by spaces)"
|
||||
msgstr "Quels mots ? (séparez chaque mot par un espace)"
|
||||
|
||||
#: config.py:53
|
||||
msgid ""
|
||||
"Determines what words are\n"
|
||||
" considered to be 'bad' so the bot won't say them."
|
||||
msgstr "Détermine quels mots sont considérés comme interdits, donc le bot ne les dira pas."
|
||||
|
||||
#: config.py:56
|
||||
msgid ""
|
||||
"Determines whether the bot will require bad\n"
|
||||
" words to be independent words, or whether it will censor them within other\n"
|
||||
" words. For instance, if 'darn' is a bad word, then if this is true, 'darn'\n"
|
||||
" will be censored, but 'darnit' will not. You probably want this to be\n"
|
||||
" false."
|
||||
msgstr "Détermine si le bot requiert que les gros mots soient indépendants, ou si ils peuvent être dans d'autres mots. Par exemple, si 'pute' est censuré et que c'est True, 'merde' sera censuré, mais pas 'emmerder'. Il est probablement mieux que ceci soit False."
|
||||
|
||||
#: config.py:71
|
||||
msgid ""
|
||||
"Determines what characters will replace bad words; a\n"
|
||||
" chunk of these characters matching the size of the replaced bad word will\n"
|
||||
" be used to replace the bad words you've configured."
|
||||
msgstr "Détermine par quels caractères seront remplacés les gros mots ; un morceau de ces caractères ayant la même taille que le mot remplacé sera utilisé pour remplacer les gros mots que vous avez configurés."
|
||||
|
||||
#: config.py:79
|
||||
msgid ""
|
||||
"Determines the manner in which\n"
|
||||
" bad words will be replaced. 'nastyCharacters' (the default) will replace a\n"
|
||||
" bad word with the same number of 'nasty characters' (like those used in\n"
|
||||
" comic books; configurable by supybot.plugins.BadWords.nastyChars).\n"
|
||||
" 'simple' will replace a bad word with a simple strings (regardless of the\n"
|
||||
" length of the bad word); this string is configurable via\n"
|
||||
" supybot.plugins.BadWords.simpleReplacement."
|
||||
msgstr "Détermine la manière dont les gros mots sont remplacés. 'nastyCharacters' (par défaut) remplacera un gros mot par le même nombre de 'caractères obscènes' (comme ceux utilisés dans les bandes dessinées ; configurables dans supybot.plugins.BadWords.nastyChars). 'simple' remplacera le mot pas une simple chaîne (peu importe la taille du gros mot) ; cette chaîne est configurable dans supybot.plugins.BadWords.simpleReplacement."
|
||||
|
||||
#: config.py:87
|
||||
msgid ""
|
||||
"Determines what word will replace bad\n"
|
||||
" words if the replacement method is 'simple'."
|
||||
msgstr "Détermin quel mot remplacera les mots interdits, si la méthode de remplacement est 'simple'."
|
||||
|
||||
#: config.py:90
|
||||
msgid ""
|
||||
"Determines whether the bot will strip\n"
|
||||
" formatting characters from messages before it checks them for bad words.\n"
|
||||
" If this is False, it will be relatively trivial to circumvent this plugin's\n"
|
||||
" filtering. If it's True, however, it will interact poorly with other\n"
|
||||
" plugins that do coloring or bolding of text."
|
||||
msgstr "Détermine si le bot retirera les caractères de formattage avant de vérifier qu'ils contiennent des gros mots. Si ceci est False, ce sera relativement simple de contourner la protection. Si c'est True, toutefois, il fera perdre toute couleur ou formattage des autres plugins"
|
||||
|
||||
#: config.py:97
|
||||
msgid ""
|
||||
"Determines whether the bot will kick people with\n"
|
||||
" a warning when they use bad words."
|
||||
msgstr "Détermine si le bot kickera les gens avec un avertissement lorsqu'ils utilisent des gros mots."
|
||||
|
||||
#: plugin.py:110
|
||||
msgid ""
|
||||
"takes no arguments\n"
|
||||
"\n"
|
||||
" Returns the list of words being censored.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"ne prend pas d'argument\n"
|
||||
"\n"
|
||||
"Retourne une liste de mots qui sont censurés."
|
||||
|
||||
#: plugin.py:120
|
||||
msgid "I'm not currently censoring any bad words."
|
||||
msgstr "Je ne censure actuellement aucun mot."
|
||||
|
||||
#: plugin.py:125
|
||||
msgid ""
|
||||
"<word> [<word> ...]\n"
|
||||
"\n"
|
||||
" Adds all <word>s to the list of words the bot isn't to say.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<mot> [<mot> ...]\n"
|
||||
"\n"
|
||||
"Ajoute tous les mots à la liste des mots que le bot ne doit pas dire."
|
||||
|
||||
#: plugin.py:137
|
||||
msgid ""
|
||||
"<word> [<word> ...]\n"
|
||||
"\n"
|
||||
" Removes a <word>s from the list of words the bot isn't to say.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<mot> [<mot> ...]\n"
|
||||
"\n"
|
||||
"Retire les <mot>s de la liste des mots que le bot ne doit pas dire."
|
||||
|
110
plugins/BadWords/messages.pot
Normal file
110
plugins/BadWords/messages.pot
Normal file
@ -0,0 +1,110 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-16 18:51+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: config.py:40
|
||||
msgid "Would you like to add some bad words?"
|
||||
msgstr ""
|
||||
|
||||
#: config.py:41
|
||||
msgid "What words? (separate individual words by spaces)"
|
||||
msgstr ""
|
||||
|
||||
#: config.py:53
|
||||
msgid ""
|
||||
"Determines what words are\n"
|
||||
" considered to be 'bad' so the bot won't say them."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:56
|
||||
msgid ""
|
||||
"Determines whether the bot will require bad\n"
|
||||
" words to be independent words, or whether it will censor them within other\n"
|
||||
" words. For instance, if 'darn' is a bad word, then if this is true, 'darn'\n"
|
||||
" will be censored, but 'darnit' will not. You probably want this to be\n"
|
||||
" false."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:71
|
||||
msgid ""
|
||||
"Determines what characters will replace bad words; a\n"
|
||||
" chunk of these characters matching the size of the replaced bad word will\n"
|
||||
" be used to replace the bad words you've configured."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:79
|
||||
msgid ""
|
||||
"Determines the manner in which\n"
|
||||
" bad words will be replaced. 'nastyCharacters' (the default) will replace a\n"
|
||||
" bad word with the same number of 'nasty characters' (like those used in\n"
|
||||
" comic books; configurable by supybot.plugins.BadWords.nastyChars).\n"
|
||||
" 'simple' will replace a bad word with a simple strings (regardless of the\n"
|
||||
" length of the bad word); this string is configurable via\n"
|
||||
" supybot.plugins.BadWords.simpleReplacement."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:87
|
||||
msgid ""
|
||||
"Determines what word will replace bad\n"
|
||||
" words if the replacement method is 'simple'."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:90
|
||||
msgid ""
|
||||
"Determines whether the bot will strip\n"
|
||||
" formatting characters from messages before it checks them for bad words.\n"
|
||||
" If this is False, it will be relatively trivial to circumvent this plugin's\n"
|
||||
" filtering. If it's True, however, it will interact poorly with other\n"
|
||||
" plugins that do coloring or bolding of text."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:97
|
||||
msgid ""
|
||||
"Determines whether the bot will kick people with\n"
|
||||
" a warning when they use bad words."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:110
|
||||
#, docstring
|
||||
msgid ""
|
||||
"takes no arguments\n"
|
||||
"\n"
|
||||
" Returns the list of words being censored.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:120
|
||||
msgid "I'm not currently censoring any bad words."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:125
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<word> [<word> ...]\n"
|
||||
"\n"
|
||||
" Adds all <word>s to the list of words the bot isn't to say.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:137
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<word> [<word> ...]\n"
|
||||
"\n"
|
||||
" Removes a <word>s from the list of words the bot isn't to say.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
@ -39,6 +39,8 @@ import supybot.ircmsgs as ircmsgs
|
||||
from supybot.commands import *
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('BadWords')
|
||||
|
||||
class BadWords(callbacks.Privmsg):
|
||||
def __init__(self, irc):
|
||||
@ -103,6 +105,7 @@ class BadWords(callbacks.Privmsg):
|
||||
s = r'\b%s\b' % s
|
||||
self.regexp = re.compile(s, re.I)
|
||||
|
||||
@internationalizeDocstring
|
||||
def list(self, irc, msg, args):
|
||||
"""takes no arguments
|
||||
|
||||
@ -114,9 +117,10 @@ class BadWords(callbacks.Privmsg):
|
||||
utils.sortBy(str.lower, L)
|
||||
irc.reply(format('%L', L))
|
||||
else:
|
||||
irc.reply('I\'m not currently censoring any bad words.')
|
||||
irc.reply(_('I\'m not currently censoring any bad words.'))
|
||||
list = wrap(list, ['admin'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def add(self, irc, msg, args, words):
|
||||
"""<word> [<word> ...]
|
||||
|
||||
@ -128,6 +132,7 @@ class BadWords(callbacks.Privmsg):
|
||||
irc.replySuccess()
|
||||
add = wrap(add, ['admin', many('something')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def remove(self, irc, msg, args, words):
|
||||
"""<word> [<word> ...]
|
||||
|
||||
|
@ -32,6 +32,8 @@
|
||||
import supybot.conf as conf
|
||||
import supybot.utils as utils
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Channel')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
@ -43,8 +45,8 @@ def configure(advanced):
|
||||
|
||||
Channel = conf.registerPlugin('Channel')
|
||||
conf.registerChannelValue(Channel, 'alwaysRejoin',
|
||||
registry.Boolean(True, """Determines whether the bot will always try to
|
||||
rejoin a channel whenever it's kicked from the channel."""))
|
||||
registry.Boolean(True, _("""Determines whether the bot will always try to
|
||||
rejoin a channel whenever it's kicked from the channel.""")))
|
||||
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
||||
|
686
plugins/Channel/locale/fr.po
Normal file
686
plugins/Channel/locale/fr.po
Normal file
@ -0,0 +1,686 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-25 13:10+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: config.py:48
|
||||
msgid ""
|
||||
"Determines whether the bot will always try to\n"
|
||||
" rejoin a channel whenever it's kicked from the channel."
|
||||
msgstr "Détermine si le bot tentera toujours de rejoindre un canal duquel il a été kické."
|
||||
|
||||
#: plugin.py:69
|
||||
msgid ""
|
||||
"[<channel>] <mode> [<arg> ...]\n"
|
||||
"\n"
|
||||
" Sets the mode in <channel> to <mode>, sending the arguments given.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the channel\n"
|
||||
" itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <mode> [<arg> ...]\n"
|
||||
"\n"
|
||||
"Définit le <mode> sur le canal, en envoyant les arguments donnés. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:76
|
||||
msgid "change the mode"
|
||||
msgstr "changer le mode"
|
||||
|
||||
#: plugin.py:80
|
||||
msgid ""
|
||||
"[<channel>] [<limit>]\n"
|
||||
"\n"
|
||||
" Sets the channel limit to <limit>. If <limit> is 0, or isn't given,\n"
|
||||
" removes the channel limit. <channel> is only necessary if the message\n"
|
||||
" isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<limite>]\n"
|
||||
"\n"
|
||||
"Définit la <limite> du canal. Si <limite> est 0, ou n'est pas donné, supprime la limite du canal. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:90
|
||||
msgid "change the limit"
|
||||
msgstr "changer la limite"
|
||||
|
||||
#: plugin.py:95
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" Sets +m on <channel>, making it so only ops and voiced users can\n"
|
||||
" send messages to the channel. <channel> is only necessary if the\n"
|
||||
" message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>]\n"
|
||||
"\n"
|
||||
"Définit le +m sur le canal, ce qui fait que seuls les ops et les utilisateurs voicés peuvent envoyer des message au canal. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:102
|
||||
msgid "moderate the channel"
|
||||
msgstr "modérer le canal"
|
||||
|
||||
#: plugin.py:106
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" Sets -m on <channel>, making it so everyone can\n"
|
||||
" send messages to the channel. <channel> is only necessary if the\n"
|
||||
" message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>]\n"
|
||||
"\n"
|
||||
"Définit le -m sur le <canal>, ce qui fait que tout le monde peut à nouveau envoyer des messages au canal. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:114
|
||||
msgid "unmoderate the channel"
|
||||
msgstr "démodérer le canal"
|
||||
|
||||
#: plugin.py:118
|
||||
msgid ""
|
||||
"[<channel>] [<key>]\n"
|
||||
"\n"
|
||||
" Sets the keyword in <channel> to <key>. If <key> is not given, removes\n"
|
||||
" the keyword requirement to join <channel>. <channel> is only necessary\n"
|
||||
" if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<clef>]\n"
|
||||
"\n"
|
||||
"Définit la <clef> du <canal>. Si la <clef> n'est pas donnée, retire la clef du <canal>. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:130
|
||||
msgid "change the keyword"
|
||||
msgstr "changer la clef"
|
||||
|
||||
#: plugin.py:135
|
||||
msgid ""
|
||||
"[<channel>] [<nick> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will give all the <nick>s\n"
|
||||
" you provide ops. If you don't provide any <nick>s, this will op you.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the channel\n"
|
||||
" itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<nick> ...]\n"
|
||||
"\n"
|
||||
"Si vous avez la permission #canal,op, ceci vous permet de oper tous les <nick>s. Si vous ne fournissez aucun <nick>, ceci vous opera. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:147
|
||||
msgid "op someone"
|
||||
msgstr "oper quelqu'un"
|
||||
|
||||
#: plugin.py:151
|
||||
msgid ""
|
||||
"[<channel>] [<nick> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,halfop capability, this will give all the\n"
|
||||
" <nick>s you provide halfops. If you don't provide any <nick>s, this\n"
|
||||
" will give you halfops. <channel> is only necessary if the message isn't\n"
|
||||
" sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<nick> ...]\n"
|
||||
"\n"
|
||||
"Si vous avez la permission #canal,halfop, ceci vous permet de halfoper tous les <nick>s. Si vous ne fournissez aucun <nick>, ceci vous halfopera. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:163
|
||||
msgid "halfop someone"
|
||||
msgstr "halfoper quelqu'un"
|
||||
|
||||
#: plugin.py:168
|
||||
msgid ""
|
||||
"[<channel>] [<nick> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,voice capability, this will voice all the\n"
|
||||
" <nick>s you provide. If you don't provide any <nick>s, this will\n"
|
||||
" voice you. <channel> is only necessary if the message isn't sent in the\n"
|
||||
" channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<nick> ...]\n"
|
||||
"\n"
|
||||
"Si vous avez la permission #canal,voice, ceci vous permet de voicer tous les <nick>s. Si vous ne fournissez aucun <nick>, ceci vous voicera. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:190
|
||||
msgid "voice someone"
|
||||
msgstr "voicer quelqu'un"
|
||||
|
||||
#: plugin.py:195
|
||||
msgid ""
|
||||
"[<channel>] [<nick> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will remove operator\n"
|
||||
" privileges from all the nicks given. If no nicks are given, removes\n"
|
||||
" operator privileges from the person sending the message.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<nick> ...]\n"
|
||||
"\n"
|
||||
"Si vous avez la permission #canal,op, ceci vous permet de déoper tous les <nick>s. Si vous ne fournissez aucun <nick>, ceci vous déopera. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:202
|
||||
msgid "I cowardly refuse to deop myself. If you really want me deopped, tell me to op you and then deop me yourself."
|
||||
msgstr "Je suis trop couard pour me déoper moi-même. Si vous voulez vraiment me déoper, dîtes-moi de vous oper, et déopez-moi vous-même."
|
||||
|
||||
#: plugin.py:210
|
||||
msgid "deop someone"
|
||||
msgstr "déoper quelqu'un"
|
||||
|
||||
#: plugin.py:215
|
||||
msgid ""
|
||||
"[<channel>] [<nick> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will remove half-operator\n"
|
||||
" privileges from all the nicks given. If no nicks are given, removes\n"
|
||||
" half-operator privileges from the person sending the message.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<nick> ...]\n"
|
||||
"\n"
|
||||
"Si vous avez la permission #canal,op, ceci vous permet de déhalfoper tous les <nick>s. Si vous ne fournissez aucun <nick>, ceci vous déhalfopera. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:222
|
||||
msgid "I cowardly refuse to dehalfop myself. If you really want me dehalfopped, tell me to op you and then dehalfop me yourself."
|
||||
msgstr "Je suis trop couard pour me déhalfoper moi-même. Si vous voulez vraiment me déhalfoper, dîtes-moi de vous oper, et déhalfopez-moi vous-même."
|
||||
|
||||
#: plugin.py:230
|
||||
msgid "dehalfop someone"
|
||||
msgstr "déhalfoper quelqu'un"
|
||||
|
||||
#: plugin.py:235
|
||||
msgid ""
|
||||
"[<channel>] [<nick> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will remove voice from all\n"
|
||||
" the nicks given. If no nicks are given, removes voice from the person\n"
|
||||
" sending the message.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<nick> ...]\n"
|
||||
"\n"
|
||||
"Si vous avez la permission #canal,op, ceci vous permet de dévoicer tous les <nick>s. Si vous ne fournissez aucun <nick>, ceci vous dévoicera. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:242
|
||||
msgid "I cowardly refuse to devoice myself. If you really want me devoiced, tell me to op you and then devoice me yourself."
|
||||
msgstr "Je suis trop couard pour me dévoicer moi-même. Si vous voulez vraiment me dévoicer, dîtes-moi de vous oper, et dévoicez-moi vous-même."
|
||||
|
||||
#: plugin.py:255
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will cause the bot to\n"
|
||||
" \"cycle\", or PART and then JOIN the channel. <channel> is only necessary\n"
|
||||
" if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>]\n"
|
||||
"\n"
|
||||
"Si vous avez la capacité #canal,op,, ceci fera \"cycler\" le bot, ou un PART et un JOIN. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:268
|
||||
msgid ""
|
||||
"[<channel>] <nick>[, <nick>, ...] [<reason>]\n"
|
||||
"\n"
|
||||
" Kicks <nick>(s) from <channel> for <reason>. If <reason> isn't given,\n"
|
||||
" uses the nick of the person making the command as the reason.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the channel\n"
|
||||
" itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <nick>[, <nick>, ...] [<raison>]\n"
|
||||
"\n"
|
||||
"Kicke le(s) <nick>(s) du <canal> pour la <raison>. Si la raison n'est pas donnée, le nick de la personne envoyant la commande est utilisé. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:276
|
||||
msgid "I cowardly refuse to kick myself."
|
||||
msgstr "Je suis trop couard pour me kicker moi-même."
|
||||
|
||||
#: plugin.py:281
|
||||
msgid "The reason you gave is longer than the allowed length for a KICK reason on this server."
|
||||
msgstr "La raison que vous avez donnée est plus longue que la taille autorisée pour une raison de KICK sur ce serveur."
|
||||
|
||||
#: plugin.py:286
|
||||
msgid "kick someone"
|
||||
msgstr "kicker quelqu'un"
|
||||
|
||||
#: plugin.py:292
|
||||
msgid ""
|
||||
"[<channel>] [--{exact,nick,user,host}] <nick> [<seconds>] [<reason>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will kickban <nick> for\n"
|
||||
" as many seconds as you specify, or else (if you specify 0 seconds or\n"
|
||||
" don't specify a number of seconds) it will ban the person indefinitely.\n"
|
||||
" --exact bans only the exact hostmask; --nick bans just the nick;\n"
|
||||
" --user bans just the user, and --host bans just the host. You can\n"
|
||||
" combine these options as you choose. <reason> is a reason to give for\n"
|
||||
" the kick.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the channel\n"
|
||||
" itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [--{exact,nick,user,host}] [<secondes>] [<raison>]\n"
|
||||
"\n"
|
||||
"Si vous avez la capacité #canal,op, ceci kickbannira <nick> pendant le nombre de <secondes> que vous avez spécifiées, ou, si vous n'avez rien indiqué (ou indiqué 0), bannira la personne indéfiniment.--exact ne bannit que le masque d'hôte exacte ; --nick bannit le nick ; --user bannit l'ident ; --host bannit l'hôte. Vous pouvez combiner ces options à votre gré.<raison> est une raison que vous donnez pour le kick. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:311
|
||||
msgid "I cowardly refuse to kickban myself."
|
||||
msgstr "Je suis trop couard pour me kickbannir moi-même."
|
||||
|
||||
#: plugin.py:318
|
||||
msgid "I haven't seen %s."
|
||||
msgstr "Je n'ai jamais vu %s."
|
||||
|
||||
#: plugin.py:326
|
||||
msgid "I cowardly refuse to ban myself."
|
||||
msgstr "Je suis trop couard pour me bannir moi-même."
|
||||
|
||||
#: plugin.py:352
|
||||
msgid "%s has %s too, you can't ban him/her/it."
|
||||
msgstr "%s est aussi %s, je ne peux le/la bannir."
|
||||
|
||||
#: plugin.py:364
|
||||
msgid "kick or ban someone"
|
||||
msgstr "kicker ou bannir quelqu'un"
|
||||
|
||||
#: plugin.py:371
|
||||
msgid ""
|
||||
"[<channel>] [<hostmask>]\n"
|
||||
"\n"
|
||||
" Unbans <hostmask> on <channel>. If <hostmask> is not given, unbans\n"
|
||||
" any hostmask currently banned on <channel> that matches your current\n"
|
||||
" hostmask. Especially useful for unbanning yourself when you get\n"
|
||||
" unexpectedly (or accidentally) banned from the channel. <channel> is\n"
|
||||
" only necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<masque d'hôte>]\n"
|
||||
"\n"
|
||||
"Débannit le <masque d'hôte> du <canal>. Si le <masque d'hôte> n'est pas donné, débannit tous les masques d'hôte qui correspondent à votre masque d'hôte actuel. Particulièrement utile lorsque vous avez été banni(e) de manière inatendue ou accidentelle d'un canal. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:388
|
||||
msgid "All bans on %s matching %s have been removed."
|
||||
msgstr "Tous les bannissements sur %s correspondant à %s ont été supprimés."
|
||||
|
||||
#: plugin.py:392
|
||||
msgid "No bans matching %s were found on %s."
|
||||
msgstr "Aucun bannissement correspondant à % n'a été trouvé sur %s."
|
||||
|
||||
#: plugin.py:395
|
||||
msgid "unban someone"
|
||||
msgstr "débannir quelqu'un"
|
||||
|
||||
#: plugin.py:400
|
||||
msgid ""
|
||||
"[<channel>] <nick>\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will invite <nick>\n"
|
||||
" to join <channel>. <channel> is only necessary if the message isn't\n"
|
||||
" sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <nick>\n"
|
||||
"\n"
|
||||
"Si vous avez la capacité #canal,op, ceci invitera <nick> à rejoindre le <canal>. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:409
|
||||
msgid "invite someone"
|
||||
msgstr "inviter quelqu'un"
|
||||
|
||||
#: plugin.py:428
|
||||
msgid "%s is already in %s."
|
||||
msgstr "%s est déjà sur %s."
|
||||
|
||||
#: plugin.py:435
|
||||
msgid "There is no %s on this network."
|
||||
msgstr "Il n'y a aucun %s sur ce réseau."
|
||||
|
||||
#: plugin.py:447
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will \"lobotomize\" the\n"
|
||||
" bot, making it silent and unanswering to all requests made in the\n"
|
||||
" channel. <channel> is only necessary if the message isn't sent in\n"
|
||||
" the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>]\n"
|
||||
"\n"
|
||||
"Si vous avez la capacité #canal,op, ceci \"lobotomisera\" le bot, c'est à dire qu'il sera silencieux et ne répondra plus à aucune requête faite sur le canal. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:462
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will unlobotomize the\n"
|
||||
" bot, making it respond to requests made in the channel again.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the channel\n"
|
||||
" itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>]\n"
|
||||
"\n"
|
||||
"Si vous avez la capacité #canal,op, ceci \"dé-lobotomisera\" le bot, c'est à dire qu'il ne sera plus silencieux et répondra à nouveau aux requêtes faites sur le canal. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:477
|
||||
msgid ""
|
||||
"takes no arguments\n"
|
||||
"\n"
|
||||
" Returns the channels in which this bot is lobotomized.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"ne prend pas d'argument\n"
|
||||
"\n"
|
||||
"Retourne les canaux sur lesquels le bot est lobotomisé."
|
||||
|
||||
#: plugin.py:492
|
||||
msgid "I'm currently lobotomized in %L."
|
||||
msgstr "Je suis actuellement lobotomisé sur %L."
|
||||
|
||||
#: plugin.py:495
|
||||
msgid "I'm not currently lobotomized in any channels that you're in."
|
||||
msgstr "Je ne suis actuellement lobotomisé sur aucun canal où vous êtes."
|
||||
|
||||
#: plugin.py:502
|
||||
msgid ""
|
||||
"[<channel>] <nick|hostmask> [<expires>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will effect a\n"
|
||||
" persistent ban from interacting with the bot on the given\n"
|
||||
" <hostmask> (or the current hostmask associated with <nick>. Other\n"
|
||||
" plugins may enforce this ban by actually banning users with\n"
|
||||
" matching hostmasks when they join. <expires> is an optional\n"
|
||||
" argument specifying when (in \"seconds from now\") the ban should\n"
|
||||
" expire; if none is given, the ban will never automatically expire.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the\n"
|
||||
" channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <nick|masque d'hôte> [<expiration>]\n"
|
||||
"\n"
|
||||
"Si vous avez la capacité #canal,op, ceci affectera un bannisement persistant au <nick|masque d'hôte> spécifié. D'autres plugins pourraient renforcer ce bannissement en bannissant vraiment les utilisateurs correspondant à ce masque d'hôte lorsqu'ils entrent. <expiration> est un argument option, correspondant à la durée, en secondes, que doit avoir le bannissement."
|
||||
|
||||
#: plugin.py:522
|
||||
msgid ""
|
||||
"[<channel>] <hostmask>\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will remove the\n"
|
||||
" persistent ban on <hostmask>. <channel> is only necessary if the\n"
|
||||
" message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <masque d'hôte>\n"
|
||||
"\n"
|
||||
"Si vous avez la capacité #canal,op, ceci supprimera le bannissement persistant sur le <masque d'hôte>. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:534
|
||||
msgid "There are no persistent bans for that hostmask."
|
||||
msgstr "Il n'y a pas de bannissement persistant pour ce masque d'hôte."
|
||||
|
||||
#: plugin.py:539
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will show you the\n"
|
||||
" current persistent bans on #channel.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>]\n"
|
||||
"\n"
|
||||
"Si vous avez la capacité #canal,op, ceci vous affichera la liste des bannissements persistants sur le canal."
|
||||
|
||||
#: plugin.py:549
|
||||
msgid "%q (expires %t)"
|
||||
msgstr "%q (expire dans %t)"
|
||||
|
||||
#: plugin.py:552
|
||||
msgid "%q (never expires)"
|
||||
msgstr "%q (n'expire jamais)"
|
||||
|
||||
#: plugin.py:556
|
||||
msgid "There are no persistent bans on %s."
|
||||
msgstr "Il n'y a pas de bannissement persistant sur %s."
|
||||
|
||||
#: plugin.py:563
|
||||
msgid ""
|
||||
"[<channel>] <nick|hostmask> [<expires>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will set a persistent\n"
|
||||
" ignore on <hostmask> or the hostmask currently\n"
|
||||
" associated with <nick>. <expires> is an optional argument\n"
|
||||
" specifying when (in \"seconds from now\") the ignore will expire; if\n"
|
||||
" it isn't given, the ignore will never automatically expire.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the\n"
|
||||
" channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <nick|masque d'hôte> [<expiration>]\n"
|
||||
"\n"
|
||||
"Vous permet d'ajouter un ignore persistant sur le <masque d'hôte>, ou le masque associé au <nick>, à condition d'avoir la capacité #canal,op. <secondes> est un argument optionnel, correspondant au nombre de secondes durant lesquelles l'ignore sera effectif ; si il n'est pas donné, l'ignore n'expirera jamais. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:581
|
||||
msgid ""
|
||||
"[<channel>] <hostmask>\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will remove the\n"
|
||||
" persistent ignore on <hostmask> in the channel. <channel> is only\n"
|
||||
" necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <masque d'hôte>\n"
|
||||
"\n"
|
||||
"Si vous avez la capacité #canal,op, ceci supprimera le masque d'ignorance persistant du <masque d'hôte> sur le canal. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:593
|
||||
msgid "There are no ignores for that hostmask."
|
||||
msgstr "Il n'y a pas d'ignorance pour ce masque d'hôte."
|
||||
|
||||
#: plugin.py:598
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" Lists the hostmasks that the bot is ignoring on the given channel.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the\n"
|
||||
" channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>]\n"
|
||||
"\n"
|
||||
"Liste les masques d'hôte que le bot ignore sur le canal donné. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:607
|
||||
msgid "I'm not currently ignoring any hostmasks in %q"
|
||||
msgstr "Je n'ignore actuellement aucun masque d'hôte sur %q."
|
||||
|
||||
#: plugin.py:618
|
||||
msgid ""
|
||||
"[<channel>] <nick|username> <capability> [<capability> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will give the user\n"
|
||||
" <name> (or the user to whom <nick> maps)\n"
|
||||
" the capability <capability> in the channel. <channel> is only\n"
|
||||
" necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <nick|nom> <capacité> [<capacité> ...]\n"
|
||||
"\n"
|
||||
"Vous permet de donner à l'utilisateur <nom> (ou celui ayant actuellement le <nick>) la <capacité> sur le canal. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:634
|
||||
msgid ""
|
||||
"[<channel>] <name|hostmask> <capability> [<capability> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will take from the\n"
|
||||
" user currently identified as <name> (or the user to whom <hostmask>\n"
|
||||
" maps) the capability <capability> in the channel. <channel> is only\n"
|
||||
" necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <nom|masque d'hôte> <capacité> [<capacité> ...]\n"
|
||||
"\n"
|
||||
" Vous permet de prendre la <capacité> de l'utilisateur <nom> (ou celui à qui appartient le <masque d'hôte>, à condition que vous ayez la permission #canal,op. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:653
|
||||
msgid "That user didn't have the %L %s."
|
||||
msgstr "Cet utilisateur n'a pas les %L %s."
|
||||
|
||||
#: plugin.py:662
|
||||
msgid ""
|
||||
"[<channel>] {True|False}\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will set the default\n"
|
||||
" response to non-power-related (that is, not {op, halfop, voice}\n"
|
||||
" capabilities to be the value you give. <channel> is only necessary\n"
|
||||
" if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] {on|off}\n"
|
||||
"\n"
|
||||
"Si vous avez la capacité #canal,op, cela vous permet de définir la réponse par défaut relative aux problèmes de pouvoir nécessaire op, halfop, voice). <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:680
|
||||
msgid ""
|
||||
"[<channel>] <capability> [<capability> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will add the channel\n"
|
||||
" capability <capability> for all users in the channel. <channel> is\n"
|
||||
" only necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <capacité> [<capacité> ...]\n"
|
||||
"\n"
|
||||
"Si vous avez la capacité #canal,op ceci ajoutera la <capacité> de canal à tous les utilisateurs du canal. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:695
|
||||
msgid ""
|
||||
"[<channel>] <capability> [<capability> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will unset the channel\n"
|
||||
" capability <capability> so each user's specific capability or the\n"
|
||||
" channel default capability will take precedence. <channel> is only\n"
|
||||
" necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <capacité> [<capacité> ...]\n"
|
||||
"\n"
|
||||
"Si vous avez la capacité #canal,op ceci désactivera le fait que tous les utilisateurs du canal aient la <capacité> de canal. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:711
|
||||
msgid "capability"
|
||||
msgstr "permission"
|
||||
|
||||
#: plugin.py:714
|
||||
msgid "I do not know about the %L %s."
|
||||
msgstr "Je ne sais rien à propos des %L %s."
|
||||
|
||||
#: plugin.py:721
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" Returns the capabilities present on the <channel>. <channel> is\n"
|
||||
" only necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>]\n"
|
||||
"\n"
|
||||
"Retourne les capacité présentes sur le <canal>. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:733
|
||||
msgid ""
|
||||
"[<channel>] [<plugin>] [<command>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will disable the <command>\n"
|
||||
" in <channel>. If <plugin> is provided, <command> will be disabled only\n"
|
||||
" for that plugin. If only <plugin> is provided, all commands in the\n"
|
||||
" given plugin will be disabled. <channel> is only necessary if the\n"
|
||||
" message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<plugin>] [<commande>]\n"
|
||||
"\n"
|
||||
" Si vous avez la permission #canal,op, ceci désactive la <commande> sur le <canal>. Si le <plugin> est fourni, toutes les commandes de ce plugin seront désactivées. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:749
|
||||
#: plugin.py:788
|
||||
msgid "The %s plugin does not have a command called %s."
|
||||
msgstr "Le plugin %s n'a pas de commande appelée %s."
|
||||
|
||||
#: plugin.py:756
|
||||
#: plugin.py:795
|
||||
msgid "No plugin or command named %s could be found."
|
||||
msgstr "Aucun plugin ou commande appelé %s n'a pû être trouvé."
|
||||
|
||||
#: plugin.py:772
|
||||
msgid ""
|
||||
"[<channel>] [<plugin>] [<command>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will enable the <command>\n"
|
||||
" in <channel> if it has been disabled. If <plugin> is provided,\n"
|
||||
" <command> will be enabled only for that plugin. If only <plugin> is\n"
|
||||
" provided, all commands in the given plugin will be enabled. <channel>\n"
|
||||
" is only necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<plugin>] [<commande>]\n"
|
||||
"\n"
|
||||
"Si vous avez la permission #canal,op, ceci activera la <commande> sur le <canal>, si elle a auparavant été désactivée. Si le <plugin> seule la commande de ce plugin sera activée. <canal> n'est nécessaire n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:809
|
||||
msgid "%s was not disabled."
|
||||
msgstr "%s n'était pas désactivé."
|
||||
|
||||
#: plugin.py:818
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" Returns the nicks in <channel>. <channel> is only necessary if the\n"
|
||||
" message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>]\n"
|
||||
"\n"
|
||||
"Retourne les nick sur le <canal>. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:829
|
||||
msgid "You don't have access to that information."
|
||||
msgstr "Vous n'avez pas accès à cette information"
|
||||
|
||||
#: plugin.py:837
|
||||
msgid ""
|
||||
"Internal message for notifying all the #channel,ops in a channel of\n"
|
||||
" a given situation."
|
||||
msgstr "Message interne pour notifier tous les #canal,ops sur un canal d'une situation donnée."
|
||||
|
||||
#: plugin.py:840
|
||||
msgid "Alert to all %s ops: %s"
|
||||
msgstr "Alerte à tous les ops de %s : %s"
|
||||
|
||||
#: plugin.py:842
|
||||
msgid " (from %s)"
|
||||
msgstr "(de %s)"
|
||||
|
||||
#: plugin.py:850
|
||||
msgid ""
|
||||
"[<channel>] <text>\n"
|
||||
"\n"
|
||||
" Sends <text> to all the users in <channel> who have the <channel>,op\n"
|
||||
" capability.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <texte>\n"
|
||||
"\n"
|
||||
"Envoie le <texte> à tous les utilisateurs sur <canal> qui ont la capacité #canal,op."
|
||||
|
617
plugins/Channel/messages.pot
Normal file
617
plugins/Channel/messages.pot
Normal file
@ -0,0 +1,617 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-25 13:10+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: config.py:48
|
||||
msgid ""
|
||||
"Determines whether the bot will always try to\n"
|
||||
" rejoin a channel whenever it's kicked from the channel."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:69
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <mode> [<arg> ...]\n"
|
||||
"\n"
|
||||
" Sets the mode in <channel> to <mode>, sending the arguments given.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the channel\n"
|
||||
" itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:76
|
||||
msgid "change the mode"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:80
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<limit>]\n"
|
||||
"\n"
|
||||
" Sets the channel limit to <limit>. If <limit> is 0, or isn't given,\n"
|
||||
" removes the channel limit. <channel> is only necessary if the message\n"
|
||||
" isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:90
|
||||
msgid "change the limit"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:95
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" Sets +m on <channel>, making it so only ops and voiced users can\n"
|
||||
" send messages to the channel. <channel> is only necessary if the\n"
|
||||
" message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:102
|
||||
msgid "moderate the channel"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:106
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" Sets -m on <channel>, making it so everyone can\n"
|
||||
" send messages to the channel. <channel> is only necessary if the\n"
|
||||
" message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:114
|
||||
msgid "unmoderate the channel"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:118
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<key>]\n"
|
||||
"\n"
|
||||
" Sets the keyword in <channel> to <key>. If <key> is not given, removes\n"
|
||||
" the keyword requirement to join <channel>. <channel> is only necessary\n"
|
||||
" if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:130
|
||||
msgid "change the keyword"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:135
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<nick> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will give all the <nick>s\n"
|
||||
" you provide ops. If you don't provide any <nick>s, this will op you.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the channel\n"
|
||||
" itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:147
|
||||
msgid "op someone"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:151
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<nick> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,halfop capability, this will give all the\n"
|
||||
" <nick>s you provide halfops. If you don't provide any <nick>s, this\n"
|
||||
" will give you halfops. <channel> is only necessary if the message isn't\n"
|
||||
" sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:163
|
||||
msgid "halfop someone"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:168
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<nick> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,voice capability, this will voice all the\n"
|
||||
" <nick>s you provide. If you don't provide any <nick>s, this will\n"
|
||||
" voice you. <channel> is only necessary if the message isn't sent in the\n"
|
||||
" channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:190
|
||||
msgid "voice someone"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:195
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<nick> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will remove operator\n"
|
||||
" privileges from all the nicks given. If no nicks are given, removes\n"
|
||||
" operator privileges from the person sending the message.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:202
|
||||
msgid "I cowardly refuse to deop myself. If you really want me deopped, tell me to op you and then deop me yourself."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:210
|
||||
msgid "deop someone"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:215
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<nick> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will remove half-operator\n"
|
||||
" privileges from all the nicks given. If no nicks are given, removes\n"
|
||||
" half-operator privileges from the person sending the message.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:222
|
||||
msgid "I cowardly refuse to dehalfop myself. If you really want me dehalfopped, tell me to op you and then dehalfop me yourself."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:230
|
||||
msgid "dehalfop someone"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:235
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<nick> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will remove voice from all\n"
|
||||
" the nicks given. If no nicks are given, removes voice from the person\n"
|
||||
" sending the message.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:242
|
||||
msgid "I cowardly refuse to devoice myself. If you really want me devoiced, tell me to op you and then devoice me yourself."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:255
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will cause the bot to\n"
|
||||
" \"cycle\", or PART and then JOIN the channel. <channel> is only necessary\n"
|
||||
" if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:268
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <nick>[, <nick>, ...] [<reason>]\n"
|
||||
"\n"
|
||||
" Kicks <nick>(s) from <channel> for <reason>. If <reason> isn't given,\n"
|
||||
" uses the nick of the person making the command as the reason.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the channel\n"
|
||||
" itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:276
|
||||
msgid "I cowardly refuse to kick myself."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:281
|
||||
msgid "The reason you gave is longer than the allowed length for a KICK reason on this server."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:286
|
||||
msgid "kick someone"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:292
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [--{exact,nick,user,host}] <nick> [<seconds>] [<reason>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will kickban <nick> for\n"
|
||||
" as many seconds as you specify, or else (if you specify 0 seconds or\n"
|
||||
" don't specify a number of seconds) it will ban the person indefinitely.\n"
|
||||
" --exact bans only the exact hostmask; --nick bans just the nick;\n"
|
||||
" --user bans just the user, and --host bans just the host. You can\n"
|
||||
" combine these options as you choose. <reason> is a reason to give for\n"
|
||||
" the kick.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the channel\n"
|
||||
" itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:311
|
||||
msgid "I cowardly refuse to kickban myself."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:318
|
||||
msgid "I haven't seen %s."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:326
|
||||
msgid "I cowardly refuse to ban myself."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:352
|
||||
msgid "%s has %s too, you can't ban him/her/it."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:364
|
||||
msgid "kick or ban someone"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:371
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<hostmask>]\n"
|
||||
"\n"
|
||||
" Unbans <hostmask> on <channel>. If <hostmask> is not given, unbans\n"
|
||||
" any hostmask currently banned on <channel> that matches your current\n"
|
||||
" hostmask. Especially useful for unbanning yourself when you get\n"
|
||||
" unexpectedly (or accidentally) banned from the channel. <channel> is\n"
|
||||
" only necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:388
|
||||
msgid "All bans on %s matching %s have been removed."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:392
|
||||
msgid "No bans matching %s were found on %s."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:395
|
||||
msgid "unban someone"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:400
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <nick>\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will invite <nick>\n"
|
||||
" to join <channel>. <channel> is only necessary if the message isn't\n"
|
||||
" sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:409
|
||||
msgid "invite someone"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:428
|
||||
msgid "%s is already in %s."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:435
|
||||
msgid "There is no %s on this network."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:447
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will \"lobotomize\" the\n"
|
||||
" bot, making it silent and unanswering to all requests made in the\n"
|
||||
" channel. <channel> is only necessary if the message isn't sent in\n"
|
||||
" the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:462
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will unlobotomize the\n"
|
||||
" bot, making it respond to requests made in the channel again.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the channel\n"
|
||||
" itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:477
|
||||
#, docstring
|
||||
msgid ""
|
||||
"takes no arguments\n"
|
||||
"\n"
|
||||
" Returns the channels in which this bot is lobotomized.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:492
|
||||
msgid "I'm currently lobotomized in %L."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:495
|
||||
msgid "I'm not currently lobotomized in any channels that you're in."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:502
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <nick|hostmask> [<expires>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will effect a\n"
|
||||
" persistent ban from interacting with the bot on the given\n"
|
||||
" <hostmask> (or the current hostmask associated with <nick>. Other\n"
|
||||
" plugins may enforce this ban by actually banning users with\n"
|
||||
" matching hostmasks when they join. <expires> is an optional\n"
|
||||
" argument specifying when (in \"seconds from now\") the ban should\n"
|
||||
" expire; if none is given, the ban will never automatically expire.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the\n"
|
||||
" channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:522
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <hostmask>\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will remove the\n"
|
||||
" persistent ban on <hostmask>. <channel> is only necessary if the\n"
|
||||
" message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:534
|
||||
msgid "There are no persistent bans for that hostmask."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:539
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will show you the\n"
|
||||
" current persistent bans on #channel.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:549
|
||||
msgid "%q (expires %t)"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:552
|
||||
msgid "%q (never expires)"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:556
|
||||
msgid "There are no persistent bans on %s."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:563
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <nick|hostmask> [<expires>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will set a persistent\n"
|
||||
" ignore on <hostmask> or the hostmask currently\n"
|
||||
" associated with <nick>. <expires> is an optional argument\n"
|
||||
" specifying when (in \"seconds from now\") the ignore will expire; if\n"
|
||||
" it isn't given, the ignore will never automatically expire.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the\n"
|
||||
" channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:581
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <hostmask>\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will remove the\n"
|
||||
" persistent ignore on <hostmask> in the channel. <channel> is only\n"
|
||||
" necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:593
|
||||
msgid "There are no ignores for that hostmask."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:598
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" Lists the hostmasks that the bot is ignoring on the given channel.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the\n"
|
||||
" channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:607
|
||||
msgid "I'm not currently ignoring any hostmasks in %q"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:618
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <nick|username> <capability> [<capability> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will give the user\n"
|
||||
" <name> (or the user to whom <nick> maps)\n"
|
||||
" the capability <capability> in the channel. <channel> is only\n"
|
||||
" necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:634
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <name|hostmask> <capability> [<capability> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will take from the\n"
|
||||
" user currently identified as <name> (or the user to whom <hostmask>\n"
|
||||
" maps) the capability <capability> in the channel. <channel> is only\n"
|
||||
" necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:653
|
||||
msgid "That user didn't have the %L %s."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:662
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] {True|False}\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will set the default\n"
|
||||
" response to non-power-related (that is, not {op, halfop, voice}\n"
|
||||
" capabilities to be the value you give. <channel> is only necessary\n"
|
||||
" if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:680
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <capability> [<capability> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will add the channel\n"
|
||||
" capability <capability> for all users in the channel. <channel> is\n"
|
||||
" only necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:695
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <capability> [<capability> ...]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will unset the channel\n"
|
||||
" capability <capability> so each user's specific capability or the\n"
|
||||
" channel default capability will take precedence. <channel> is only\n"
|
||||
" necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:711
|
||||
msgid "capability"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:714
|
||||
msgid "I do not know about the %L %s."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:721
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" Returns the capabilities present on the <channel>. <channel> is\n"
|
||||
" only necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:733
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<plugin>] [<command>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will disable the <command>\n"
|
||||
" in <channel>. If <plugin> is provided, <command> will be disabled only\n"
|
||||
" for that plugin. If only <plugin> is provided, all commands in the\n"
|
||||
" given plugin will be disabled. <channel> is only necessary if the\n"
|
||||
" message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:749 plugin.py:788
|
||||
msgid "The %s plugin does not have a command called %s."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:756 plugin.py:795
|
||||
msgid "No plugin or command named %s could be found."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:772
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<plugin>] [<command>]\n"
|
||||
"\n"
|
||||
" If you have the #channel,op capability, this will enable the <command>\n"
|
||||
" in <channel> if it has been disabled. If <plugin> is provided,\n"
|
||||
" <command> will be enabled only for that plugin. If only <plugin> is\n"
|
||||
" provided, all commands in the given plugin will be enabled. <channel>\n"
|
||||
" is only necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:809
|
||||
msgid "%s was not disabled."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:818
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" Returns the nicks in <channel>. <channel> is only necessary if the\n"
|
||||
" message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:829
|
||||
msgid "You don't have access to that information."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:837
|
||||
#, docstring
|
||||
msgid ""
|
||||
"Internal message for notifying all the #channel,ops in a channel of\n"
|
||||
" a given situation."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:840
|
||||
msgid "Alert to all %s ops: %s"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:842
|
||||
msgid " (from %s)"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:850
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <text>\n"
|
||||
"\n"
|
||||
" Sends <text> to all the users in <channel> who have the <channel>,op\n"
|
||||
" capability.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
@ -38,6 +38,8 @@ import supybot.ircmsgs as ircmsgs
|
||||
import supybot.schedule as schedule
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Channel')
|
||||
|
||||
class Channel(callbacks.Plugin):
|
||||
def __init__(self, irc):
|
||||
@ -62,6 +64,7 @@ class Channel(callbacks.Plugin):
|
||||
irc.queueMsg(f(nicks[i:i + numModes]))
|
||||
irc.noReply()
|
||||
|
||||
@internationalizeDocstring
|
||||
def mode(self, irc, msg, args, channel, modes):
|
||||
"""[<channel>] <mode> [<arg> ...]
|
||||
|
||||
@ -70,8 +73,9 @@ class Channel(callbacks.Plugin):
|
||||
itself.
|
||||
"""
|
||||
self._sendMsg(irc, ircmsgs.mode(channel, modes))
|
||||
mode = wrap(mode, ['op', ('haveOp', 'change the mode'), many('something')])
|
||||
mode = wrap(mode, ['op', ('haveOp', _('change the mode')), many('something')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def limit(self, irc, msg, args, channel, limit):
|
||||
"""[<channel>] [<limit>]
|
||||
|
||||
@ -83,9 +87,10 @@ class Channel(callbacks.Plugin):
|
||||
self._sendMsg(irc, ircmsgs.mode(channel, ['+l', limit]))
|
||||
else:
|
||||
self._sendMsg(irc, ircmsgs.mode(channel, ['-l']))
|
||||
limit = wrap(limit, ['op', ('haveOp', 'change the limit'),
|
||||
limit = wrap(limit, ['op', ('haveOp', _('change the limit')),
|
||||
additional('nonNegativeInt', 0)])
|
||||
|
||||
@internationalizeDocstring
|
||||
def moderate(self, irc, msg, args, channel):
|
||||
"""[<channel>]
|
||||
|
||||
@ -94,8 +99,9 @@ class Channel(callbacks.Plugin):
|
||||
message isn't sent in the channel itself.
|
||||
"""
|
||||
self._sendMsg(irc, ircmsgs.mode(channel, ['+m']))
|
||||
moderate = wrap(moderate, ['op', ('haveOp', 'moderate the channel')])
|
||||
moderate = wrap(moderate, ['op', ('haveOp', _('moderate the channel'))])
|
||||
|
||||
@internationalizeDocstring
|
||||
def unmoderate(self, irc, msg, args, channel):
|
||||
"""[<channel>]
|
||||
|
||||
@ -104,8 +110,10 @@ class Channel(callbacks.Plugin):
|
||||
message isn't sent in the channel itself.
|
||||
"""
|
||||
self._sendMsg(irc, ircmsgs.mode(channel, ['-m']))
|
||||
unmoderate = wrap(unmoderate, ['op', ('haveOp', 'unmoderate the channel')])
|
||||
unmoderate = wrap(unmoderate, ['op', ('haveOp',
|
||||
_('unmoderate the channel'))])
|
||||
|
||||
@internationalizeDocstring
|
||||
def key(self, irc, msg, args, channel, key):
|
||||
"""[<channel>] [<key>]
|
||||
|
||||
@ -119,9 +127,10 @@ class Channel(callbacks.Plugin):
|
||||
self._sendMsg(irc, ircmsgs.mode(channel, ['+k', key]))
|
||||
else:
|
||||
self._sendMsg(irc, ircmsgs.mode(channel, ['-k']))
|
||||
key = wrap(key, ['op', ('haveOp', 'change the keyword'),
|
||||
key = wrap(key, ['op', ('haveOp', _('change the keyword')),
|
||||
additional('somethingWithoutSpaces', '')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def op(self, irc, msg, args, channel, nicks):
|
||||
"""[<channel>] [<nick> ...]
|
||||
|
||||
@ -135,8 +144,9 @@ class Channel(callbacks.Plugin):
|
||||
def f(L):
|
||||
return ircmsgs.ops(channel, L)
|
||||
self._sendMsgs(irc, nicks, f)
|
||||
op = wrap(op, ['op', ('haveOp', 'op someone'), any('nickInChannel')])
|
||||
op = wrap(op, ['op', ('haveOp', _('op someone')), any('nickInChannel')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def halfop(self, irc, msg, args, channel, nicks):
|
||||
"""[<channel>] [<nick> ...]
|
||||
|
||||
@ -150,9 +160,10 @@ class Channel(callbacks.Plugin):
|
||||
def f(L):
|
||||
return ircmsgs.halfops(channel, L)
|
||||
self._sendMsgs(irc, nicks, f)
|
||||
halfop = wrap(halfop, ['halfop', ('haveOp', 'halfop someone'),
|
||||
halfop = wrap(halfop, ['halfop', ('haveOp', _('halfop someone')),
|
||||
any('nickInChannel')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def voice(self, irc, msg, args, channel, nicks):
|
||||
"""[<channel>] [<nick> ...]
|
||||
|
||||
@ -176,9 +187,10 @@ class Channel(callbacks.Plugin):
|
||||
self._sendMsgs(irc, nicks, f)
|
||||
else:
|
||||
irc.errorNoCapability(capability)
|
||||
voice = wrap(voice, ['channel', ('haveOp', 'voice someone'),
|
||||
voice = wrap(voice, ['channel', ('haveOp', _('voice someone')),
|
||||
any('nickInChannel')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def deop(self, irc, msg, args, channel, nicks):
|
||||
"""[<channel>] [<nick> ...]
|
||||
|
||||
@ -187,17 +199,18 @@ class Channel(callbacks.Plugin):
|
||||
operator privileges from the person sending the message.
|
||||
"""
|
||||
if irc.nick in nicks:
|
||||
irc.error('I cowardly refuse to deop myself. If you really want '
|
||||
'me deopped, tell me to op you and then deop me '
|
||||
'yourself.', Raise=True)
|
||||
irc.error(_('I cowardly refuse to deop myself. If you really '
|
||||
'want me deopped, tell me to op you and then deop me '
|
||||
'yourself.'), Raise=True)
|
||||
if not nicks:
|
||||
nicks = [msg.nick]
|
||||
def f(L):
|
||||
return ircmsgs.deops(channel, L)
|
||||
self._sendMsgs(irc, nicks, f)
|
||||
deop = wrap(deop, ['op', ('haveOp', 'deop someone'),
|
||||
deop = wrap(deop, ['op', ('haveOp', _('deop someone')),
|
||||
any('nickInChannel')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def dehalfop(self, irc, msg, args, channel, nicks):
|
||||
"""[<channel>] [<nick> ...]
|
||||
|
||||
@ -206,17 +219,18 @@ class Channel(callbacks.Plugin):
|
||||
half-operator privileges from the person sending the message.
|
||||
"""
|
||||
if irc.nick in nicks:
|
||||
irc.error('I cowardly refuse to dehalfop myself. If you really '
|
||||
irc.error(_('I cowardly refuse to dehalfop myself. If you really '
|
||||
'want me dehalfopped, tell me to op you and then '
|
||||
'dehalfop me yourself.', Raise=True)
|
||||
'dehalfop me yourself.'), Raise=True)
|
||||
if not nicks:
|
||||
nicks = [msg.nick]
|
||||
def f(L):
|
||||
return ircmsgs.dehalfops(channel, L)
|
||||
self._sendMsgs(irc, nicks, f)
|
||||
dehalfop = wrap(dehalfop, ['halfop', ('haveOp', 'dehalfop someone'),
|
||||
dehalfop = wrap(dehalfop, ['halfop', ('haveOp', _('dehalfop someone')),
|
||||
any('nickInChannel')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def devoice(self, irc, msg, args, channel, nicks):
|
||||
"""[<channel>] [<nick> ...]
|
||||
|
||||
@ -225,9 +239,9 @@ class Channel(callbacks.Plugin):
|
||||
sending the message.
|
||||
"""
|
||||
if irc.nick in nicks:
|
||||
irc.error('I cowardly refuse to devoice myself. If you really '
|
||||
irc.error(_('I cowardly refuse to devoice myself. If you really '
|
||||
'want me devoiced, tell me to op you and then devoice '
|
||||
'me yourself.', Raise=True)
|
||||
'me yourself.'), Raise=True)
|
||||
if not nicks:
|
||||
nicks = [msg.nick]
|
||||
def f(L):
|
||||
@ -236,6 +250,7 @@ class Channel(callbacks.Plugin):
|
||||
devoice = wrap(devoice, ['voice', ('haveOp', 'devoice someone'),
|
||||
any('nickInChannel')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def cycle(self, irc, msg, args, channel):
|
||||
"""[<channel>]
|
||||
|
||||
@ -248,6 +263,7 @@ class Channel(callbacks.Plugin):
|
||||
self._sendMsg(irc, networkGroup.channels.join(channel))
|
||||
cycle = wrap(cycle, ['op'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def kick(self, irc, msg, args, channel, nicks, reason):
|
||||
"""[<channel>] <nick>[, <nick>, ...] [<reason>]
|
||||
|
||||
@ -257,19 +273,20 @@ class Channel(callbacks.Plugin):
|
||||
itself.
|
||||
"""
|
||||
if utils.iter.any(lambda n: ircutils.strEqual(n, irc.nick), nicks):
|
||||
irc.error('I cowardly refuse to kick myself.', Raise=True)
|
||||
irc.error(_('I cowardly refuse to kick myself.'), Raise=True)
|
||||
if not reason:
|
||||
reason = msg.nick
|
||||
kicklen = irc.state.supported.get('kicklen', sys.maxint)
|
||||
if len(reason) > kicklen:
|
||||
irc.error('The reason you gave is longer than the allowed '
|
||||
'length for a KICK reason on this server.',
|
||||
irc.error(_('The reason you gave is longer than the allowed '
|
||||
'length for a KICK reason on this server.'),
|
||||
Raise=True)
|
||||
for nick in nicks:
|
||||
self._sendMsg(irc, ircmsgs.kick(channel, nick, reason))
|
||||
kick = wrap(kick, ['op', ('haveOp', 'kick someone'),
|
||||
kick = wrap(kick, ['op', ('haveOp', _('kick someone')),
|
||||
commalist('nickInChannel'), additional('text')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def kban(self, irc, msg, args,
|
||||
channel, optlist, bannedNick, expiry, reason):
|
||||
"""[<channel>] [--{exact,nick,user,host}] <nick> [<seconds>] [<reason>]
|
||||
@ -291,14 +308,14 @@ class Channel(callbacks.Plugin):
|
||||
raise callbacks.ArgumentError
|
||||
elif bannedNick == irc.nick:
|
||||
self.log.warning('%q tried to make me kban myself.', msg.prefix)
|
||||
irc.error('I cowardly refuse to kickban myself.')
|
||||
irc.error(_('I cowardly refuse to kickban myself.'))
|
||||
return
|
||||
if not reason:
|
||||
reason = msg.nick
|
||||
try:
|
||||
bannedHostmask = irc.state.nickToHostmask(bannedNick)
|
||||
except KeyError:
|
||||
irc.error(format('I haven\'t seen %s.', bannedNick), Raise=True)
|
||||
irc.error(format(_('I haven\'t seen %s.'), bannedNick), Raise=True)
|
||||
capability = ircdb.makeChannelCapability(channel, 'op')
|
||||
banmaskstyle = conf.supybot.protocols.irc.banmask
|
||||
banmask = banmaskstyle.makeBanmask(bannedHostmask, [o[0] for o in optlist])
|
||||
@ -306,7 +323,7 @@ class Channel(callbacks.Plugin):
|
||||
if ircutils.hostmaskPatternEqual(banmask, irc.prefix):
|
||||
if ircutils.hostmaskPatternEqual(bannedHostmask, irc.prefix):
|
||||
self.log.warning('%q tried to make me kban myself.',msg.prefix)
|
||||
irc.error('I cowardly refuse to ban myself.')
|
||||
irc.error(_('I cowardly refuse to ban myself.'))
|
||||
return
|
||||
else:
|
||||
self.log.warning('Using exact hostmask since banmask would '
|
||||
@ -332,8 +349,8 @@ class Channel(callbacks.Plugin):
|
||||
if ircdb.checkCapability(bannedHostmask, capability):
|
||||
self.log.warning('%s tried to ban %q, but both have %s',
|
||||
msg.prefix, bannedHostmask, capability)
|
||||
irc.error(format('%s has %s too, you can\'t ban him/her/it.',
|
||||
bannedNick, capability))
|
||||
irc.error(format(_('%s has %s too, you can\'t ban '
|
||||
'him/her/it.'), bannedNick, capability))
|
||||
else:
|
||||
doBan()
|
||||
else:
|
||||
@ -344,11 +361,12 @@ class Channel(callbacks.Plugin):
|
||||
kban = wrap(kban,
|
||||
['op',
|
||||
getopts({'exact':'', 'nick':'', 'user':'', 'host':''}),
|
||||
('haveOp', 'kick or ban someone'),
|
||||
('haveOp', _('kick or ban someone')),
|
||||
'nickInChannel',
|
||||
optional('expiry', 0),
|
||||
additional('text')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def unban(self, irc, msg, args, channel, hostmask):
|
||||
"""[<channel>] [<hostmask>]
|
||||
|
||||
@ -367,16 +385,17 @@ class Channel(callbacks.Plugin):
|
||||
bans.append(banmask)
|
||||
if bans:
|
||||
irc.queueMsg(ircmsgs.unbans(channel, bans))
|
||||
irc.replySuccess(format('All bans on %s matching %s '
|
||||
'have been removed.',
|
||||
irc.replySuccess(format(_('All bans on %s matching %s '
|
||||
'have been removed.'),
|
||||
channel, msg.prefix))
|
||||
else:
|
||||
irc.error('No bans matching %s were found on %s.' %
|
||||
irc.error(_('No bans matching %s were found on %s.') %
|
||||
(msg.prefix, channel))
|
||||
unban = wrap(unban, ['op',
|
||||
('haveOp', 'unban someone'),
|
||||
('haveOp', _('unban someone')),
|
||||
additional('hostmask')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def invite(self, irc, msg, args, channel, nick):
|
||||
"""[<channel>] <nick>
|
||||
|
||||
@ -387,7 +406,7 @@ class Channel(callbacks.Plugin):
|
||||
nick = nick or msg.nick
|
||||
self._sendMsg(irc, ircmsgs.invite(nick, channel))
|
||||
self.invites[(irc.getRealIrc(), ircutils.toLower(nick))] = irc
|
||||
invite = wrap(invite, ['op', ('haveOp', 'invite someone'),
|
||||
invite = wrap(invite, ['op', ('haveOp', _('invite someone')),
|
||||
additional('nick')])
|
||||
|
||||
def do341(self, irc, msg):
|
||||
@ -406,14 +425,14 @@ class Channel(callbacks.Plugin):
|
||||
nick = ircutils.toLower(nick)
|
||||
replyIrc = self.invites.pop((irc, nick), None)
|
||||
if replyIrc is not None:
|
||||
replyIrc.error(format('%s is already in %s.', nick, channel))
|
||||
replyIrc.error(format(_('%s is already in %s.'), nick, channel))
|
||||
|
||||
def do401(self, irc, msg):
|
||||
nick = msg.args[1]
|
||||
nick = ircutils.toLower(nick)
|
||||
replyIrc = self.invites.pop((irc, nick), None)
|
||||
if replyIrc is not None:
|
||||
replyIrc.error(format('There is no %s on this network.', nick))
|
||||
replyIrc.error(format(_('There is no %s on this network.'), nick))
|
||||
|
||||
def do504(self, irc, msg):
|
||||
nick = msg.args[1]
|
||||
@ -423,6 +442,7 @@ class Channel(callbacks.Plugin):
|
||||
replyIrc.error(format('There is no %s on this server.', nick))
|
||||
|
||||
class lobotomy(callbacks.Commands):
|
||||
@internationalizeDocstring
|
||||
def add(self, irc, msg, args, channel):
|
||||
"""[<channel>]
|
||||
|
||||
@ -437,6 +457,7 @@ class Channel(callbacks.Plugin):
|
||||
irc.replySuccess()
|
||||
add = wrap(add, ['op'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def remove(self, irc, msg, args, channel):
|
||||
"""[<channel>]
|
||||
|
||||
@ -451,6 +472,7 @@ class Channel(callbacks.Plugin):
|
||||
irc.replySuccess()
|
||||
remove = wrap(remove, ['op'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def list(self, irc, msg, args):
|
||||
"""takes no arguments
|
||||
|
||||
@ -467,14 +489,15 @@ class Channel(callbacks.Plugin):
|
||||
L.append(channel)
|
||||
if L:
|
||||
L.sort()
|
||||
s = format('I\'m currently lobotomized in %L.', L)
|
||||
s = format(_('I\'m currently lobotomized in %L.'), L)
|
||||
irc.reply(s)
|
||||
else:
|
||||
irc.reply('I\'m not currently lobotomized in any channels '
|
||||
'that you\'re in.')
|
||||
irc.reply(_('I\'m not currently lobotomized in any channels '
|
||||
'that you\'re in.'))
|
||||
list = wrap(list)
|
||||
|
||||
class ban(callbacks.Commands):
|
||||
@internationalizeDocstring
|
||||
def add(self, irc, msg, args, channel, banmask, expires):
|
||||
"""[<channel>] <nick|hostmask> [<expires>]
|
||||
|
||||
@ -494,6 +517,7 @@ class Channel(callbacks.Plugin):
|
||||
irc.replySuccess()
|
||||
add = wrap(add, ['op', 'banmask', additional('expiry', 0)])
|
||||
|
||||
@internationalizeDocstring
|
||||
def remove(self, irc, msg, args, channel, banmask):
|
||||
"""[<channel>] <hostmask>
|
||||
|
||||
@ -507,9 +531,10 @@ class Channel(callbacks.Plugin):
|
||||
ircdb.channels.setChannel(channel, c)
|
||||
irc.replySuccess()
|
||||
except KeyError:
|
||||
irc.error('There are no persistent bans for that hostmask.')
|
||||
irc.error(_('There are no persistent bans for that hostmask.'))
|
||||
remove = wrap(remove, ['op', 'hostmask'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def list(self, irc, msg, args, channel):
|
||||
"""[<channel>]
|
||||
|
||||
@ -521,18 +546,19 @@ class Channel(callbacks.Plugin):
|
||||
bans = []
|
||||
for ban in c.bans:
|
||||
if c.bans[ban]:
|
||||
bans.append(format('%q (expires %t)',
|
||||
bans.append(format(_('%q (expires %t)'),
|
||||
ban, c.bans[ban]))
|
||||
else:
|
||||
bans.append(format('%q (never expires)',
|
||||
bans.append(format(_('%q (never expires)'),
|
||||
ban, c.bans[ban]))
|
||||
irc.reply(format('%L', bans))
|
||||
else:
|
||||
irc.reply(format('There are no persistent bans on %s.',
|
||||
irc.reply(format(_('There are no persistent bans on %s.'),
|
||||
channel))
|
||||
list = wrap(list, ['op'])
|
||||
|
||||
class ignore(callbacks.Commands):
|
||||
@internationalizeDocstring
|
||||
def add(self, irc, msg, args, channel, banmask, expires):
|
||||
"""[<channel>] <nick|hostmask> [<expires>]
|
||||
|
||||
@ -550,6 +576,7 @@ class Channel(callbacks.Plugin):
|
||||
irc.replySuccess()
|
||||
add = wrap(add, ['op', 'banmask', additional('expiry', 0)])
|
||||
|
||||
@internationalizeDocstring
|
||||
def remove(self, irc, msg, args, channel, banmask):
|
||||
"""[<channel>] <hostmask>
|
||||
|
||||
@ -563,9 +590,10 @@ class Channel(callbacks.Plugin):
|
||||
ircdb.channels.setChannel(channel, c)
|
||||
irc.replySuccess()
|
||||
except KeyError:
|
||||
irc.error('There are no ignores for that hostmask.')
|
||||
irc.error(_('There are no ignores for that hostmask.'))
|
||||
remove = wrap(remove, ['op', 'hostmask'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def list(self, irc, msg, args, channel):
|
||||
"""[<channel>]
|
||||
|
||||
@ -576,8 +604,8 @@ class Channel(callbacks.Plugin):
|
||||
# XXX Add the expirations.
|
||||
c = ircdb.channels.getChannel(channel)
|
||||
if len(c.ignores) == 0:
|
||||
s = format('I\'m not currently ignoring any hostmasks in %q',
|
||||
channel)
|
||||
s = format(_('I\'m not currently ignoring any hostmasks in '
|
||||
'%q'), channel)
|
||||
irc.reply(s)
|
||||
else:
|
||||
L = sorted(c.ignores)
|
||||
@ -585,6 +613,7 @@ class Channel(callbacks.Plugin):
|
||||
list = wrap(list, ['op'])
|
||||
|
||||
class capability(callbacks.Commands):
|
||||
@internationalizeDocstring
|
||||
def add(self, irc, msg, args, channel, user, capabilities):
|
||||
"""[<channel>] <nick|username> <capability> [<capability> ...]
|
||||
|
||||
@ -600,6 +629,7 @@ class Channel(callbacks.Plugin):
|
||||
irc.replySuccess()
|
||||
add = wrap(add, ['op', 'otherUser', 'capability'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def remove(self, irc, msg, args, channel, user, capabilities):
|
||||
"""[<channel>] <name|hostmask> <capability> [<capability> ...]
|
||||
|
||||
@ -620,13 +650,14 @@ class Channel(callbacks.Plugin):
|
||||
s = 'capability'
|
||||
if len(fail) > 1:
|
||||
s = utils.str.pluralize(s)
|
||||
irc.error(format('That user didn\'t have the %L %s.', fail, s),
|
||||
Raise=True)
|
||||
irc.error(format(_('That user didn\'t have the %L %s.'), fail,
|
||||
s), Raise=True)
|
||||
irc.replySuccess()
|
||||
remove = wrap(remove, ['op', 'otherUser', 'capability'])
|
||||
|
||||
# XXX This needs to be fix0red to be like Owner.defaultcapability. Or
|
||||
# something else. This is a horrible interface.
|
||||
@internationalizeDocstring
|
||||
def setdefault(self, irc, msg, args, channel, v):
|
||||
"""[<channel>] {True|False}
|
||||
|
||||
@ -644,6 +675,7 @@ class Channel(callbacks.Plugin):
|
||||
irc.replySuccess()
|
||||
setdefault = wrap(setdefault, ['op', 'boolean'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def set(self, irc, msg, args, channel, capabilities):
|
||||
"""[<channel>] <capability> [<capability> ...]
|
||||
|
||||
@ -658,6 +690,7 @@ class Channel(callbacks.Plugin):
|
||||
irc.replySuccess()
|
||||
set = wrap(set, ['op', many('capability')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def unset(self, irc, msg, args, channel, capabilities):
|
||||
"""[<channel>] <capability> [<capability> ...]
|
||||
|
||||
@ -675,14 +708,15 @@ class Channel(callbacks.Plugin):
|
||||
fail.append(c)
|
||||
ircdb.channels.setChannel(channel, chan)
|
||||
if fail:
|
||||
s = 'capability'
|
||||
s = _('capability')
|
||||
if len(fail) > 1:
|
||||
s = utils.str.pluralize(s)
|
||||
irc.error(format('I do not know about the %L %s.', fail, s),
|
||||
irc.error(format(_('I do not know about the %L %s.'), fail, s),
|
||||
Raise=True)
|
||||
irc.replySuccess()
|
||||
unset = wrap(unset, ['op', many('capability')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def list(self, irc, msg, args, channel):
|
||||
"""[<channel>]
|
||||
|
||||
@ -694,6 +728,7 @@ class Channel(callbacks.Plugin):
|
||||
irc.reply(' '.join(L))
|
||||
list = wrap(list, ['channel'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def disable(self, irc, msg, args, channel, plugin, command):
|
||||
"""[<channel>] [<plugin>] [<command>]
|
||||
|
||||
@ -711,15 +746,15 @@ class Channel(callbacks.Plugin):
|
||||
if plugin.isCommand(command):
|
||||
s = '-%s.%s' % (plugin.name(), command)
|
||||
else:
|
||||
failMsg = format('The %s plugin does not have a command '
|
||||
'called %s.', plugin.name(), command)
|
||||
failMsg = format(_('The %s plugin does not have a command '
|
||||
'called %s.'), plugin.name(), command)
|
||||
elif command:
|
||||
# findCallbackForCommand
|
||||
if filter(None, irc.findCallbacksForArgs([command])):
|
||||
s = '-%s' % command
|
||||
else:
|
||||
failMsg = format('No plugin or command named %s could be '
|
||||
'found.', command)
|
||||
failMsg = format(_('No plugin or command named %s could be '
|
||||
'found.'), command)
|
||||
else:
|
||||
raise callbacks.ArgumentError
|
||||
if failMsg:
|
||||
@ -732,6 +767,7 @@ class Channel(callbacks.Plugin):
|
||||
optional(('plugin', False)),
|
||||
additional('commandName')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def enable(self, irc, msg, args, channel, plugin, command):
|
||||
"""[<channel>] [<plugin>] [<command>]
|
||||
|
||||
@ -749,15 +785,15 @@ class Channel(callbacks.Plugin):
|
||||
if plugin.isCommand(command):
|
||||
s = '-%s.%s' % (plugin.name(), command)
|
||||
else:
|
||||
failMsg = format('The %s plugin does not have a command '
|
||||
'called %s.', plugin.name(), command)
|
||||
failMsg = format(_('The %s plugin does not have a command '
|
||||
'called %s.'), plugin.name(), command)
|
||||
elif command:
|
||||
# findCallbackForCommand
|
||||
if filter(None, irc.findCallbacksForArgs([command])):
|
||||
s = '-%s' % command
|
||||
else:
|
||||
failMsg = format('No plugin or command named %s could be '
|
||||
'found.', command)
|
||||
failMsg = format(_('No plugin or command named %s could be '
|
||||
'found.'), command)
|
||||
else:
|
||||
raise callbacks.ArgumentError
|
||||
if failMsg:
|
||||
@ -770,13 +806,14 @@ class Channel(callbacks.Plugin):
|
||||
fail.append(s)
|
||||
ircdb.channels.setChannel(channel, chan)
|
||||
if fail:
|
||||
irc.error(format('%s was not disabled.', s[1:]))
|
||||
irc.error(format(_('%s was not disabled.'), s[1:]))
|
||||
else:
|
||||
irc.replySuccess()
|
||||
enable = wrap(enable, ['op',
|
||||
optional(('plugin', False)),
|
||||
additional('commandName')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def nicks(self, irc, msg, args, channel):
|
||||
"""[<channel>]
|
||||
|
||||
@ -789,24 +826,26 @@ class Channel(callbacks.Plugin):
|
||||
msg.args[0] != channel and \
|
||||
(ircutils.isChannel(msg.args[0]) or \
|
||||
msg.nick not in irc.state.channels[channel].users):
|
||||
irc.error('You don\'t have access to that information.')
|
||||
irc.error(_('You don\'t have access to that information.'))
|
||||
L = list(irc.state.channels[channel].users)
|
||||
utils.sortBy(str.lower, L)
|
||||
irc.reply(utils.str.commaAndify(L))
|
||||
nicks = wrap(nicks, ['inChannel'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def alertOps(self, irc, channel, s, frm=None):
|
||||
"""Internal message for notifying all the #channel,ops in a channel of
|
||||
a given situation."""
|
||||
capability = ircdb.makeChannelCapability(channel, 'op')
|
||||
s = format('Alert to all %s ops: %s', channel, s)
|
||||
s = format(_('Alert to all %s ops: %s'), channel, s)
|
||||
if frm is not None:
|
||||
s += format(' (from %s)', frm)
|
||||
s += format(_(' (from %s)'), frm)
|
||||
for nick in irc.state.channels[channel].users:
|
||||
hostmask = irc.state.nickToHostmask(nick)
|
||||
if ircdb.checkCapability(hostmask, capability):
|
||||
irc.reply(s, to=nick, private=True)
|
||||
|
||||
@internationalizeDocstring
|
||||
def alert(self, irc, msg, args, channel, text):
|
||||
"""[<channel>] <text>
|
||||
|
||||
|
@ -30,6 +30,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('ChannelLogger')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
@ -41,50 +43,50 @@ def configure(advanced):
|
||||
|
||||
ChannelLogger = conf.registerPlugin('ChannelLogger')
|
||||
conf.registerChannelValue(ChannelLogger, 'enable',
|
||||
registry.Boolean(True, """Determines whether logging is enabled."""))
|
||||
registry.Boolean(True, _("""Determines whether logging is enabled.""")))
|
||||
conf.registerGlobalValue(ChannelLogger, 'flushImmediately',
|
||||
registry.Boolean(False, """Determines whether channel logfiles will be
|
||||
registry.Boolean(False, _("""Determines whether channel logfiles will be
|
||||
flushed anytime they're written to, rather than being buffered by the
|
||||
operating system."""))
|
||||
operating system.""")))
|
||||
conf.registerChannelValue(ChannelLogger, 'stripFormatting',
|
||||
registry.Boolean(True, """Determines whether formatting characters (such
|
||||
as bolding, color, etc.) are removed when writing the logs to disk."""))
|
||||
registry.Boolean(True, _("""Determines whether formatting characters (such
|
||||
as bolding, color, etc.) are removed when writing the logs to disk.""")))
|
||||
conf.registerChannelValue(ChannelLogger, 'timestamp',
|
||||
registry.Boolean(True, """Determines whether the logs for this channel are
|
||||
timestamped with the timestamp in supybot.log.timestampFormat."""))
|
||||
registry.Boolean(True, _("""Determines whether the logs for this channel are
|
||||
timestamped with the timestamp in supybot.log.timestampFormat.""")))
|
||||
conf.registerChannelValue(ChannelLogger, 'noLogPrefix',
|
||||
registry.String('[nolog]', """Determines what string a message should be
|
||||
registry.String('[nolog]', _("""Determines what string a message should be
|
||||
prefixed with in order not to be logged. If you don't want any such
|
||||
prefix, just set it to the empty string."""))
|
||||
prefix, just set it to the empty string.""")))
|
||||
conf.registerChannelValue(ChannelLogger, 'rotateLogs',
|
||||
registry.Boolean(False, """Determines whether the bot will automatically
|
||||
registry.Boolean(False, _("""Determines whether the bot will automatically
|
||||
rotate the logs for this channel. The bot will rotate logs when the
|
||||
timestamp for the log changes. The timestamp is set according to
|
||||
the 'filenameTimestamp' configuration variable."""))
|
||||
the 'filenameTimestamp' configuration variable.""")))
|
||||
conf.registerChannelValue(ChannelLogger, 'filenameTimestamp',
|
||||
registry.String('%Y-%m-%d', """Determines how to represent the timestamp
|
||||
registry.String('%Y-%m-%d', _("""Determines how to represent the timestamp
|
||||
used for the filename in rotated logs. When this timestamp changes, the
|
||||
old logfiles will be closed and a new one started. The format characters
|
||||
for the timestamp are in the time.strftime docs at python.org. In order
|
||||
for your logs to be rotated, you'll also have to enable
|
||||
supybot.plugins.ChannelLogger.rotateLogs."""))
|
||||
supybot.plugins.ChannelLogger.rotateLogs.""")))
|
||||
|
||||
conf.registerGlobalValue(ChannelLogger, 'directories',
|
||||
registry.Boolean(True, """Determines whether the bot will partition its
|
||||
channel logs into separate directories based on different criteria."""))
|
||||
registry.Boolean(True, _("""Determines whether the bot will partition its
|
||||
channel logs into separate directories based on different criteria.""")))
|
||||
conf.registerGlobalValue(ChannelLogger.directories, 'network',
|
||||
registry.Boolean(True, """Determines whether the bot will use a network
|
||||
directory if using directories."""))
|
||||
registry.Boolean(True, _("""Determines whether the bot will use a network
|
||||
directory if using directories.""")))
|
||||
conf.registerGlobalValue(ChannelLogger.directories, 'channel',
|
||||
registry.Boolean(True, """Determines whether the bot will use a channel
|
||||
directory if using directories."""))
|
||||
registry.Boolean(True, _("""Determines whether the bot will use a channel
|
||||
directory if using directories.""")))
|
||||
conf.registerGlobalValue(ChannelLogger.directories, 'timestamp',
|
||||
registry.Boolean(False, """Determines whether the bot will use a timestamp
|
||||
registry.Boolean(False, _("""Determines whether the bot will use a timestamp
|
||||
(determined by supybot.plugins.ChannelLogger.directories.timestamp.format)
|
||||
if using directories."""))
|
||||
if using directories.""")))
|
||||
conf.registerGlobalValue(ChannelLogger.directories.timestamp, 'format',
|
||||
registry.String('%B', """Determines what timestamp format will be used in
|
||||
registry.String('%B', _("""Determines what timestamp format will be used in
|
||||
the directory stucture for channel logs if
|
||||
supybot.plugins.ChannelLogger.directories.timestamp is True."""))
|
||||
supybot.plugins.ChannelLogger.directories.timestamp is True.""")))
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
||||
|
95
plugins/ChannelLogger/locale/fr.po
Normal file
95
plugins/ChannelLogger/locale/fr.po
Normal file
@ -0,0 +1,95 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-17 10:02+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: config.py:46
|
||||
msgid "Determines whether logging is enabled."
|
||||
msgstr "Détermine si les logs sont activés."
|
||||
|
||||
#: config.py:48
|
||||
msgid ""
|
||||
"Determines whether channel logfiles will be\n"
|
||||
" flushed anytime they're written to, rather than being buffered by the\n"
|
||||
" operating system."
|
||||
msgstr "Détermine si le fichier de logs sera enregistré à chaque fois que l'on y écrit plutôt que d'être mis en buffer par le système d'exploitation."
|
||||
|
||||
#: config.py:52
|
||||
msgid ""
|
||||
"Determines whether formatting characters (such\n"
|
||||
" as bolding, color, etc.) are removed when writing the logs to disk."
|
||||
msgstr "Détermine si les caractères de formattage (comme le gras, la couleurs) sont supprimés lors de l'écriture des logs sur le disque."
|
||||
|
||||
#: config.py:55
|
||||
msgid ""
|
||||
"Determines whether the logs for this channel are\n"
|
||||
" timestamped with the timestamp in supybot.log.timestampFormat."
|
||||
msgstr "Détermine si les logs de ce canal sont 'timestampés' avec le format dans supybot.log.timestampFormat"
|
||||
|
||||
#: config.py:58
|
||||
msgid ""
|
||||
"Determines what string a message should be\n"
|
||||
" prefixed with in order not to be logged. If you don't want any such\n"
|
||||
" prefix, just set it to the empty string."
|
||||
msgstr "Détermine par quelle chaîne un message doit être préfixé pour ne pas être loggué. Vous ne voulez probablement pas d'un tel préfixe, et simplement définir une chaîne vide."
|
||||
|
||||
#: config.py:62
|
||||
msgid ""
|
||||
"Determines whether the bot will automatically\n"
|
||||
" rotate the logs for this channel. The bot will rotate logs when the\n"
|
||||
" timestamp for the log changes. The timestamp is set according to\n"
|
||||
" the 'filenameTimestamp' configuration variable."
|
||||
msgstr "Détermine si le bot fera automatiquement une rotation des logs pour ce canal. Le bot fera tourner les logs lorsque leur timestamp changera. Le timestamp est défini par la variable de configuration 'filenameTimestamp'."
|
||||
|
||||
#: config.py:67
|
||||
msgid ""
|
||||
"Determines how to represent the timestamp\n"
|
||||
" used for the filename in rotated logs. When this timestamp changes, the\n"
|
||||
" old logfiles will be closed and a new one started. The format characters\n"
|
||||
" for the timestamp are in the time.strftime docs at python.org. In order\n"
|
||||
" for your logs to be rotated, you'll also have to enable\n"
|
||||
" supybot.plugins.ChannelLogger.rotateLogs."
|
||||
msgstr "Détermine comment représenter le timestamp utilisé pour les noms de fichiers de logs 'tournants'. Lorsque ce timestamp change, l'ancien fichier de logs sera fermé, et un nouveau sera ouvert. Le format du timestamp est le même que celui de time.strftime (documentation disponible sur python.org). Pour avoir des logs 'tournant', vous devez activer supybot.plugins.ChannelLogger.rotateLogs."
|
||||
|
||||
#: config.py:75
|
||||
msgid ""
|
||||
"Determines whether the bot will partition its\n"
|
||||
" channel logs into separate directories based on different criteria."
|
||||
msgstr "Détermine si le bot partitionnera les logs de canaux dans des répertoires séparés, en fonction de différents critères."
|
||||
|
||||
#: config.py:78
|
||||
msgid ""
|
||||
"Determines whether the bot will use a network\n"
|
||||
" directory if using directories."
|
||||
msgstr "Détermine si le bot utilisera un répertoire par réseau, si il utilise des répertoires."
|
||||
|
||||
#: config.py:81
|
||||
msgid ""
|
||||
"Determines whether the bot will use a channel\n"
|
||||
" directory if using directories."
|
||||
msgstr "Détermine si le bot utilisera un répertoire par canal, si il utilise des répertoires."
|
||||
|
||||
#: config.py:84
|
||||
msgid ""
|
||||
"Determines whether the bot will use a timestamp\n"
|
||||
" (determined by supybot.plugins.ChannelLogger.directories.timestamp.format)\n"
|
||||
" if using directories."
|
||||
msgstr "Détermine si le bot utilisera un timestamp (déterminé par supybot.plugins.ChannelLogger.directories.timestamp.format), si il utilise des répertoires."
|
||||
|
||||
#: config.py:88
|
||||
msgid ""
|
||||
"Determines what timestamp format will be used in\n"
|
||||
" the directory stucture for channel logs if\n"
|
||||
" supybot.plugins.ChannelLogger.directories.timestamp is True."
|
||||
msgstr "Détermine quel format de timestamp sera utilisé dans la structure de répertoires pour les logs de canaux si supybot.plugins.ChannelLogger.directories.timestamp est True."
|
||||
|
97
plugins/ChannelLogger/messages.pot
Normal file
97
plugins/ChannelLogger/messages.pot
Normal file
@ -0,0 +1,97 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-17 10:02+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: config.py:46
|
||||
msgid "Determines whether logging is enabled."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:48
|
||||
msgid ""
|
||||
"Determines whether channel logfiles will be\n"
|
||||
" flushed anytime they're written to, rather than being buffered by the\n"
|
||||
" operating system."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:52
|
||||
msgid ""
|
||||
"Determines whether formatting characters (such\n"
|
||||
" as bolding, color, etc.) are removed when writing the logs to disk."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:55
|
||||
msgid ""
|
||||
"Determines whether the logs for this channel are\n"
|
||||
" timestamped with the timestamp in supybot.log.timestampFormat."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:58
|
||||
msgid ""
|
||||
"Determines what string a message should be\n"
|
||||
" prefixed with in order not to be logged. If you don't want any such\n"
|
||||
" prefix, just set it to the empty string."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:62
|
||||
msgid ""
|
||||
"Determines whether the bot will automatically\n"
|
||||
" rotate the logs for this channel. The bot will rotate logs when the\n"
|
||||
" timestamp for the log changes. The timestamp is set according to\n"
|
||||
" the 'filenameTimestamp' configuration variable."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:67
|
||||
msgid ""
|
||||
"Determines how to represent the timestamp\n"
|
||||
" used for the filename in rotated logs. When this timestamp changes, the\n"
|
||||
" old logfiles will be closed and a new one started. The format characters\n"
|
||||
" for the timestamp are in the time.strftime docs at python.org. In order\n"
|
||||
" for your logs to be rotated, you'll also have to enable\n"
|
||||
" supybot.plugins.ChannelLogger.rotateLogs."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:75
|
||||
msgid ""
|
||||
"Determines whether the bot will partition its\n"
|
||||
" channel logs into separate directories based on different criteria."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:78
|
||||
msgid ""
|
||||
"Determines whether the bot will use a network\n"
|
||||
" directory if using directories."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:81
|
||||
msgid ""
|
||||
"Determines whether the bot will use a channel\n"
|
||||
" directory if using directories."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:84
|
||||
msgid ""
|
||||
"Determines whether the bot will use a timestamp\n"
|
||||
" (determined by supybot.plugins.ChannelLogger.directories.timestamp.format)\n"
|
||||
" if using directories."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:88
|
||||
msgid ""
|
||||
"Determines what timestamp format will be used in\n"
|
||||
" the directory stucture for channel logs if\n"
|
||||
" supybot.plugins.ChannelLogger.directories.timestamp is True."
|
||||
msgstr ""
|
||||
|
@ -39,6 +39,8 @@ import supybot.ircmsgs as ircmsgs
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.registry as registry
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('ChannelLogger')
|
||||
|
||||
class FakeLog(object):
|
||||
def flush(self):
|
||||
|
@ -31,6 +31,9 @@ import re
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
|
||||
_ = PluginInternationalization('ChannelStats')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
@ -54,16 +57,16 @@ class Smileys(registry.Value):
|
||||
|
||||
ChannelStats = conf.registerPlugin('ChannelStats')
|
||||
conf.registerChannelValue(ChannelStats, 'selfStats',
|
||||
registry.Boolean(True, """Determines whether the bot will keep channel
|
||||
registry.Boolean(True, _("""Determines whether the bot will keep channel
|
||||
statistics on itself, possibly skewing the channel stats (especially in
|
||||
cases where the bot is relaying between channels on a network)."""))
|
||||
cases where the bot is relaying between channels on a network).""")))
|
||||
conf.registerChannelValue(ChannelStats, 'smileys',
|
||||
Smileys(':) ;) ;] :-) :-D :D :P :p (= =)'.split(), """Determines what
|
||||
Smileys(':) ;) ;] :-) :-D :D :P :p (= =)'.split(), _("""Determines what
|
||||
words (i.e., pieces of text with no spaces in them) are considered
|
||||
'smileys' for the purposes of stats-keeping."""))
|
||||
'smileys' for the purposes of stats-keeping.""")))
|
||||
conf.registerChannelValue(ChannelStats, 'frowns',
|
||||
Smileys(':| :-/ :-\\ :\\ :/ :( :-( :\'('.split(), """Determines what words
|
||||
Smileys(':| :-/ :-\\ :\\ :/ :( :-( :\'('.split(), _("""Determines what words
|
||||
(i.e., pieces of text with no spaces in them ) are considered 'frowns' for
|
||||
the purposes of stats-keeping."""))
|
||||
the purposes of stats-keeping.""")))
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
||||
|
196
plugins/ChannelStats/locale/fr.po
Normal file
196
plugins/ChannelStats/locale/fr.po
Normal file
@ -0,0 +1,196 @@
|
||||
# French translations for supybot-i18n package
|
||||
# Traductions françaises du paquet supybot-i18n.
|
||||
# Copyright (C) 2010 THE supybot-i18n'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the supybot-i package.
|
||||
# ProgVal <progval@gmail.com>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: supybot-i18n\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-10-10 15:07+CEST\n"
|
||||
"PO-Revision-Date: 2010-10-10 15:42+0100\n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: French\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: config.py:57
|
||||
msgid ""
|
||||
"Determines whether the bot will keep channel\n"
|
||||
" statistics on itself, possibly skewing the channel stats (especially in\n"
|
||||
" cases where the bot is relaying between channels on a network)."
|
||||
msgstr "Détermine si le bot se prendre en compte dans les statistiques du canal, ce qui peut les fausser 'particulièrement dans le cas où le bot relaye entre des canaux)"
|
||||
|
||||
#: config.py:61
|
||||
msgid ""
|
||||
"Determines what\n"
|
||||
" words (i.e., pieces of text with no spaces in them) are considered\n"
|
||||
" 'smileys' for the purposes of stats-keeping."
|
||||
msgstr "Détermine quels mots (c'est à dire, les morceaux de texte sans espace) sont considérés comme smileys par les stats."
|
||||
|
||||
#: config.py:65
|
||||
msgid ""
|
||||
"Determines what words\n"
|
||||
" (i.e., pieces of text with no spaces in them ) are considered 'frowns' for\n"
|
||||
" the purposes of stats-keeping."
|
||||
msgstr "Détermine quels mots (c'est à dire, les morceaux de texte sans espace) sont considérés comme sadleys par les stats."
|
||||
|
||||
#: plugin.py:259
|
||||
msgid "I couldn't find you in my user database."
|
||||
msgstr "Je ne peux vous trouver dans ma base de données."
|
||||
|
||||
#: plugin.py:272
|
||||
msgid "%s has sent %n; a total of %n, %n, %n, and %n; %s of those messages %s. %s has joined %n, parted %n, quit %n, kicked someone %n, been kicked %n, changed the topic %n, and changed the mode %n."
|
||||
msgstr "%s a envoyé %n ; un total de %n, %n, %n, et %n ; %s de ces messages %s. %s est arrivé %n fois, est parti %n fois, a quitté %n fois, a kické %n fois, a été kické %n fois, a changé le topic %n fois, et a changé les modes %n fois."
|
||||
|
||||
#: plugin.py:279
|
||||
msgid "character"
|
||||
msgstr "caractère"
|
||||
|
||||
#: plugin.py:280
|
||||
#: plugin.py:363
|
||||
msgid "word"
|
||||
msgstr "mot"
|
||||
|
||||
#: plugin.py:281
|
||||
#: plugin.py:364
|
||||
msgid "smiley"
|
||||
msgstr "smiley"
|
||||
|
||||
#: plugin.py:282
|
||||
#: plugin.py:365
|
||||
msgid "frown"
|
||||
msgstr "sadley"
|
||||
|
||||
#: plugin.py:284
|
||||
#: plugin.py:366
|
||||
msgid "was an ACTION"
|
||||
msgstr "était une action"
|
||||
|
||||
#: plugin.py:285
|
||||
#: plugin.py:367
|
||||
msgid "were ACTIONs"
|
||||
msgstr "étaient des ACTIONs"
|
||||
|
||||
#: plugin.py:287
|
||||
#: plugin.py:288
|
||||
#: plugin.py:289
|
||||
#: plugin.py:290
|
||||
#: plugin.py:291
|
||||
#: plugin.py:292
|
||||
#: plugin.py:293
|
||||
msgid "time"
|
||||
msgstr "<empty>"
|
||||
|
||||
#: plugin.py:296
|
||||
msgid "I have no stats for that %s in %s."
|
||||
msgstr "Je n'ai pas de statistiques pour %s sur %s."
|
||||
|
||||
#: plugin.py:315
|
||||
msgid "There's really no reason why you should have underscores or brackets in your mathematical expression. Please remove them."
|
||||
msgstr "Il n'y a aucune raison pour que vous ayez des underscores ou des crochets dans vos expressions mathématiques. Veuillez les supprimer."
|
||||
|
||||
#: plugin.py:319
|
||||
msgid "You can't use lambda in this command."
|
||||
msgstr "Vous ne pouvez utiliser lambda dans cette commande."
|
||||
|
||||
#: plugin.py:333
|
||||
msgid "stat variable"
|
||||
msgstr "Variable statistique"
|
||||
|
||||
#: plugin.py:357
|
||||
msgid "On %s there %h been %i messages, containing %i characters, %n, %n, and %n; %i of those messages %s. There have been %n, %n, %n, %n, %n, and %n. There %b currently %n and the channel has peaked at %n."
|
||||
msgstr "Sur %s il y a eu%v %i messages, contenant %i caractères, %n, %n, et %n ; %i de ces messages %s. Il y a eu %n, %n, %n, %n, %n, et %n. Il y a%v actuellement %n et le record du canal est de %n."
|
||||
|
||||
#: plugin.py:368
|
||||
msgid "join"
|
||||
msgstr "arrivée"
|
||||
|
||||
#: plugin.py:369
|
||||
msgid "part"
|
||||
msgstr "départ"
|
||||
|
||||
#: plugin.py:370
|
||||
msgid "quit"
|
||||
msgstr "quit"
|
||||
|
||||
#: plugin.py:371
|
||||
msgid "kick"
|
||||
msgstr "kick"
|
||||
|
||||
#: plugin.py:372
|
||||
msgid "mode"
|
||||
msgstr "mode"
|
||||
|
||||
#: plugin.py:372
|
||||
#: plugin.py:373
|
||||
msgid "change"
|
||||
msgstr "changement"
|
||||
|
||||
#: plugin.py:373
|
||||
msgid "topic"
|
||||
msgstr "topic"
|
||||
|
||||
#: plugin.py:375
|
||||
#: plugin.py:376
|
||||
msgid "user"
|
||||
msgstr "utilisateur"
|
||||
|
||||
#: plugin.py:379
|
||||
msgid "I've never been on %s."
|
||||
msgstr "Je n'ai jamais été sur %s."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "[<channel>] [<name>]\n"
|
||||
#~ "\n"
|
||||
#~ " Returns the statistics for <name> on <channel>. <channel> is "
|
||||
#~ "only\n"
|
||||
#~ " necessary if the message isn't sent on the channel itself. If "
|
||||
#~ "<name>\n"
|
||||
#~ " isn't given, it defaults to the user sending the command.\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "[<canal>] [nom]\n"
|
||||
#~ "\n"
|
||||
#~ " Retourne les statistiques pour <nom> sur le <canal>. <canal> n'est "
|
||||
#~ "nécessaire que si le message n'est pas envoyé sur le canal lui-même. Si "
|
||||
#~ "<nom> n'est pas donné, il correspond par défaut à l'utilisateur envoyant "
|
||||
#~ "la commande"
|
||||
#~ msgid ""
|
||||
#~ "[<channel>] <stat expression>\n"
|
||||
#~ "\n"
|
||||
#~ " Returns the ranking of users according to the given stat "
|
||||
#~ "expression.\n"
|
||||
#~ " Valid variables in the stat expression include 'msgs', 'chars',\n"
|
||||
#~ " 'words', 'smileys', 'frowns', 'actions', 'joins', 'parts', "
|
||||
#~ "'quits',\n"
|
||||
#~ " 'kicks', 'kicked', 'topics', and 'modes'. Any simple "
|
||||
#~ "mathematical\n"
|
||||
#~ " expression involving those variables is permitted.\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "[<canal>] <expression de statistiques>\n"
|
||||
#~ "\n"
|
||||
#~ "Retourne le rang des utilisateurs en fonction de l'expression de "
|
||||
#~ "statistiques données. Les variables valides dans l'expression de "
|
||||
#~ "statistiques sont : 'msgs', 'chars', 'words', 'smileys', 'frowns', "
|
||||
#~ "'actions', 'joins', 'parts', 'quits', 'kicks', 'kicked', 'topics', et "
|
||||
#~ "'modes'. Toute expression mathématiques simple utilisant ces variables "
|
||||
#~ "est autorisée."
|
||||
#~ msgid ""
|
||||
#~ "[<channel>]\n"
|
||||
#~ "\n"
|
||||
#~ " Returns the statistics for <channel>. <channel> is only "
|
||||
#~ "necessary if\n"
|
||||
#~ " the message isn't sent on the channel itself.\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "[canal]\n"
|
||||
#~ "\n"
|
||||
#~ "Retourne les statistiques pour le <canal>. <canal> n'est nécessaire que "
|
||||
#~ "si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
165
plugins/ChannelStats/messages.pot
Normal file
165
plugins/ChannelStats/messages.pot
Normal file
@ -0,0 +1,165 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-16 09:41+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: config.py:60
|
||||
msgid ""
|
||||
"Determines whether the bot will keep channel\n"
|
||||
" statistics on itself, possibly skewing the channel stats (especially in\n"
|
||||
" cases where the bot is relaying between channels on a network)."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:64
|
||||
msgid ""
|
||||
"Determines what\n"
|
||||
" words (i.e., pieces of text with no spaces in them) are considered\n"
|
||||
" 'smileys' for the purposes of stats-keeping."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:68
|
||||
msgid ""
|
||||
"Determines what words\n"
|
||||
" (i.e., pieces of text with no spaces in them ) are considered 'frowns' for\n"
|
||||
" the purposes of stats-keeping."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:246
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<name>]\n"
|
||||
"\n"
|
||||
" Returns the statistics for <name> on <channel>. <channel> is only\n"
|
||||
" necessary if the message isn't sent on the channel itself. If <name>\n"
|
||||
" isn't given, it defaults to the user sending the command.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:259
|
||||
msgid "I couldn't find you in my user database."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:272
|
||||
msgid "%s has sent %n; a total of %n, %n, %n, and %n; %s of those messages %s. %s has joined %n, parted %n, quit %n, kicked someone %n, been kicked %n, changed the topic %n, and changed the mode %n."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:279
|
||||
msgid "character"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:280 plugin.py:363
|
||||
msgid "word"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:281 plugin.py:364
|
||||
msgid "smiley"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:282 plugin.py:365
|
||||
msgid "frown"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:284 plugin.py:366
|
||||
msgid "was an ACTION"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:285 plugin.py:367
|
||||
msgid "were ACTIONs"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:287 plugin.py:288 plugin.py:289 plugin.py:290 plugin.py:291
|
||||
#: plugin.py:292 plugin.py:293
|
||||
msgid "time"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:296
|
||||
msgid "I have no stats for that %s in %s."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:304
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <stat expression>\n"
|
||||
"\n"
|
||||
" Returns the ranking of users according to the given stat expression.\n"
|
||||
" Valid variables in the stat expression include 'msgs', 'chars',\n"
|
||||
" 'words', 'smileys', 'frowns', 'actions', 'joins', 'parts', 'quits',\n"
|
||||
" 'kicks', 'kicked', 'topics', and 'modes'. Any simple mathematical\n"
|
||||
" expression involving those variables is permitted.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:315
|
||||
msgid "There's really no reason why you should have underscores or brackets in your mathematical expression. Please remove them."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:319
|
||||
msgid "You can't use lambda in this command."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:333
|
||||
msgid "stat variable"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:349
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" Returns the statistics for <channel>. <channel> is only necessary if\n"
|
||||
" the message isn't sent on the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:357
|
||||
msgid "On %s there %h been %i messages, containing %i characters, %n, %n, and %n; %i of those messages %s. There have been %n, %n, %n, %n, %n, and %n. There %b currently %n and the channel has peaked at %n."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:368
|
||||
msgid "join"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:369
|
||||
msgid "part"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:370
|
||||
msgid "quit"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:371
|
||||
msgid "kick"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:372
|
||||
msgid "mode"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:372 plugin.py:373
|
||||
msgid "change"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:373
|
||||
msgid "topic"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:375 plugin.py:376
|
||||
msgid "user"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:379
|
||||
msgid "I've never been on %s."
|
||||
msgstr ""
|
||||
|
@ -34,6 +34,7 @@ import types
|
||||
|
||||
import supybot.log as log
|
||||
import supybot.conf as conf
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
import supybot.utils as utils
|
||||
import supybot.world as world
|
||||
import supybot.ircdb as ircdb
|
||||
@ -44,6 +45,8 @@ import supybot.plugins as plugins
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.callbacks as callbacks
|
||||
|
||||
_ = PluginInternationalization('ChannelStats')
|
||||
|
||||
class ChannelStat(irclib.IrcCommandDispatcher):
|
||||
_values = ['actions', 'chars', 'frowns', 'joins', 'kicks','modes',
|
||||
'msgs', 'parts', 'quits', 'smileys', 'topics', 'words', 'users']
|
||||
@ -238,6 +241,7 @@ class ChannelStats(callbacks.Plugin):
|
||||
self.db[channel, id] = UserStat()
|
||||
self.db.channels[channel][id].kicked += 1
|
||||
|
||||
@internationalizeDocstring
|
||||
def stats(self, irc, msg, args, channel, name):
|
||||
"""[<channel>] [<name>]
|
||||
|
||||
@ -252,7 +256,7 @@ class ChannelStats(callbacks.Plugin):
|
||||
id = ircdb.users.getUserId(msg.prefix)
|
||||
name = ircdb.users.getUser(id).name
|
||||
except KeyError:
|
||||
irc.error('I couldn\'t find you in my user database.')
|
||||
irc.error(_('I couldn\'t find you in my user database.'))
|
||||
return
|
||||
elif not ircdb.users.hasUser(name):
|
||||
try:
|
||||
@ -265,36 +269,37 @@ class ChannelStats(callbacks.Plugin):
|
||||
id = ircdb.users.getUserId(name)
|
||||
try:
|
||||
stats = self.db.getUserStats(channel, id)
|
||||
s = format('%s has sent %n; a total of %n, %n, '
|
||||
'%n, and %n; %s of those messages %s'
|
||||
s = format(_('%s has sent %n; a total of %n, %n, '
|
||||
'%n, and %n; %s of those messages %s. '
|
||||
'%s has joined %n, parted %n, quit %n, '
|
||||
'kicked someone %n, been kicked %n, '
|
||||
'changed the topic %n, and changed the '
|
||||
'mode %n.',
|
||||
'mode %n.'),
|
||||
name, (stats.msgs, 'message'),
|
||||
(stats.chars, 'character'),
|
||||
(stats.words, 'word'),
|
||||
(stats.smileys, 'smiley'),
|
||||
(stats.frowns, 'frown'),
|
||||
(stats.chars, _('character')),
|
||||
(stats.words, _('word')),
|
||||
(stats.smileys, _('smiley')),
|
||||
(stats.frowns, _('frown')),
|
||||
stats.actions,
|
||||
stats.actions == 1 and 'was an ACTION. '
|
||||
or 'were ACTIONs. ',
|
||||
stats.actions == 1 and _('was an ACTION')
|
||||
or _('were ACTIONs'),
|
||||
name,
|
||||
(stats.joins, 'time'),
|
||||
(stats.parts, 'time'),
|
||||
(stats.quits, 'time'),
|
||||
(stats.kicks, 'time'),
|
||||
(stats.kicked, 'time'),
|
||||
(stats.topics, 'time'),
|
||||
(stats.modes, 'time'))
|
||||
(stats.joins, _('time')),
|
||||
(stats.parts, _('time')),
|
||||
(stats.quits, _('time')),
|
||||
(stats.kicks, _('time')),
|
||||
(stats.kicked, _('time')),
|
||||
(stats.topics, _('time')),
|
||||
(stats.modes, _('time')))
|
||||
irc.reply(s)
|
||||
except KeyError:
|
||||
irc.error(format('I have no stats for that %s in %s.',
|
||||
irc.error(format(_('I have no stats for that %s in %s.'),
|
||||
name, channel))
|
||||
stats = wrap(stats, ['channeldb', additional('something')])
|
||||
|
||||
_env = {'__builtins__': types.ModuleType('__builtins__')}
|
||||
_env.update(math.__dict__)
|
||||
@internationalizeDocstring
|
||||
def rank(self, irc, msg, args, channel, expr):
|
||||
"""[<channel>] <stat expression>
|
||||
|
||||
@ -307,11 +312,11 @@ class ChannelStats(callbacks.Plugin):
|
||||
# XXX I could do this the right way, and abstract out a safe eval,
|
||||
# or I could just copy/paste from the Math plugin.
|
||||
if expr != expr.translate(utils.str.chars, '_[]'):
|
||||
irc.error('There\'s really no reason why you should have '
|
||||
irc.error(_('There\'s really no reason why you should have '
|
||||
'underscores or brackets in your mathematical '
|
||||
'expression. Please remove them.', Raise=True)
|
||||
'expression. Please remove them.'), Raise=True)
|
||||
if 'lambda' in expr:
|
||||
irc.error('You can\'t use lambda in this command.', Raise=True)
|
||||
irc.error(_('You can\'t use lambda in this command.'), Raise=True)
|
||||
expr = expr.lower()
|
||||
users = []
|
||||
for ((c, id), stats) in self.db.items():
|
||||
@ -325,7 +330,7 @@ class ChannelStats(callbacks.Plugin):
|
||||
except ZeroDivisionError:
|
||||
v = float('inf')
|
||||
except NameError, e:
|
||||
irc.errorInvalid('stat variable', str(e).split()[1])
|
||||
irc.errorInvalid(_('stat variable'), str(e).split()[1])
|
||||
except Exception, e:
|
||||
irc.error(utils.exnToString(e), Raise=True)
|
||||
if id == 0:
|
||||
@ -339,6 +344,7 @@ class ChannelStats(callbacks.Plugin):
|
||||
irc.reply(s)
|
||||
rank = wrap(rank, ['channeldb', 'text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def channelstats(self, irc, msg, args, channel):
|
||||
"""[<channel>]
|
||||
|
||||
@ -348,29 +354,29 @@ class ChannelStats(callbacks.Plugin):
|
||||
try:
|
||||
stats = self.db.getChannelStats(channel)
|
||||
curUsers = len(irc.state.channels[channel].users)
|
||||
s = format('On %s there %h been %i messages, containing %i '
|
||||
s = format(_('On %s there %h been %i messages, containing %i '
|
||||
'characters, %n, %n, and %n; '
|
||||
'%i of those messages %s. There have been '
|
||||
'%n, %n, %n, %n, %n, and %n. There %b currently %n '
|
||||
'and the channel has peaked at %n.',
|
||||
'and the channel has peaked at %n.'),
|
||||
channel, stats.msgs, stats.msgs, stats.chars,
|
||||
(stats.words, 'word'),
|
||||
(stats.smileys, 'smiley'),
|
||||
(stats.frowns, 'frown'),
|
||||
stats.actions, stats.actions == 1 and 'was an ACTION'
|
||||
or 'were ACTIONs',
|
||||
(stats.joins, 'join'),
|
||||
(stats.parts, 'part'),
|
||||
(stats.quits, 'quit'),
|
||||
(stats.kicks, 'kick'),
|
||||
(stats.modes, 'mode', 'change'),
|
||||
(stats.topics, 'topic', 'change'),
|
||||
(stats.words, _('word')),
|
||||
(stats.smileys, _('smiley')),
|
||||
(stats.frowns, _('frown')),
|
||||
stats.actions, stats.actions == 1 and _('was an ACTION')
|
||||
or _('were ACTIONs'),
|
||||
(stats.joins, _('join')),
|
||||
(stats.parts, _('part')),
|
||||
(stats.quits, _('quit')),
|
||||
(stats.kicks, _('kick')),
|
||||
(stats.modes, _('mode'), _('change')),
|
||||
(stats.topics, _('topic'), _('change')),
|
||||
curUsers,
|
||||
(curUsers, 'user'),
|
||||
(stats.users, 'user'))
|
||||
(curUsers, _('user')),
|
||||
(stats.users, _('user')))
|
||||
irc.reply(s)
|
||||
except KeyError:
|
||||
irc.error(format('I\'ve never been on %s.', channel))
|
||||
irc.error(format(_('I\'ve never been on %s.'), channel))
|
||||
channelstats = wrap(channelstats, ['channeldb'])
|
||||
|
||||
|
||||
|
@ -30,6 +30,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Config')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
|
156
plugins/Config/locale/fr.po
Normal file
156
plugins/Config/locale/fr.po
Normal file
@ -0,0 +1,156 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-12-12 15:02+CET\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: plugin.py:103
|
||||
msgid "configuration variable"
|
||||
msgstr "variable de configuration"
|
||||
|
||||
#: plugin.py:109
|
||||
msgid "settable configuration variable"
|
||||
msgstr "variable de configuration modifiable"
|
||||
|
||||
#: plugin.py:136
|
||||
msgid ""
|
||||
"<group>\n"
|
||||
"\n"
|
||||
" Returns the configuration variables available under the given\n"
|
||||
" configuration <group>. If a variable has values under it, it is\n"
|
||||
" preceded by an '@' sign. If a variable is a 'ChannelValue', that is,\n"
|
||||
" it can be separately configured for each channel using the 'channel'\n"
|
||||
" command in this plugin, it is preceded by an '#' sign.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<groupe>\n"
|
||||
"\n"
|
||||
"Retourne les variables de configuration qui sont dans le <groupe> de configuration. Si la variable a des sous-variables, elle sera précédée par le signe '@'. Si une variable est une 'ChannelValue', elle sera précédée par le signe '#'. Plus d'informations : http://supybot-fr.tk/Configuration"
|
||||
|
||||
#: plugin.py:148
|
||||
msgid "There don't seem to be any values in %s."
|
||||
msgstr "Il semble n'y avoir aucune valeur dans %s."
|
||||
|
||||
#: plugin.py:154
|
||||
msgid ""
|
||||
"<word>\n"
|
||||
"\n"
|
||||
" Searches for <word> in the current configuration variables.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<mot>\n"
|
||||
"\n"
|
||||
"Recherche le <mot> dans les variables de configuration."
|
||||
|
||||
#: plugin.py:167
|
||||
msgid "There were no matching configuration variables."
|
||||
msgstr "Il n'y a aucune variable de configuration correspondante."
|
||||
|
||||
#: plugin.py:174
|
||||
msgid "Global: %s; %s: %s"
|
||||
msgstr "Globale : %s ; %s : %s"
|
||||
|
||||
#: plugin.py:185
|
||||
msgid "That registry variable has no value. Use the list command in this plugin to see what variables are available in this group."
|
||||
msgstr "Cette variable de registre n'a aucune valeur. Utilisez la commande 'list' sur ce plugin pour voir quelles variables sont disponibles pour ce groupe."
|
||||
|
||||
#: plugin.py:200
|
||||
msgid ""
|
||||
"[<channel>] <name> [<value>]\n"
|
||||
"\n"
|
||||
" If <value> is given, sets the channel configuration variable for <name>\n"
|
||||
" to <value> for <channel>. Otherwise, returns the current channel\n"
|
||||
" configuration value of <name>. <channel> is only necessary if the\n"
|
||||
" message isn't sent in the channel itself."
|
||||
msgstr ""
|
||||
"[<canal>] <nom> [<valeur>]\n"
|
||||
"\n"
|
||||
"Si la <valeur> est donnée, défini la variable de configuration <nom> à <valeur> sur le <canal>. Sinon, retourne la configuration actuelle du <canal> pour <nom>. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:207
|
||||
msgid "That configuration variable is not a channel-specific configuration variable."
|
||||
msgstr "Cette variable de configuration n'est pas une variable spécifique à un canal."
|
||||
|
||||
#: plugin.py:220
|
||||
msgid ""
|
||||
"<name> [<value>]\n"
|
||||
"\n"
|
||||
" If <value> is given, sets the value of <name> to <value>. Otherwise,\n"
|
||||
" returns the current value of <name>. You may omit the leading\n"
|
||||
" \"supybot.\" in the name if you so choose.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<nom> [<valeur>]\n"
|
||||
"\n"
|
||||
"Si la <valeur> est donnée, défini la variable de configuration <nom> à <valeur>. Sinon, retourne la configuration actuelle de <nom>. Vous pouvez omettre le 'supybot.' au début du <nom>."
|
||||
|
||||
#: plugin.py:234
|
||||
msgid ""
|
||||
"<name>\n"
|
||||
"\n"
|
||||
" Returns the description of the configuration variable <name>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<nom>\n"
|
||||
"\n"
|
||||
"Retourne la description de la variable de configuration <nom>."
|
||||
|
||||
#: plugin.py:242
|
||||
msgid " (Current value: %s)"
|
||||
msgstr " (Valeur courante : %s)"
|
||||
|
||||
#: plugin.py:245
|
||||
msgid "That configuration group exists, but seems to have no help. Try \"config list %s\" to see if it has any children values."
|
||||
msgstr "Ce groupe de configuration existe mais semble ne pas avoir d'aide. Essayez \"config list %s\" pour voir si il a des valeurs filles."
|
||||
|
||||
#: plugin.py:249
|
||||
msgid "%s has no help."
|
||||
msgstr "%s n'a pas d'aide."
|
||||
|
||||
#: plugin.py:254
|
||||
msgid ""
|
||||
"<name>\n"
|
||||
"\n"
|
||||
" Returns the default value of the configuration variable <name>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<nom>\n"
|
||||
"\n"
|
||||
"Retourne la valeur par défaut de la variable de configuration <nom>."
|
||||
|
||||
#: plugin.py:264
|
||||
msgid ""
|
||||
"takes no arguments\n"
|
||||
"\n"
|
||||
" Reloads the various configuration files (user database, channel\n"
|
||||
" database, registry, etc.).\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"ne prend pas d'argument\n"
|
||||
"\n"
|
||||
"Recharge les différents fichiers de configuration (base d'utilisateurs, base de canaux, registre, etc.)."
|
||||
|
||||
#: plugin.py:275
|
||||
msgid ""
|
||||
"<filename>\n"
|
||||
"\n"
|
||||
" Exports the public variables of your configuration to <filename>.\n"
|
||||
" If you want to show someone your configuration file, but you don't\n"
|
||||
" want that person to be able to see things like passwords, etc., this\n"
|
||||
" command will export a \"sanitized\" configuration file suitable for\n"
|
||||
" showing publicly.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<nom de fichier>\n"
|
||||
"\n"
|
||||
"Exporte les variables de configuration publiques dans le fichier<nom de fichier. Si vous voulez donner à quelqu'un votre fichierde configuration, mais que vous ne voulez pas que cette personnepuisse voir des choses comme les mot de passe, ... cette commandedébarrasse le fichier de configuration exporté des données qui nedoivent pas être publiques."
|
||||
|
142
plugins/Config/messages.pot
Normal file
142
plugins/Config/messages.pot
Normal file
@ -0,0 +1,142 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-12-12 15:02+CET\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: plugin.py:103
|
||||
msgid "configuration variable"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:109
|
||||
msgid "settable configuration variable"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:136
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<group>\n"
|
||||
"\n"
|
||||
" Returns the configuration variables available under the given\n"
|
||||
" configuration <group>. If a variable has values under it, it is\n"
|
||||
" preceded by an '@' sign. If a variable is a 'ChannelValue', that is,\n"
|
||||
" it can be separately configured for each channel using the 'channel'\n"
|
||||
" command in this plugin, it is preceded by an '#' sign.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:148
|
||||
msgid "There don't seem to be any values in %s."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:154
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<word>\n"
|
||||
"\n"
|
||||
" Searches for <word> in the current configuration variables.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:167
|
||||
msgid "There were no matching configuration variables."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:174
|
||||
msgid "Global: %s; %s: %s"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:185
|
||||
msgid "That registry variable has no value. Use the list command in this plugin to see what variables are available in this group."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:200
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <name> [<value>]\n"
|
||||
"\n"
|
||||
" If <value> is given, sets the channel configuration variable for <name>\n"
|
||||
" to <value> for <channel>. Otherwise, returns the current channel\n"
|
||||
" configuration value of <name>. <channel> is only necessary if the\n"
|
||||
" message isn't sent in the channel itself."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:207
|
||||
msgid "That configuration variable is not a channel-specific configuration variable."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:220
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<name> [<value>]\n"
|
||||
"\n"
|
||||
" If <value> is given, sets the value of <name> to <value>. Otherwise,\n"
|
||||
" returns the current value of <name>. You may omit the leading\n"
|
||||
" \"supybot.\" in the name if you so choose.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:234
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<name>\n"
|
||||
"\n"
|
||||
" Returns the description of the configuration variable <name>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:242
|
||||
msgid " (Current value: %s)"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:245
|
||||
msgid "That configuration group exists, but seems to have no help. Try \"config list %s\" to see if it has any children values."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:249
|
||||
msgid "%s has no help."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:254
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<name>\n"
|
||||
"\n"
|
||||
" Returns the default value of the configuration variable <name>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:264
|
||||
#, docstring
|
||||
msgid ""
|
||||
"takes no arguments\n"
|
||||
"\n"
|
||||
" Reloads the various configuration files (user database, channel\n"
|
||||
" database, registry, etc.).\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:275
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<filename>\n"
|
||||
"\n"
|
||||
" Exports the public variables of your configuration to <filename>.\n"
|
||||
" If you want to show someone your configuration file, but you don't\n"
|
||||
" want that person to be able to see things like passwords, etc., this\n"
|
||||
" command will export a \"sanitized\" configuration file suitable for\n"
|
||||
" showing publicly.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
@ -41,6 +41,8 @@ from supybot.utils.iter import all
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.registry as registry
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Config')
|
||||
|
||||
###
|
||||
# Now, to setup the registry.
|
||||
@ -98,13 +100,13 @@ def getConfigVar(irc, msg, args, state):
|
||||
state.args.append(group)
|
||||
del args[0]
|
||||
except registry.InvalidRegistryName, e:
|
||||
state.errorInvalid('configuration variable', str(e))
|
||||
state.errorInvalid(_('configuration variable'), str(e))
|
||||
addConverter('configVar', getConfigVar)
|
||||
|
||||
def getSettableConfigVar(irc, msg, args, state):
|
||||
getConfigVar(irc, msg, args, state)
|
||||
if not hasattr(state.args[-1], 'set'):
|
||||
state.errorInvalid('settable configuration variable',
|
||||
state.errorInvalid(_('settable configuration variable'),
|
||||
state.args[-1]._name)
|
||||
addConverter('settableConfigVar', getSettableConfigVar)
|
||||
|
||||
@ -129,6 +131,7 @@ class Config(callbacks.Plugin):
|
||||
utils.sortBy(str.lower, L)
|
||||
return L
|
||||
|
||||
@internationalizeDocstring
|
||||
def list(self, irc, msg, args, group):
|
||||
"""<group>
|
||||
|
||||
@ -142,16 +145,18 @@ class Config(callbacks.Plugin):
|
||||
if L:
|
||||
irc.reply(format('%L', L))
|
||||
else:
|
||||
irc.error('There don\'t seem to be any values in %s.' % group._name)
|
||||
irc.error(_('There don\'t seem to be any values in %s.') %
|
||||
group._name)
|
||||
list = wrap(list, ['configVar'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def search(self, irc, msg, args, word):
|
||||
"""<word>
|
||||
|
||||
Searches for <word> in the current configuration variables.
|
||||
"""
|
||||
L = []
|
||||
for (name, _) in conf.supybot.getValues(getChildren=True):
|
||||
for (name, x) in conf.supybot.getValues(getChildren=True):
|
||||
if word in name.lower():
|
||||
possibleChannel = registry.split(name)[-1]
|
||||
if not ircutils.isChannel(possibleChannel):
|
||||
@ -159,14 +164,14 @@ class Config(callbacks.Plugin):
|
||||
if L:
|
||||
irc.reply(format('%L', L))
|
||||
else:
|
||||
irc.reply('There were no matching configuration variables.')
|
||||
irc.reply(_('There were no matching configuration variables.'))
|
||||
search = wrap(search, ['lowered']) # XXX compose with withoutSpaces?
|
||||
|
||||
def _getValue(self, irc, msg, group, addChannel=False):
|
||||
value = str(group) or ' '
|
||||
if addChannel and irc.isChannel(msg.args[0]) and not irc.nested:
|
||||
s = str(group.get(msg.args[0]))
|
||||
value = 'Global: %s; %s: %s' % (value, msg.args[0], s)
|
||||
value = _('Global: %s; %s: %s') % (value, msg.args[0], s)
|
||||
if hasattr(group, 'value'):
|
||||
if not group._private:
|
||||
irc.reply(value)
|
||||
@ -177,9 +182,9 @@ class Config(callbacks.Plugin):
|
||||
else:
|
||||
irc.errorNoCapability(capability)
|
||||
else:
|
||||
irc.error('That registry variable has no value. Use the list '
|
||||
irc.error(_('That registry variable has no value. Use the list '
|
||||
'command in this plugin to see what variables are '
|
||||
'available in this group.')
|
||||
'available in this group.'))
|
||||
|
||||
def _setValue(self, irc, msg, group, value):
|
||||
capability = getCapability(group._name)
|
||||
@ -190,6 +195,7 @@ class Config(callbacks.Plugin):
|
||||
else:
|
||||
irc.errorNoCapability(capability)
|
||||
|
||||
@internationalizeDocstring
|
||||
def channel(self, irc, msg, args, channel, group, value):
|
||||
"""[<channel>] <name> [<value>]
|
||||
|
||||
@ -198,8 +204,8 @@ class Config(callbacks.Plugin):
|
||||
configuration value of <name>. <channel> is only necessary if the
|
||||
message isn't sent in the channel itself."""
|
||||
if not group.channelValue:
|
||||
irc.error('That configuration variable is not a channel-specific '
|
||||
'configuration variable.')
|
||||
irc.error(_('That configuration variable is not a channel-specific '
|
||||
'configuration variable.'))
|
||||
return
|
||||
group = group.get(channel)
|
||||
if value is not None:
|
||||
@ -209,6 +215,7 @@ class Config(callbacks.Plugin):
|
||||
channel = wrap(channel, ['channel', 'settableConfigVar',
|
||||
additional('text')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def config(self, irc, msg, args, group, value):
|
||||
"""<name> [<value>]
|
||||
|
||||
@ -222,6 +229,7 @@ class Config(callbacks.Plugin):
|
||||
self._getValue(irc, msg, group, addChannel=group.channelValue)
|
||||
config = wrap(config, ['settableConfigVar', additional('text')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def help(self, irc, msg, args, group):
|
||||
"""<name>
|
||||
|
||||
@ -231,16 +239,17 @@ class Config(callbacks.Plugin):
|
||||
s = group.help()
|
||||
if s:
|
||||
if hasattr(group, 'value') and not group._private:
|
||||
s += ' (Current value: %s)' % group
|
||||
s += _(' (Current value: %s)') % group
|
||||
irc.reply(s)
|
||||
else:
|
||||
irc.reply('That configuration group exists, but seems to have '
|
||||
'no help. Try "config list %s" to see if it has '
|
||||
'any children values.' % group._name)
|
||||
irc.reply(_('That configuration group exists, but seems to '
|
||||
'have no help. Try "config list %s" to see if it '
|
||||
'has any children values.') % group._name)
|
||||
else:
|
||||
irc.error('%s has no help.' % group._name)
|
||||
irc.error(_('%s has no help.') % group._name)
|
||||
help = wrap(help, ['configVar'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def default(self, irc, msg, args, group):
|
||||
"""<name>
|
||||
|
||||
@ -250,6 +259,7 @@ class Config(callbacks.Plugin):
|
||||
irc.reply(str(v))
|
||||
default = wrap(default, ['settableConfigVar'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def reload(self, irc, msg, args):
|
||||
"""takes no arguments
|
||||
|
||||
@ -260,6 +270,7 @@ class Config(callbacks.Plugin):
|
||||
irc.replySuccess()
|
||||
reload = wrap(reload, [('checkCapability', 'owner')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def export(self, irc, msg, args, filename):
|
||||
"""<filename>
|
||||
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Ctcp')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
|
19
plugins/Ctcp/locale/fr.po
Normal file
19
plugins/Ctcp/locale/fr.po
Normal file
@ -0,0 +1,19 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-26 18:57+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: plugin.py:104
|
||||
msgid "Supybot, the best Python IRC bot in existence!"
|
||||
msgstr "Supybot, le meilleur bot IRC en Python au monde !"
|
||||
|
21
plugins/Ctcp/messages.pot
Normal file
21
plugins/Ctcp/messages.pot
Normal file
@ -0,0 +1,21 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-26 18:57+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: plugin.py:104
|
||||
msgid "Supybot, the best Python IRC bot in existence!"
|
||||
msgstr ""
|
||||
|
@ -36,6 +36,8 @@ import supybot.ircmsgs as ircmsgs
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.schedule as schedule
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Ctcp')
|
||||
|
||||
class Ctcp(callbacks.PluginRegexp):
|
||||
public = False
|
||||
@ -98,8 +100,8 @@ class Ctcp(callbacks.PluginRegexp):
|
||||
def ctcpFinger(self, irc, msg, match):
|
||||
"\x01FINGER\x01"
|
||||
self.log.info('Received CTCP FINGER from %s', msg.prefix)
|
||||
self._reply(irc, msg,
|
||||
'FINGER Supybot, the best Python IRC bot in existence!')
|
||||
self._reply(irc, msg, 'FINGER ' +
|
||||
_('Supybot, the best Python IRC bot in existence!'))
|
||||
|
||||
def ctcpSource(self, irc, msg, match):
|
||||
"\x01SOURCE\x01"
|
||||
@ -116,6 +118,7 @@ class Ctcp(callbacks.PluginRegexp):
|
||||
if version == 'VERSION':
|
||||
self.versions.setdefault(payload, []).append(msg.nick)
|
||||
|
||||
@internationalizeDocstring
|
||||
def version(self, irc, msg, args, channel, optlist):
|
||||
"""[<channel>] [--nicks]
|
||||
|
||||
|
@ -29,22 +29,24 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Dict')
|
||||
|
||||
def configure(advanced):
|
||||
from supybot.questions import output, expect, anything, something, yn
|
||||
conf.registerPlugin('Dict', True)
|
||||
output('The default dictd server is dict.org.')
|
||||
if yn('Would you like to specify a different dictd server?'):
|
||||
output(_('The default dictd server is dict.org.'))
|
||||
if yn(_('Would you like to specify a different dictd server?')):
|
||||
server = something('What server?')
|
||||
conf.supybot.plugins.Dict.server.set(server)
|
||||
|
||||
Dict = conf.registerPlugin('Dict')
|
||||
conf.registerGlobalValue(Dict, 'server',
|
||||
registry.String('dict.org', """Determines what server the bot will
|
||||
retrieve definitions from."""))
|
||||
registry.String('dict.org', _("""Determines what server the bot will
|
||||
retrieve definitions from.""")))
|
||||
conf.registerChannelValue(Dict, 'default',
|
||||
registry.String('', """Determines the default dictionary the bot will
|
||||
registry.String('', _("""Determines the default dictionary the bot will
|
||||
ask for definitions in. If this value is '*' (without the quotes) the bot
|
||||
will use all dictionaries to define words."""))
|
||||
will use all dictionaries to define words.""")))
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
||||
|
86
plugins/Dict/locale/fr.po
Normal file
86
plugins/Dict/locale/fr.po
Normal file
@ -0,0 +1,86 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-17 10:39+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: config.py:38
|
||||
msgid "The default dictd server is dict.org."
|
||||
msgstr "Le serveur dictd par défaut est dict.org"
|
||||
|
||||
#: config.py:39
|
||||
msgid "Would you like to specify a different dictd server?"
|
||||
msgstr "Voulez-vous spécifier un serveur dictd différent ?"
|
||||
|
||||
#: config.py:45
|
||||
msgid ""
|
||||
"Determines what server the bot will\n"
|
||||
" retrieve definitions from."
|
||||
msgstr "Détermine de quel serveur le bot récupérera les définitions."
|
||||
|
||||
#: config.py:48
|
||||
msgid ""
|
||||
"Determines the default dictionary the bot will\n"
|
||||
" ask for definitions in. If this value is '*' (without the quotes) the bot\n"
|
||||
" will use all dictionaries to define words."
|
||||
msgstr "Détermine le dictionnaire par défaut dans lequel le bot cherchera les définitions. Si la valeur est '*' (sans les guillemets), le bot utilisera tous les dictionnaires pour définir le mot."
|
||||
|
||||
#: plugin.py:52
|
||||
msgid ""
|
||||
"takes no arguments\n"
|
||||
"\n"
|
||||
" Returns the dictionaries valid for the dict command.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"ne prend pas d'argument\n"
|
||||
"\n"
|
||||
"Retourne les dictionnaires valides pour la commande dict."
|
||||
|
||||
#: plugin.py:68
|
||||
msgid ""
|
||||
"takes no arguments\n"
|
||||
"\n"
|
||||
" Returns a random valid dictionary.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"ne prend pas d'argument\n"
|
||||
"\n"
|
||||
"Retourne un dictionnaire valide aléatoire."
|
||||
|
||||
#: plugin.py:83
|
||||
msgid ""
|
||||
"[<dictionary>] <word>\n"
|
||||
"\n"
|
||||
" Looks up the definition of <word> on the dictd server specified by\n"
|
||||
" the supybot.plugins.Dict.server config variable.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<dictionnaire>] <mot>\n"
|
||||
"\n"
|
||||
"Recherche la définition du mot sur le serveur dictd spécifié par la variable de configuration supybot.plugins.Dict.server."
|
||||
|
||||
#: plugin.py:106
|
||||
msgid "You must give a word to define."
|
||||
msgstr "Vous devez donner un mot à définir."
|
||||
|
||||
#: plugin.py:112
|
||||
msgid "No definition for %q could be found."
|
||||
msgstr "La définition de %q ne peut être trouvée."
|
||||
|
||||
#: plugin.py:115
|
||||
msgid "No definition for %q could be found in %s"
|
||||
msgstr "La définition de %q ne peut être trouvée dans %s."
|
||||
|
||||
#: plugin.py:127
|
||||
msgid "%L responded: %s"
|
||||
msgstr "%L a répondu : %s"
|
||||
|
82
plugins/Dict/messages.pot
Normal file
82
plugins/Dict/messages.pot
Normal file
@ -0,0 +1,82 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-17 10:39+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: config.py:38
|
||||
msgid "The default dictd server is dict.org."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:39
|
||||
msgid "Would you like to specify a different dictd server?"
|
||||
msgstr ""
|
||||
|
||||
#: config.py:45
|
||||
msgid ""
|
||||
"Determines what server the bot will\n"
|
||||
" retrieve definitions from."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:48
|
||||
msgid ""
|
||||
"Determines the default dictionary the bot will\n"
|
||||
" ask for definitions in. If this value is '*' (without the quotes) the bot\n"
|
||||
" will use all dictionaries to define words."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:52
|
||||
#, docstring
|
||||
msgid ""
|
||||
"takes no arguments\n"
|
||||
"\n"
|
||||
" Returns the dictionaries valid for the dict command.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:68
|
||||
#, docstring
|
||||
msgid ""
|
||||
"takes no arguments\n"
|
||||
"\n"
|
||||
" Returns a random valid dictionary.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:83
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<dictionary>] <word>\n"
|
||||
"\n"
|
||||
" Looks up the definition of <word> on the dictd server specified by\n"
|
||||
" the supybot.plugins.Dict.server config variable.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:106
|
||||
msgid "You must give a word to define."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:112
|
||||
msgid "No definition for %q could be found."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:115
|
||||
msgid "No definition for %q could be found in %s"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:127
|
||||
msgid "%L responded: %s"
|
||||
msgstr ""
|
||||
|
@ -35,6 +35,8 @@ import supybot.utils as utils
|
||||
from supybot.commands import *
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Dict')
|
||||
|
||||
try:
|
||||
dictclient = utils.python.universalImport('dictclient', 'local.dictclient')
|
||||
@ -45,6 +47,7 @@ except ImportError:
|
||||
|
||||
class Dict(callbacks.Plugin):
|
||||
threaded = True
|
||||
@internationalizeDocstring
|
||||
def dictionaries(self, irc, msg, args):
|
||||
"""takes no arguments
|
||||
|
||||
@ -60,6 +63,7 @@ class Dict(callbacks.Plugin):
|
||||
irc.error(utils.web.strError(e))
|
||||
dictionaries = wrap(dictionaries)
|
||||
|
||||
@internationalizeDocstring
|
||||
def random(self, irc, msg, args):
|
||||
"""takes no arguments
|
||||
|
||||
@ -74,6 +78,7 @@ class Dict(callbacks.Plugin):
|
||||
irc.error(utils.web.strError(e))
|
||||
random = wrap(random)
|
||||
|
||||
@internationalizeDocstring
|
||||
def dict(self, irc, msg, args, words):
|
||||
"""[<dictionary>] <word>
|
||||
|
||||
@ -98,16 +103,17 @@ class Dict(callbacks.Plugin):
|
||||
'dictionary: %s.', msg.args[0], default)
|
||||
dictionary = '*'
|
||||
if not words:
|
||||
irc.error('You must give a word to define.', Raise=True)
|
||||
irc.error(_('You must give a word to define.'), Raise=True)
|
||||
word = ' '.join(words)
|
||||
definitions = conn.define(dictionary, word)
|
||||
dbs = set()
|
||||
if not definitions:
|
||||
if dictionary == '*':
|
||||
irc.reply(format('No definition for %q could be found.', word))
|
||||
irc.reply(format(_('No definition for %q could be found.'),
|
||||
word))
|
||||
else:
|
||||
irc.reply(format('No definition for %q could be found in %s',
|
||||
word, ircutils.bold(dictionary)))
|
||||
irc.reply(format(_('No definition for %q could be found in '
|
||||
'%s'), word, ircutils.bold(dictionary)))
|
||||
return
|
||||
L = []
|
||||
for d in definitions:
|
||||
@ -118,7 +124,7 @@ class Dict(callbacks.Plugin):
|
||||
L.append('%s: %s' % (db, s))
|
||||
utils.sortBy(len, L)
|
||||
if dictionary == '*' and len(dbs) > 1:
|
||||
s = format('%L responded: %s', list(dbs), '; '.join(L))
|
||||
s = format(_('%L responded: %s'), list(dbs), '; '.join(L))
|
||||
else:
|
||||
s = '; '.join(L)
|
||||
irc.reply(s)
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Dunno')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
@ -41,8 +43,8 @@ def configure(advanced):
|
||||
|
||||
Dunno = conf.registerPlugin('Dunno')
|
||||
conf.registerChannelValue(Dunno, 'prefixNick',
|
||||
registry.Boolean(True, """Determines whether the bot will prefix the nick
|
||||
of the user giving an invalid command to the "dunno" response."""))
|
||||
registry.Boolean(True, _("""Determines whether the bot will prefix the nick
|
||||
of the user giving an invalid command to the "dunno" response.""")))
|
||||
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
||||
|
30
plugins/Dunno/locale/fr.po
Normal file
30
plugins/Dunno/locale/fr.po
Normal file
@ -0,0 +1,30 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-17 10:48+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: config.py:46
|
||||
msgid ""
|
||||
"Determines whether the bot will prefix the nick\n"
|
||||
" of the user giving an invalid command to the \"dunno\" response."
|
||||
msgstr "Détermine si le bot utilisera comme préfixe le nick de l'utilisateur donnant la commande invalide dans la réponse \"dunno\"."
|
||||
|
||||
#: plugin.py:38
|
||||
msgid ""
|
||||
"This plugin was written initially to work with MoobotFactoids, the two\n"
|
||||
" of them to provide a similar-to-moobot-and-blootbot interface for factoids.\n"
|
||||
" Basically, it replaces the standard 'Error: <x> is not a valid command.'\n"
|
||||
" messages with messages kept in a database, able to give more personable\n"
|
||||
" responses."
|
||||
msgstr "Ce plugin était à l'origine écrit pour fonctionner avec MoobotFactoids, pour fournir une interface similaire aux factoids de moobot et blootbot. Remplace simplement les message 'Error: <x> is not a valid commande' par des messages configurés dans la base de données, ce qui vous permet de rendre les réponses plus personnalisables."
|
||||
|
33
plugins/Dunno/messages.pot
Normal file
33
plugins/Dunno/messages.pot
Normal file
@ -0,0 +1,33 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-17 10:48+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: config.py:46
|
||||
msgid ""
|
||||
"Determines whether the bot will prefix the nick\n"
|
||||
" of the user giving an invalid command to the \"dunno\" response."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:38
|
||||
#, docstring
|
||||
msgid ""
|
||||
"This plugin was written initially to work with MoobotFactoids, the two\n"
|
||||
" of them to provide a similar-to-moobot-and-blootbot interface for factoids.\n"
|
||||
" Basically, it replaces the standard 'Error: <x> is not a valid command.'\n"
|
||||
" messages with messages kept in a database, able to give more personable\n"
|
||||
" responses."
|
||||
msgstr ""
|
||||
|
@ -30,6 +30,8 @@
|
||||
from supybot.commands import *
|
||||
import supybot.plugins as plugins
|
||||
import supybot.ircutils as ircutils
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Dunno')
|
||||
|
||||
class Dunno(plugins.ChannelIdDatabasePlugin):
|
||||
"""This plugin was written initially to work with MoobotFactoids, the two
|
||||
@ -49,7 +51,7 @@ class Dunno(plugins.ChannelIdDatabasePlugin):
|
||||
env = {'command': tokens[0]}
|
||||
dunno = ircutils.standardSubstitute(irc, msg, dunno, env=env)
|
||||
irc.reply(dunno, prefixNick=prefixNick)
|
||||
|
||||
Dunno = internationalizeDocstring(Dunno)
|
||||
|
||||
Class = Dunno
|
||||
|
||||
|
@ -30,6 +30,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Factoids')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
@ -46,22 +48,22 @@ class FactoidFormat(registry.TemplatedString):
|
||||
|
||||
Factoids = conf.registerPlugin('Factoids')
|
||||
conf.registerChannelValue(Factoids, 'learnSeparator',
|
||||
registry.String('as', """Determines what separator must be used in the
|
||||
registry.String('as', _("""Determines what separator must be used in the
|
||||
learn command. Defaults to 'as' -- learn <key> as <value>. Users might
|
||||
feel more comfortable with 'is' or something else, so it's
|
||||
configurable."""))
|
||||
configurable.""")))
|
||||
conf.registerChannelValue(Factoids, 'showFactoidIfOnlyOneMatch',
|
||||
registry.Boolean(True, """Determines whether the bot will reply with the
|
||||
registry.Boolean(True, _("""Determines whether the bot will reply with the
|
||||
single matching factoid if only one factoid matches when using the search
|
||||
command."""))
|
||||
command.""")))
|
||||
conf.registerChannelValue(Factoids, 'replyWhenInvalidCommand',
|
||||
registry.Boolean(True, """Determines whether the bot will reply to invalid
|
||||
registry.Boolean(True, _("""Determines whether the bot will reply to invalid
|
||||
commands by searching for a factoid; basically making the whatis
|
||||
unnecessary when you want all factoids for a given key."""))
|
||||
unnecessary when you want all factoids for a given key.""")))
|
||||
conf.registerChannelValue(Factoids, 'format',
|
||||
FactoidFormat('$key could be $value.', """Determines the format of
|
||||
FactoidFormat(_('$key could be $value.'), _("""Determines the format of
|
||||
the response given when a factoid's value is requested. All the standard
|
||||
substitutes apply, in addition to "$key" for the factoid's key and "$value"
|
||||
for the factoid's value."""))
|
||||
for the factoid's value.""")))
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
||||
|
221
plugins/Factoids/locale/fr.po
Normal file
221
plugins/Factoids/locale/fr.po
Normal file
@ -0,0 +1,221 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-11-11 12:37+CET\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: config.py:45
|
||||
msgid ""
|
||||
"Value must include $value, otherwise the factoid's value would be left\n"
|
||||
" out."
|
||||
msgstr "La valeur doit inclure $value, sinon la valeur de la factoid ne serait pas affichée."
|
||||
|
||||
#: config.py:51
|
||||
msgid ""
|
||||
"Determines what separator must be used in the\n"
|
||||
" learn command. Defaults to 'as' -- learn <key> as <value>. Users might\n"
|
||||
" feel more comfortable with 'is' or something else, so it's\n"
|
||||
" configurable."
|
||||
msgstr "Détermine quel séparateur est utilisé par la commande 'learn'. Par défaut, il s'agit de 'est' : 'learn <clef> as <valeur>. Les utilisateurs sont susceptibles de trouver 'is' plus confortable, ou n'importe quoi, c'est configurable."
|
||||
|
||||
#: config.py:56
|
||||
msgid ""
|
||||
"Determines whether the bot will reply with the\n"
|
||||
" single matching factoid if only one factoid matches when using the search\n"
|
||||
" command."
|
||||
msgstr "Détermine si le bot répondra avec une seule factoid, même si la recherche de l'utilisateur donne plusieurs résultats."
|
||||
|
||||
#: config.py:60
|
||||
msgid ""
|
||||
"Determines whether the bot will reply to invalid\n"
|
||||
" commands by searching for a factoid; basically making the whatis\n"
|
||||
" unnecessary when you want all factoids for a given key."
|
||||
msgstr "Détermine si le bot répondra aux commandes invalides lors de la recherche d'une factoid ; permet simplement de rendre la commande 'whatis' inutile lorsque vous voulez toutes les factoids d'un clef donnée."
|
||||
|
||||
#: config.py:64
|
||||
msgid "$key could be $value."
|
||||
msgstr "$key semble être $value."
|
||||
|
||||
#: config.py:64
|
||||
msgid ""
|
||||
"Determines the format of\n"
|
||||
" the response given when a factoid's value is requested. All the standard\n"
|
||||
" substitutes apply, in addition to \"$key\" for the factoid's key and \"$value\"\n"
|
||||
" for the factoid's value."
|
||||
msgstr "Détermine le format de la réponse donnée lorsqu'une valeur de factoid est demandée. Tous les substitus standards s'appliquent, en plus de \"$key\" pour la clef de la factoid et \"$value\" pour la valeur de la factoid."
|
||||
|
||||
#: plugin.py:153
|
||||
msgid ""
|
||||
"[<channel>] <key> %s <value>\n"
|
||||
"\n"
|
||||
" Associates <key> with <value>. <channel> is only\n"
|
||||
" necessary if the message isn't sent on the channel\n"
|
||||
" itself. The word '%s' is necessary to separate the\n"
|
||||
" key from the value. It can be changed to another word\n"
|
||||
" via the learnSeparator registry value.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <clef> %s <valeur>\n"
|
||||
"\n"
|
||||
"Associer la <clef> avec la <valeur>. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même. Le mot '%s' est nécessaire pour séparer la clef de la valeur. Il peut être modifié avec la valeur de registre learnSeparator."
|
||||
|
||||
#: plugin.py:179
|
||||
msgid "That's not a valid number for that key."
|
||||
msgstr "Ce n'est pas un nombre valide pour cette clef."
|
||||
|
||||
#: plugin.py:199
|
||||
#: plugin.py:345
|
||||
msgid "No factoid matches that key."
|
||||
msgstr "Aucune factoid ne correspond à cette clef."
|
||||
|
||||
#: plugin.py:211
|
||||
msgid ""
|
||||
"[<channel>] <key> [<number>]\n"
|
||||
"\n"
|
||||
" Looks up the value of <key> in the factoid database. If given a\n"
|
||||
" number, will return only that exact factoid. <channel> is only\n"
|
||||
" necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <clef> [<nombre>]\n"
|
||||
"\n"
|
||||
"Regarde la valeur de la <clef> dans la base de données de factoids. Si un <nombre> est donné, retourne la factoid exacte. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:222
|
||||
#: plugin.py:273
|
||||
#: plugin.py:384
|
||||
msgid "key id"
|
||||
msgstr "id de clef"
|
||||
|
||||
#: plugin.py:230
|
||||
msgid ""
|
||||
"[<channel>] <key>\n"
|
||||
"\n"
|
||||
" Locks the factoid(s) associated with <key> so that they cannot be\n"
|
||||
" removed or added to. <channel> is only necessary if the message isn't\n"
|
||||
" sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <clef>\n"
|
||||
"\n"
|
||||
"Verrouille la/les factoid(s) associé(e) à la <clef>, pour qu'elles ne puissent plus être supprimées ou modifiées. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:245
|
||||
msgid ""
|
||||
"[<channel>] <key>\n"
|
||||
"\n"
|
||||
" Unlocks the factoid(s) associated with <key> so that they can be\n"
|
||||
" removed or added to. <channel> is only necessary if the message isn't\n"
|
||||
" sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <clef>\n"
|
||||
"\n"
|
||||
"Verrouille la/les factoid(s) associé(e) à la <clef>, pour qu'elles puissent être supprimées ou modifiées. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:260
|
||||
msgid ""
|
||||
"[<channel>] <key> [<number>|*]\n"
|
||||
"\n"
|
||||
" Removes the factoid <key> from the factoids database. If there are\n"
|
||||
" more than one factoid with such a key, a number is necessary to\n"
|
||||
" determine which one should be removed. A * can be used to remove all\n"
|
||||
" factoids associated with a key. <channel> is only necessary if\n"
|
||||
" the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <clef> [<nombre>|*]\n"
|
||||
"\n"
|
||||
"Enlève la factoid <clef> de la base de données. Si il y a plus d'une factoid avec cette clef, un <nombre> est requis pour déterminer laquelle sera supprimée. Un joker * peut être utilisé pour enlever toutes les factoids avec cette clef. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:285
|
||||
msgid "There is no such factoid."
|
||||
msgstr "Cette factoid n'existe pas."
|
||||
|
||||
#: plugin.py:298
|
||||
msgid "Invalid factoid number."
|
||||
msgstr "Numéro de factoid invalide."
|
||||
|
||||
#: plugin.py:304
|
||||
msgid "%s factoids have that key. Please specify which one to remove, or use * to designate all of them."
|
||||
msgstr "%s factoids ont cette clef. Veuillez spécifier laquelle vous voulez supprimer ou utiliser * pour toutes les désigner."
|
||||
|
||||
#: plugin.py:312
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" Returns a random factoid from the database for <channel>. <channel>\n"
|
||||
" is only necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>]\n"
|
||||
"\n"
|
||||
"Retourne une factoid aléatoire de la base de données pour le canal. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:330
|
||||
msgid "I couldn't find a factoid."
|
||||
msgstr "Je ne peux trouver une factoid"
|
||||
|
||||
#: plugin.py:335
|
||||
msgid ""
|
||||
"[<channel>] <key>\n"
|
||||
"\n"
|
||||
" Gives information about the factoid(s) associated with <key>.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the channel\n"
|
||||
" itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <clef>\n"
|
||||
"\n"
|
||||
"Donne des informations sur la/les factoid(s) associée(s) à la <clef>. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:358
|
||||
msgid "#%i was added by %s at %s"
|
||||
msgstr "#%i a été ajouté par %s le %s"
|
||||
|
||||
#: plugin.py:369
|
||||
msgid ""
|
||||
"[<channel>] <key> <number> <regexp>\n"
|
||||
"\n"
|
||||
" Changes the factoid #<number> associated with <key> according to\n"
|
||||
" <regexp>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <clef> <nombre> <expression régulière>\n"
|
||||
"\n"
|
||||
"Change la factoid <nombre> associée à la <clef>, en accord avec l'<expression régulière>. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:381
|
||||
msgid "I couldn't find any key %q"
|
||||
msgstr "Je ne peux trouver de clef %q"
|
||||
|
||||
#: plugin.py:396
|
||||
msgid ""
|
||||
"[<channel>] [--values] [--{regexp} <value>] [<glob> ...]\n"
|
||||
"\n"
|
||||
" Searches the keyspace for keys matching <glob>. If --regexp is given,\n"
|
||||
" it associated value is taken as a regexp and matched against the keys.\n"
|
||||
" If --values is given, search the value space instead of the keyspace.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [--values] [--{regexp} <expression régulière>] [<glob>...]\n"
|
||||
"\n"
|
||||
"Recherche les clefs correspondant au <glob>. Si --regexp est donné, recherche les clefs correspondantes à l'<expression régulière>. Si --values est donné, recherche parmi les valeurs, plutôt que parmi les clefs. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:431
|
||||
msgid "No keys matched that query."
|
||||
msgstr "Aucune clef ne correspond à cette requête."
|
||||
|
||||
#: plugin.py:436
|
||||
msgid "More than 100 keys matched that query; please narrow your query."
|
||||
msgstr "Plus de 100 clefs correspondent à votre requête ; veuillez la préciser."
|
||||
|
202
plugins/Factoids/messages.pot
Normal file
202
plugins/Factoids/messages.pot
Normal file
@ -0,0 +1,202 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-11-11 12:37+CET\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: config.py:45
|
||||
#, docstring
|
||||
msgid ""
|
||||
"Value must include $value, otherwise the factoid's value would be left\n"
|
||||
" out."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:51
|
||||
msgid ""
|
||||
"Determines what separator must be used in the\n"
|
||||
" learn command. Defaults to 'as' -- learn <key> as <value>. Users might\n"
|
||||
" feel more comfortable with 'is' or something else, so it's\n"
|
||||
" configurable."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:56
|
||||
msgid ""
|
||||
"Determines whether the bot will reply with the\n"
|
||||
" single matching factoid if only one factoid matches when using the search\n"
|
||||
" command."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:60
|
||||
msgid ""
|
||||
"Determines whether the bot will reply to invalid\n"
|
||||
" commands by searching for a factoid; basically making the whatis\n"
|
||||
" unnecessary when you want all factoids for a given key."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:64
|
||||
msgid "$key could be $value."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:64
|
||||
msgid ""
|
||||
"Determines the format of\n"
|
||||
" the response given when a factoid's value is requested. All the standard\n"
|
||||
" substitutes apply, in addition to \"$key\" for the factoid's key and \"$value\"\n"
|
||||
" for the factoid's value."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:153
|
||||
msgid ""
|
||||
"[<channel>] <key> %s <value>\n"
|
||||
"\n"
|
||||
" Associates <key> with <value>. <channel> is only\n"
|
||||
" necessary if the message isn't sent on the channel\n"
|
||||
" itself. The word '%s' is necessary to separate the\n"
|
||||
" key from the value. It can be changed to another word\n"
|
||||
" via the learnSeparator registry value.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:179
|
||||
msgid "That's not a valid number for that key."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:199 plugin.py:345
|
||||
msgid "No factoid matches that key."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:211
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <key> [<number>]\n"
|
||||
"\n"
|
||||
" Looks up the value of <key> in the factoid database. If given a\n"
|
||||
" number, will return only that exact factoid. <channel> is only\n"
|
||||
" necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:222 plugin.py:273 plugin.py:384
|
||||
msgid "key id"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:230
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <key>\n"
|
||||
"\n"
|
||||
" Locks the factoid(s) associated with <key> so that they cannot be\n"
|
||||
" removed or added to. <channel> is only necessary if the message isn't\n"
|
||||
" sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:245
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <key>\n"
|
||||
"\n"
|
||||
" Unlocks the factoid(s) associated with <key> so that they can be\n"
|
||||
" removed or added to. <channel> is only necessary if the message isn't\n"
|
||||
" sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:260
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <key> [<number>|*]\n"
|
||||
"\n"
|
||||
" Removes the factoid <key> from the factoids database. If there are\n"
|
||||
" more than one factoid with such a key, a number is necessary to\n"
|
||||
" determine which one should be removed. A * can be used to remove all\n"
|
||||
" factoids associated with a key. <channel> is only necessary if\n"
|
||||
" the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:285
|
||||
msgid "There is no such factoid."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:298
|
||||
msgid "Invalid factoid number."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:304
|
||||
msgid "%s factoids have that key. Please specify which one to remove, or use * to designate all of them."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:312
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" Returns a random factoid from the database for <channel>. <channel>\n"
|
||||
" is only necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:330
|
||||
msgid "I couldn't find a factoid."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:335
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <key>\n"
|
||||
"\n"
|
||||
" Gives information about the factoid(s) associated with <key>.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the channel\n"
|
||||
" itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:358
|
||||
msgid "#%i was added by %s at %s"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:369
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <key> <number> <regexp>\n"
|
||||
"\n"
|
||||
" Changes the factoid #<number> associated with <key> according to\n"
|
||||
" <regexp>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:381
|
||||
msgid "I couldn't find any key %q"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:396
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [--values] [--{regexp} <value>] [<glob> ...]\n"
|
||||
"\n"
|
||||
" Searches the keyspace for keys matching <glob>. If --regexp is given,\n"
|
||||
" it associated value is taken as a regexp and matched against the keys.\n"
|
||||
" If --values is given, search the value space instead of the keyspace.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:431
|
||||
msgid "No keys matched that query."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:436
|
||||
msgid "More than 100 keys matched that query; please narrow your query."
|
||||
msgstr ""
|
||||
|
@ -39,6 +39,8 @@ from supybot.commands import *
|
||||
import supybot.plugins as plugins
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Factoids')
|
||||
|
||||
try:
|
||||
import sqlite
|
||||
@ -148,14 +150,14 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
else:
|
||||
irc.error('That factoid is locked.')
|
||||
learn = wrap(learn, ['factoid'])
|
||||
learn._fake__doc__ = """[<channel>] <key> %s <value>
|
||||
learn._fake__doc__ = _("""[<channel>] <key> %s <value>
|
||||
|
||||
Associates <key> with <value>. <channel> is only
|
||||
necessary if the message isn't sent on the channel
|
||||
itself. The word '%s' is necessary to separate the
|
||||
key from the value. It can be changed to another word
|
||||
via the learnSeparator registry value.
|
||||
"""
|
||||
""")
|
||||
|
||||
|
||||
def _lookupFactoid(self, channel, key):
|
||||
@ -174,7 +176,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
try:
|
||||
irc.reply(factoids[number-1])
|
||||
except IndexError:
|
||||
irc.error('That\'s not a valid number for that key.')
|
||||
irc.error(_('That\'s not a valid number for that key.'))
|
||||
return
|
||||
else:
|
||||
env = {'key': key}
|
||||
@ -194,7 +196,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
irc.replies(factoidsS, prefixer=prefixer,
|
||||
joiner=', or ', onlyPrefixFirst=True)
|
||||
elif error:
|
||||
irc.error('No factoid matches that key.')
|
||||
irc.error(_('No factoid matches that key.'))
|
||||
|
||||
def invalidCommand(self, irc, msg, tokens):
|
||||
if irc.isChannel(msg.args[0]):
|
||||
@ -204,6 +206,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
factoids = self._lookupFactoid(channel, key)
|
||||
self._replyFactoids(irc, msg, key, factoids, error=False)
|
||||
|
||||
@internationalizeDocstring
|
||||
def whatis(self, irc, msg, args, channel, words):
|
||||
"""[<channel>] <key> [<number>]
|
||||
|
||||
@ -216,12 +219,13 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
if words[-1].isdigit():
|
||||
number = int(words.pop())
|
||||
if number <= 0:
|
||||
irc.errorInvalid('key id')
|
||||
irc.errorInvalid(_('key id'))
|
||||
key = ' '.join(words)
|
||||
factoids = self._lookupFactoid(channel, key)
|
||||
self._replyFactoids(irc, msg, key, factoids, number)
|
||||
whatis = wrap(whatis, ['channel', many('something')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def lock(self, irc, msg, args, channel, key):
|
||||
"""[<channel>] <key>
|
||||
|
||||
@ -236,6 +240,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
irc.replySuccess()
|
||||
lock = wrap(lock, ['channel', 'text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def unlock(self, irc, msg, args, channel, key):
|
||||
"""[<channel>] <key>
|
||||
|
||||
@ -250,6 +255,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
irc.replySuccess()
|
||||
unlock = wrap(unlock, ['channel', 'text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def forget(self, irc, msg, args, channel, words):
|
||||
"""[<channel>] <key> [<number>|*]
|
||||
|
||||
@ -264,7 +270,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
if words[-1].isdigit():
|
||||
number = int(words.pop())
|
||||
if number <= 0:
|
||||
irc.errorInvalid('key id')
|
||||
irc.errorInvalid(_('key id'))
|
||||
elif words[-1] == '*':
|
||||
words.pop()
|
||||
number = True
|
||||
@ -276,9 +282,9 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
WHERE key LIKE %s AND
|
||||
factoids.key_id=keys.id""", key)
|
||||
if cursor.rowcount == 0:
|
||||
irc.error('There is no such factoid.')
|
||||
irc.error(_('There is no such factoid.'))
|
||||
elif cursor.rowcount == 1 or number is True:
|
||||
(id, _) = cursor.fetchone()
|
||||
(id, foo) = cursor.fetchone()
|
||||
cursor.execute("""DELETE FROM factoids WHERE key_id=%s""", id)
|
||||
cursor.execute("""DELETE FROM keys WHERE key LIKE %s""", key)
|
||||
db.commit()
|
||||
@ -287,20 +293,21 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
if number is not None:
|
||||
results = cursor.fetchall()
|
||||
try:
|
||||
(_, id) = results[number-1]
|
||||
(foo, id) = results[number-1]
|
||||
except IndexError:
|
||||
irc.error('Invalid factoid number.')
|
||||
irc.error(_('Invalid factoid number.'))
|
||||
return
|
||||
cursor.execute("DELETE FROM factoids WHERE id=%s", id)
|
||||
db.commit()
|
||||
irc.replySuccess()
|
||||
else:
|
||||
irc.error('%s factoids have that key. '
|
||||
irc.error(_('%s factoids have that key. '
|
||||
'Please specify which one to remove, '
|
||||
'or use * to designate all of them.' %
|
||||
'or use * to designate all of them.') %
|
||||
cursor.rowcount)
|
||||
forget = wrap(forget, ['channel', many('something')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def random(self, irc, msg, args, channel):
|
||||
"""[<channel>]
|
||||
|
||||
@ -320,9 +327,10 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
L.append('"%s": %s' % (ircutils.bold(key), factoid))
|
||||
irc.reply('; '.join(L))
|
||||
else:
|
||||
irc.error('I couldn\'t find a factoid.')
|
||||
irc.error(_('I couldn\'t find a factoid.'))
|
||||
random = wrap(random, ['channel'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def info(self, irc, msg, args, channel, key):
|
||||
"""[<channel>] <key>
|
||||
|
||||
@ -334,7 +342,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
cursor = db.cursor()
|
||||
cursor.execute("SELECT id, locked FROM keys WHERE key LIKE %s", key)
|
||||
if cursor.rowcount == 0:
|
||||
irc.error('No factoid matches that key.')
|
||||
irc.error(_('No factoid matches that key.'))
|
||||
return
|
||||
(id, locked) = map(int, cursor.fetchone())
|
||||
cursor.execute("""SELECT added_by, added_at FROM factoids
|
||||
@ -347,7 +355,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
counter += 1
|
||||
added_at = time.strftime(conf.supybot.reply.format.time(),
|
||||
time.localtime(int(added_at)))
|
||||
L.append(format('#%i was added by %s at %s',
|
||||
L.append(format(_('#%i was added by %s at %s'),
|
||||
counter, added_by, added_at))
|
||||
factoids = '; '.join(L)
|
||||
s = format('Key %q is %s and has %n associated with it: %s',
|
||||
@ -356,6 +364,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
irc.reply(s)
|
||||
info = wrap(info, ['channel', 'text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def change(self, irc, msg, args, channel, key, number, replacer):
|
||||
"""[<channel>] <key> <number> <regexp>
|
||||
|
||||
@ -369,10 +378,10 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
WHERE keys.key LIKE %s AND
|
||||
keys.id=factoids.key_id""", key)
|
||||
if cursor.rowcount == 0:
|
||||
irc.error(format('I couldn\'t find any key %q', key))
|
||||
irc.error(format(_('I couldn\'t find any key %q'), key))
|
||||
return
|
||||
elif cursor.rowcount < number:
|
||||
irc.errorInvalid('key id')
|
||||
irc.errorInvalid(_('key id'))
|
||||
(id, fact) = cursor.fetchall()[number-1]
|
||||
newfact = replacer(fact)
|
||||
cursor.execute("UPDATE factoids SET fact=%s WHERE id=%s", newfact, id)
|
||||
@ -382,6 +391,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
'factoidId', 'regexpReplacer'])
|
||||
|
||||
_sqlTrans = string.maketrans('*?', '%_')
|
||||
@internationalizeDocstring
|
||||
def search(self, irc, msg, args, channel, optlist, globs):
|
||||
"""[<channel>] [--values] [--{regexp} <value>] [<glob> ...]
|
||||
|
||||
@ -418,13 +428,13 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler):
|
||||
sql = sql.replace('TARGET', target)
|
||||
cursor.execute(sql, formats)
|
||||
if cursor.rowcount == 0:
|
||||
irc.reply('No keys matched that query.')
|
||||
irc.reply(_('No keys matched that query.'))
|
||||
elif cursor.rowcount == 1 and \
|
||||
self.registryValue('showFactoidIfOnlyOneMatch', channel):
|
||||
self.whatis(irc, msg, [channel, cursor.fetchone()[0]])
|
||||
elif cursor.rowcount > 100:
|
||||
irc.reply('More than 100 keys matched that query; '
|
||||
'please narrow your query.')
|
||||
irc.reply(_('More than 100 keys matched that query; '
|
||||
'please narrow your query.'))
|
||||
else:
|
||||
keys = [repr(t[0]) for t in cursor.fetchall()]
|
||||
s = format('%L', keys)
|
||||
|
@ -29,22 +29,24 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Filter')
|
||||
|
||||
Filter = conf.registerPlugin('Filter')
|
||||
conf.registerGroup(Filter, 'spellit')
|
||||
conf.registerGlobalValue(Filter.spellit,
|
||||
'replaceLetters', registry.Boolean(True, """Determines whether or not to
|
||||
replace letters in the output of spellit."""))
|
||||
'replaceLetters', registry.Boolean(True, _("""Determines whether or not to
|
||||
replace letters in the output of spellit.""")))
|
||||
conf.registerGlobalValue(Filter.spellit,
|
||||
'replacePunctuation', registry.Boolean(True, """Determines whether or not
|
||||
to replace punctuation in the output of spellit."""))
|
||||
'replacePunctuation', registry.Boolean(True, _("""Determines whether or not
|
||||
to replace punctuation in the output of spellit.""")))
|
||||
conf.registerGlobalValue(Filter.spellit,
|
||||
'replaceNumbers', registry.Boolean(True, """Determines whether or not to
|
||||
replace numbers in the output of spellit."""))
|
||||
'replaceNumbers', registry.Boolean(True, _("""Determines whether or not to
|
||||
replace numbers in the output of spellit.""")))
|
||||
conf.registerGroup(Filter, 'shrink')
|
||||
conf.registerChannelValue(Filter.shrink, 'minimum',
|
||||
registry.PositiveInteger(4, """Determines the minimum number of a letters
|
||||
in a word before it will be shrunken by the shrink command/filter."""))
|
||||
registry.PositiveInteger(4, _("""Determines the minimum number of a letters
|
||||
in a word before it will be shrunken by the shrink command/filter.""")))
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
|
615
plugins/Filter/locale/fr.po
Normal file
615
plugins/Filter/locale/fr.po
Normal file
@ -0,0 +1,615 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-17 11:48+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: config.py:38
|
||||
msgid ""
|
||||
"Determines whether or not to\n"
|
||||
" replace letters in the output of spellit."
|
||||
msgstr "Détermine si il faut ou non remplacer les lettres dans la sortie de spellit."
|
||||
|
||||
#: config.py:41
|
||||
msgid ""
|
||||
"Determines whether or not\n"
|
||||
" to replace punctuation in the output of spellit."
|
||||
msgstr "Détermine si il faut replacer la ponctuation dans la sortie de spellit."
|
||||
|
||||
#: config.py:44
|
||||
msgid ""
|
||||
"Determines whether or not to\n"
|
||||
" replace numbers in the output of spellit."
|
||||
msgstr "Détermine si on doit remplacer les nombres dans la sortie de spellit."
|
||||
|
||||
#: config.py:48
|
||||
msgid ""
|
||||
"Determines the minimum number of a letters\n"
|
||||
" in a word before it will be shrunken by the shrink command/filter."
|
||||
msgstr "Détermine le nombre minimum de lettre dans un mot pour qu'il soit coupé par la commande/le filtre shrink."
|
||||
|
||||
#: plugin.py:51
|
||||
msgid ""
|
||||
"This plugin offers several commands which transform text in some way.\n"
|
||||
" It also provides the capability of using such commands to 'filter' the\n"
|
||||
" output of the bot -- for instance, you could make everything the bot says\n"
|
||||
" be in leetspeak, or Morse code, or any number of other kinds of filters.\n"
|
||||
" Not very useful, but definitely quite fun :)"
|
||||
msgstr "Ce plugin offre quelques commandes qui peuvent être utilisées pour transformer du texte de différentes façons. Il fourni également la possiblité d'utiliser ces commandes pour 'filtrer' la sortie du bot ; par exemple, vous pouvez faire en sorte que tout ce que le bot dit le soit en l33tsp34k, en Morse, ou n'importe lequel des autres filtres. Pas très utile, mais plutôt fun :)"
|
||||
|
||||
#: plugin.py:85
|
||||
msgid ""
|
||||
"[<channel>] [<command>]\n"
|
||||
"\n"
|
||||
" Sets the outFilter of this plugin to be <command>. If no command is\n"
|
||||
" given, unsets the outFilter. <channel> is only necessary if the\n"
|
||||
" message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<commande>]\n"
|
||||
"\n"
|
||||
"Définit le filtre de sortie de ce plugin pour être <commande>. Si aucune commande n'est définie, supprime le filtre de sortie. <canal> n'est nécessaire que si la commande n'est pas envoyée sur le canal lui-même."
|
||||
|
||||
#: plugin.py:98
|
||||
msgid "That's not a valid filter command."
|
||||
msgstr "Ce n'est pas une commande de filtre valide"
|
||||
|
||||
#: plugin.py:108
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Removes all the vowels from <text>. (If you're curious why this is\n"
|
||||
" named 'hebrew' it's because I (jemfinch) thought of it in Hebrew class,\n"
|
||||
" and printed Hebrew often elides the vowels.)\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retire toutes les voyelles du <texte> (si vous êtes curieux de pourquoi elle s'appelle 'hebrew', c'est parce que je (jemfinch) pense que que en Hébreux, il manque souvent les voyelles)."
|
||||
|
||||
#: plugin.py:120
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Removes all the spaces from <text>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Supprime tous les espaces du <texte>."
|
||||
|
||||
#: plugin.py:130
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text>, with all consecutive duplicated letters removed.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Renvoie le texte, avec toutes les lettres consécutives dupliquées supprimées."
|
||||
|
||||
#: plugin.py:143
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns the binary representation of <text>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne la représentation binaire du <texte>."
|
||||
|
||||
#: plugin.py:169
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns a hexstring from the given string; a hexstring is a string\n"
|
||||
" composed of the hexadecimal value of each character in the string\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne une chaîne héxadécimale à partir de la chaîne donnée ; une chaîne héxadécimale est une chaîne composée de la valeur héxadécimale de chaque caractère de la chaîne."
|
||||
|
||||
#: plugin.py:179
|
||||
msgid ""
|
||||
"<hexstring>\n"
|
||||
"\n"
|
||||
" Returns the string corresponding to <hexstring>. Obviously,\n"
|
||||
" <hexstring> must be a string of hexadecimal digits.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<chaîne hexadécimale>\n"
|
||||
"\n"
|
||||
"Retourne la chaîne correspondant à la <chaîne hexadécimale>. Bien sûr, <chaîne hexadécimale> ne doit contenir que des caractères hexadécimaux."
|
||||
|
||||
#: plugin.py:187
|
||||
msgid "Invalid input."
|
||||
msgstr "Entrée invalide."
|
||||
|
||||
#: plugin.py:192
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Rotates <text> 13 characters to the right in the alphabet. Rot13 is\n"
|
||||
" commonly used for text that simply needs to be hidden from inadvertent\n"
|
||||
" reading by roaming eyes, since it's easily reversible.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Déplace chaque caractère du <texte> de 13 places vers la droite de l'alphabet. Rot13 est courremment utilisé pour les textes qui doivent être cachés des yeux indiscrets, mais être facilement reversible."
|
||||
|
||||
#: plugin.py:203
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns the lisping version of <text>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne la version zézéyée du texte."
|
||||
|
||||
#: plugin.py:234
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns the l33tspeak version of <text>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne la version l33t du <texte>."
|
||||
|
||||
#: plugin.py:254
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Replies with an especially k-rad translation of <text>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Répond avec une traduction k-rad du <texte>."
|
||||
|
||||
#: plugin.py:270
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Replies with a string where each word is scrambled; i.e., each internal\n"
|
||||
" letter (that is, all letters but the first and last) are shuffled.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Répond avec une chaîne où chaque mot est mélangé ; c'est à dire que chaque lettre interne (=toute lettre qui n'est pas la première ni la dernière) est mélangée avec les autres."
|
||||
|
||||
#: plugin.py:335
|
||||
msgid ""
|
||||
"<Morse code text>\n"
|
||||
"\n"
|
||||
" Does the reverse of the morse command.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte en Morse>\n"
|
||||
"\n"
|
||||
"Fait l'inverse de la commande morse."
|
||||
|
||||
#: plugin.py:352
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Gives the Morse code equivalent of a given string.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Donne le code Morse équivalent à la chaîne donnée."
|
||||
|
||||
#: plugin.py:364
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Reverses <text>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Inverse le <texte>."
|
||||
|
||||
#: plugin.py:381
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> with each character randomly colorized.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le <texte> avec chaque caractère coloré de façon aléatoire."
|
||||
|
||||
#: plugin.py:391
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> colorized like a rainbow.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le texte colorisé comme un arc-en-ciel."
|
||||
|
||||
#: plugin.py:402
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> stripped of all color codes.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le texte en retirant tous les codes de couleur"
|
||||
|
||||
#: plugin.py:411
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> as if an AOLuser had said it.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le <texte> comme si un AOLuser l'avait dit."
|
||||
|
||||
#: plugin.py:438
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> as if JeffK had said it himself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le <texte> comme si JeffK l'avait dit lui-même."
|
||||
|
||||
#: plugin.py:534
|
||||
msgid "ay"
|
||||
msgstr "ah"
|
||||
|
||||
#: plugin.py:534
|
||||
msgid "bee"
|
||||
msgstr "bé"
|
||||
|
||||
#: plugin.py:534
|
||||
msgid "dee"
|
||||
msgstr "dé"
|
||||
|
||||
#: plugin.py:534
|
||||
msgid "see"
|
||||
msgstr "cé"
|
||||
|
||||
#: plugin.py:535
|
||||
msgid "aych"
|
||||
msgstr "ache"
|
||||
|
||||
#: plugin.py:535
|
||||
msgid "ee"
|
||||
msgstr "euh"
|
||||
|
||||
#: plugin.py:535
|
||||
msgid "eff"
|
||||
msgstr "èf"
|
||||
|
||||
#: plugin.py:535
|
||||
msgid "gee"
|
||||
msgstr "gé"
|
||||
|
||||
#: plugin.py:536
|
||||
msgid "ell"
|
||||
msgstr "èl"
|
||||
|
||||
#: plugin.py:536
|
||||
msgid "eye"
|
||||
msgstr "ih"
|
||||
|
||||
#: plugin.py:536
|
||||
msgid "jay"
|
||||
msgstr "ji"
|
||||
|
||||
#: plugin.py:536
|
||||
msgid "kay"
|
||||
msgstr "ka"
|
||||
|
||||
#: plugin.py:537
|
||||
msgid "cue"
|
||||
msgstr "cu"
|
||||
|
||||
#: plugin.py:537
|
||||
msgid "em"
|
||||
msgstr "èm"
|
||||
|
||||
#: plugin.py:537
|
||||
msgid "en"
|
||||
msgstr "èn"
|
||||
|
||||
#: plugin.py:537
|
||||
msgid "oh"
|
||||
msgstr "oh"
|
||||
|
||||
#: plugin.py:537
|
||||
msgid "pee"
|
||||
msgstr "pé"
|
||||
|
||||
#: plugin.py:538
|
||||
msgid "arr"
|
||||
msgstr "ère"
|
||||
|
||||
#: plugin.py:538
|
||||
msgid "ess"
|
||||
msgstr "èce"
|
||||
|
||||
#: plugin.py:538
|
||||
msgid "tee"
|
||||
msgstr "té"
|
||||
|
||||
#: plugin.py:538
|
||||
msgid "you"
|
||||
msgstr "uh"
|
||||
|
||||
#: plugin.py:539
|
||||
msgid "double-you"
|
||||
msgstr "double-vé"
|
||||
|
||||
#: plugin.py:539
|
||||
msgid "ecks"
|
||||
msgstr "icks"
|
||||
|
||||
#: plugin.py:539
|
||||
msgid "vee"
|
||||
msgstr "vé"
|
||||
|
||||
#: plugin.py:539
|
||||
msgid "why"
|
||||
msgstr "i-grec"
|
||||
|
||||
#: plugin.py:540
|
||||
msgid "zee"
|
||||
msgstr "zèd"
|
||||
|
||||
#: plugin.py:545
|
||||
msgid "exclamation point"
|
||||
msgstr "point d'exclamation"
|
||||
|
||||
#: plugin.py:546
|
||||
msgid "quote"
|
||||
msgstr "guillemet double"
|
||||
|
||||
#: plugin.py:547
|
||||
msgid "pound"
|
||||
msgstr "livre"
|
||||
|
||||
#: plugin.py:548
|
||||
msgid "dollar sign"
|
||||
msgstr "signe du dollar"
|
||||
|
||||
#: plugin.py:549
|
||||
msgid "percent"
|
||||
msgstr "pourcent"
|
||||
|
||||
#: plugin.py:550
|
||||
msgid "ampersand"
|
||||
msgstr "espèrluette"
|
||||
|
||||
#: plugin.py:551
|
||||
msgid "single quote"
|
||||
msgstr "guillemet"
|
||||
|
||||
#: plugin.py:552
|
||||
msgid "left paren"
|
||||
msgstr "parenthèse ouvrante"
|
||||
|
||||
#: plugin.py:553
|
||||
msgid "right paren"
|
||||
msgstr "parenthèse fermante"
|
||||
|
||||
#: plugin.py:554
|
||||
msgid "asterisk"
|
||||
msgstr "asterisque"
|
||||
|
||||
#: plugin.py:555
|
||||
msgid "plus"
|
||||
msgstr "plus"
|
||||
|
||||
#: plugin.py:556
|
||||
msgid "comma"
|
||||
msgstr "virgule"
|
||||
|
||||
#: plugin.py:557
|
||||
msgid "minus"
|
||||
msgstr "moins"
|
||||
|
||||
#: plugin.py:558
|
||||
msgid "period"
|
||||
msgstr "point"
|
||||
|
||||
#: plugin.py:559
|
||||
msgid "slash"
|
||||
msgstr "slash"
|
||||
|
||||
#: plugin.py:560
|
||||
msgid "colon"
|
||||
msgstr "double-point"
|
||||
|
||||
#: plugin.py:561
|
||||
msgid "semicolon"
|
||||
msgstr "point-virgule"
|
||||
|
||||
#: plugin.py:562
|
||||
msgid "less than"
|
||||
msgstr "inférieur"
|
||||
|
||||
#: plugin.py:563
|
||||
msgid "equals"
|
||||
msgstr "moins que"
|
||||
|
||||
#: plugin.py:564
|
||||
msgid "greater than"
|
||||
msgstr "supérieur"
|
||||
|
||||
#: plugin.py:565
|
||||
msgid "question mark"
|
||||
msgstr "point d'exclamation"
|
||||
|
||||
#: plugin.py:566
|
||||
msgid "at"
|
||||
msgstr "arobase"
|
||||
|
||||
#: plugin.py:567
|
||||
msgid "left bracket"
|
||||
msgstr "crochet ouvrant"
|
||||
|
||||
#: plugin.py:568
|
||||
msgid "backslash"
|
||||
msgstr "anti-slash"
|
||||
|
||||
#: plugin.py:569
|
||||
msgid "right bracket"
|
||||
msgstr "crochet fermant"
|
||||
|
||||
#: plugin.py:570
|
||||
msgid "caret"
|
||||
msgstr "accent circonflexe"
|
||||
|
||||
#: plugin.py:571
|
||||
msgid "underscore"
|
||||
msgstr "underscore"
|
||||
|
||||
#: plugin.py:572
|
||||
msgid "backtick"
|
||||
msgstr "accent grave"
|
||||
|
||||
#: plugin.py:573
|
||||
msgid "left brace"
|
||||
msgstr "crochet ouvrant"
|
||||
|
||||
#: plugin.py:574
|
||||
msgid "pipe"
|
||||
msgstr "pipe"
|
||||
|
||||
#: plugin.py:575
|
||||
msgid "right brace"
|
||||
msgstr "crochet fermant"
|
||||
|
||||
#: plugin.py:576
|
||||
msgid "tilde"
|
||||
msgstr "tilde"
|
||||
|
||||
#: plugin.py:579
|
||||
msgid "one"
|
||||
msgstr "un"
|
||||
|
||||
#: plugin.py:579
|
||||
msgid "three"
|
||||
msgstr "trois"
|
||||
|
||||
#: plugin.py:579
|
||||
msgid "two"
|
||||
msgstr "deux"
|
||||
|
||||
#: plugin.py:579
|
||||
msgid "zero"
|
||||
msgstr "zéro"
|
||||
|
||||
#: plugin.py:580
|
||||
msgid "five"
|
||||
msgstr "cinq"
|
||||
|
||||
#: plugin.py:580
|
||||
msgid "four"
|
||||
msgstr "quatre"
|
||||
|
||||
#: plugin.py:580
|
||||
msgid "seven"
|
||||
msgstr "sept"
|
||||
|
||||
#: plugin.py:580
|
||||
msgid "six"
|
||||
msgstr "six"
|
||||
|
||||
#: plugin.py:581
|
||||
msgid "eight"
|
||||
msgstr "huit"
|
||||
|
||||
#: plugin.py:581
|
||||
msgid "nine"
|
||||
msgstr "neuf"
|
||||
|
||||
#: plugin.py:585
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text>, phonetically spelled out.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le <texte>, épellé phonétiquement"
|
||||
|
||||
#: plugin.py:615
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> as GNU/RMS would say it.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le <texte> comme si GNU/RMS l'avait dite."
|
||||
|
||||
#: plugin.py:624
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> with each word longer than\n"
|
||||
" supybot.plugins.Filter.shrink.minimum being shrunken (i.e., like\n"
|
||||
" \"internationalization\" becomes \"i18n\").\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le texte avec chaque mot plus long que supybot.plugins.Filter.shrink.minimum découpé (par exemple, \"internationalization\" devient i18n)"
|
||||
|
||||
#: plugin.py:643
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> with the l's made into r's and r's made into l's.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le <texte> avec les I transormés en r et les r transformés en I."
|
||||
|
||||
#: plugin.py:692
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> rotated 180 degrees. Only really works for ASCII\n"
|
||||
" printable characters.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le <texte> tourné à 180 degrés. Ne marche pour de bon qu'avec des caractères ASCII imprimables"
|
||||
|
568
plugins/Filter/messages.pot
Normal file
568
plugins/Filter/messages.pot
Normal file
@ -0,0 +1,568 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-17 11:48+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: config.py:38
|
||||
msgid ""
|
||||
"Determines whether or not to\n"
|
||||
" replace letters in the output of spellit."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:41
|
||||
msgid ""
|
||||
"Determines whether or not\n"
|
||||
" to replace punctuation in the output of spellit."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:44
|
||||
msgid ""
|
||||
"Determines whether or not to\n"
|
||||
" replace numbers in the output of spellit."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:48
|
||||
msgid ""
|
||||
"Determines the minimum number of a letters\n"
|
||||
" in a word before it will be shrunken by the shrink command/filter."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:51
|
||||
#, docstring
|
||||
msgid ""
|
||||
"This plugin offers several commands which transform text in some way.\n"
|
||||
" It also provides the capability of using such commands to 'filter' the\n"
|
||||
" output of the bot -- for instance, you could make everything the bot says\n"
|
||||
" be in leetspeak, or Morse code, or any number of other kinds of filters.\n"
|
||||
" Not very useful, but definitely quite fun :)"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:85
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<command>]\n"
|
||||
"\n"
|
||||
" Sets the outFilter of this plugin to be <command>. If no command is\n"
|
||||
" given, unsets the outFilter. <channel> is only necessary if the\n"
|
||||
" message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:98
|
||||
msgid "That's not a valid filter command."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:108
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Removes all the vowels from <text>. (If you're curious why this is\n"
|
||||
" named 'hebrew' it's because I (jemfinch) thought of it in Hebrew class,\n"
|
||||
" and printed Hebrew often elides the vowels.)\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:120
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Removes all the spaces from <text>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:130
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text>, with all consecutive duplicated letters removed.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:143
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns the binary representation of <text>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:169
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns a hexstring from the given string; a hexstring is a string\n"
|
||||
" composed of the hexadecimal value of each character in the string\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:179
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<hexstring>\n"
|
||||
"\n"
|
||||
" Returns the string corresponding to <hexstring>. Obviously,\n"
|
||||
" <hexstring> must be a string of hexadecimal digits.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:187
|
||||
msgid "Invalid input."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:192
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Rotates <text> 13 characters to the right in the alphabet. Rot13 is\n"
|
||||
" commonly used for text that simply needs to be hidden from inadvertent\n"
|
||||
" reading by roaming eyes, since it's easily reversible.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:203
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns the lisping version of <text>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:234
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns the l33tspeak version of <text>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:254
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Replies with an especially k-rad translation of <text>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:270
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Replies with a string where each word is scrambled; i.e., each internal\n"
|
||||
" letter (that is, all letters but the first and last) are shuffled.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:335
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<Morse code text>\n"
|
||||
"\n"
|
||||
" Does the reverse of the morse command.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:352
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Gives the Morse code equivalent of a given string.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:364
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Reverses <text>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:381
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> with each character randomly colorized.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:391
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> colorized like a rainbow.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:402
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> stripped of all color codes.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:411
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> as if an AOLuser had said it.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:438
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> as if JeffK had said it himself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:534
|
||||
msgid "ay"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:534
|
||||
msgid "bee"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:534
|
||||
msgid "dee"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:534
|
||||
msgid "see"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:535
|
||||
msgid "aych"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:535
|
||||
msgid "ee"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:535
|
||||
msgid "eff"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:535
|
||||
msgid "gee"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:536
|
||||
msgid "ell"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:536
|
||||
msgid "eye"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:536
|
||||
msgid "jay"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:536
|
||||
msgid "kay"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:537
|
||||
msgid "cue"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:537
|
||||
msgid "em"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:537
|
||||
msgid "en"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:537
|
||||
msgid "oh"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:537
|
||||
msgid "pee"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:538
|
||||
msgid "arr"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:538
|
||||
msgid "ess"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:538
|
||||
msgid "tee"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:538
|
||||
msgid "you"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:539
|
||||
msgid "double-you"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:539
|
||||
msgid "ecks"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:539
|
||||
msgid "vee"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:539
|
||||
msgid "why"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:540
|
||||
msgid "zee"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:545
|
||||
msgid "exclamation point"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:546
|
||||
msgid "quote"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:547
|
||||
msgid "pound"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:548
|
||||
msgid "dollar sign"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:549
|
||||
msgid "percent"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:550
|
||||
msgid "ampersand"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:551
|
||||
msgid "single quote"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:552
|
||||
msgid "left paren"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:553
|
||||
msgid "right paren"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:554
|
||||
msgid "asterisk"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:555
|
||||
msgid "plus"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:556
|
||||
msgid "comma"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:557
|
||||
msgid "minus"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:558
|
||||
msgid "period"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:559
|
||||
msgid "slash"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:560
|
||||
msgid "colon"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:561
|
||||
msgid "semicolon"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:562
|
||||
msgid "less than"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:563
|
||||
msgid "equals"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:564
|
||||
msgid "greater than"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:565
|
||||
msgid "question mark"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:566
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:567
|
||||
msgid "left bracket"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:568
|
||||
msgid "backslash"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:569
|
||||
msgid "right bracket"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:570
|
||||
msgid "caret"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:571
|
||||
msgid "underscore"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:572
|
||||
msgid "backtick"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:573
|
||||
msgid "left brace"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:574
|
||||
msgid "pipe"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:575
|
||||
msgid "right brace"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:576
|
||||
msgid "tilde"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:579
|
||||
msgid "one"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:579
|
||||
msgid "three"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:579
|
||||
msgid "two"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:579
|
||||
msgid "zero"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:580
|
||||
msgid "five"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:580
|
||||
msgid "four"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:580
|
||||
msgid "seven"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:580
|
||||
msgid "six"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:581
|
||||
msgid "eight"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:581
|
||||
msgid "nine"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:585
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text>, phonetically spelled out.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:615
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> as GNU/RMS would say it.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:624
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> with each word longer than\n"
|
||||
" supybot.plugins.Filter.shrink.minimum being shrunken (i.e., like\n"
|
||||
" \"internationalization\" becomes \"i18n\").\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:643
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> with the l's made into r's and r's made into l's.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:692
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> rotated 180 degrees. Only really works for ASCII\n"
|
||||
" printable characters.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
@ -39,6 +39,8 @@ from supybot.commands import *
|
||||
import supybot.ircmsgs as ircmsgs
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Filter')
|
||||
|
||||
class MyFilterProxy(object):
|
||||
def reply(self, s):
|
||||
@ -77,6 +79,7 @@ class Filter(callbacks.Plugin):
|
||||
'scramble', 'morse', 'reverse', 'colorize', 'squish',
|
||||
'supa1337', 'colorstrip', 'aol', 'rainbow', 'spellit',
|
||||
'hebrew', 'undup', 'gnu', 'shrink', 'azn', 'uniud']
|
||||
@internationalizeDocstring
|
||||
def outfilter(self, irc, msg, args, channel, command):
|
||||
"""[<channel>] [<command>]
|
||||
|
||||
@ -91,7 +94,7 @@ class Filter(callbacks.Plugin):
|
||||
self.outFilters.setdefault(channel, []).append(method)
|
||||
irc.replySuccess()
|
||||
else:
|
||||
irc.error('That\'s not a valid filter command.')
|
||||
irc.error(_('That\'s not a valid filter command.'))
|
||||
else:
|
||||
self.outFilters[channel] = []
|
||||
irc.replySuccess()
|
||||
@ -99,6 +102,7 @@ class Filter(callbacks.Plugin):
|
||||
[('checkChannelCapability', 'op'),
|
||||
additional('commandName')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def hebrew(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -110,6 +114,7 @@ class Filter(callbacks.Plugin):
|
||||
irc.reply(text)
|
||||
hebrew = wrap(hebrew, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def squish(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -119,6 +124,7 @@ class Filter(callbacks.Plugin):
|
||||
irc.reply(text)
|
||||
squish = wrap(squish, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def undup(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -131,6 +137,7 @@ class Filter(callbacks.Plugin):
|
||||
irc.reply(''.join(L))
|
||||
undup = wrap(undup, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def binary(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -156,6 +163,7 @@ class Filter(callbacks.Plugin):
|
||||
irc.reply(''.join(L))
|
||||
binary = wrap(binary, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def hexlify(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -165,6 +173,7 @@ class Filter(callbacks.Plugin):
|
||||
irc.reply(text.encode('hex_codec'))
|
||||
hexlify = wrap(hexlify, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def unhexlify(self, irc, msg, args, text):
|
||||
"""<hexstring>
|
||||
|
||||
@ -174,9 +183,10 @@ class Filter(callbacks.Plugin):
|
||||
try:
|
||||
irc.reply(text.decode('hex_codec'))
|
||||
except TypeError:
|
||||
irc.error('Invalid input.')
|
||||
irc.error(_('Invalid input.'))
|
||||
unhexlify = wrap(unhexlify, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def rot13(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -187,6 +197,7 @@ class Filter(callbacks.Plugin):
|
||||
irc.reply(text.encode('rot13'))
|
||||
rot13 = wrap(rot13, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def lithp(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -217,6 +228,7 @@ class Filter(callbacks.Plugin):
|
||||
(re.compile(r'[aA][tT]'), '@'),
|
||||
(re.compile(r'[sS]\b'), 'z'),
|
||||
(re.compile(r'x'), '><'),]
|
||||
@internationalizeDocstring
|
||||
def leet(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -236,6 +248,7 @@ class Filter(callbacks.Plugin):
|
||||
('D', '|)'), ('B', '|3'), ('I', ']['), ('Vv', '\\/'),
|
||||
('wW', '\\/\\/'), ('d', 'c|'), ('b', '|>'),
|
||||
('c', '<'), ('h', '|n'),]
|
||||
@internationalizeDocstring
|
||||
def supa1337(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -251,6 +264,7 @@ class Filter(callbacks.Plugin):
|
||||
|
||||
_scrambleRe = re.compile(r'(?:\b|(?![a-zA-Z]))([a-zA-Z])([a-zA-Z]*)'
|
||||
r'([a-zA-Z])(?:\b|(?![a-zA-Z]))')
|
||||
@internationalizeDocstring
|
||||
def scramble(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -315,6 +329,7 @@ class Filter(callbacks.Plugin):
|
||||
}
|
||||
_revMorseCode = dict([(y, x) for (x, y) in _morseCode.items()])
|
||||
_unmorsere = re.compile('([.-]+)')
|
||||
@internationalizeDocstring
|
||||
def unmorse(self, irc, msg, args, text):
|
||||
"""<Morse code text>
|
||||
|
||||
@ -331,6 +346,7 @@ class Filter(callbacks.Plugin):
|
||||
irc.reply(text)
|
||||
unmorse = wrap(unmorse, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def morse(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -342,6 +358,7 @@ class Filter(callbacks.Plugin):
|
||||
irc.reply(' '.join(L))
|
||||
morse = wrap(morse, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def reverse(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -350,6 +367,7 @@ class Filter(callbacks.Plugin):
|
||||
irc.reply(text[::-1])
|
||||
reverse = wrap(reverse, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def _color(self, c, fg=None):
|
||||
if c == ' ':
|
||||
return c
|
||||
@ -357,6 +375,7 @@ class Filter(callbacks.Plugin):
|
||||
fg = str(random.randint(2, 15)).zfill(2)
|
||||
return '\x03%s%s' % (fg, c)
|
||||
|
||||
@internationalizeDocstring
|
||||
def colorize(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -366,16 +385,18 @@ class Filter(callbacks.Plugin):
|
||||
irc.reply('%s%s' % (''.join(L), '\x03'))
|
||||
colorize = wrap(colorize, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def rainbow(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
Returns <text> colorized like a rainbow.
|
||||
"""
|
||||
colors = utils.iter.cycle([4, 7, 8, 3, 2, 12, 6])
|
||||
colors = utils.iter.cycle(['04', '07', '08', '03', '02', '12', '06'])
|
||||
L = [self._color(c, fg=colors.next()) for c in text]
|
||||
irc.reply(''.join(L) + '\x03')
|
||||
rainbow = wrap(rainbow, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def stripcolor(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -384,6 +405,7 @@ class Filter(callbacks.Plugin):
|
||||
irc.reply(ircutils.stripColor(text))
|
||||
stripcolor = wrap(stripcolor, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def aol(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -410,6 +432,7 @@ class Filter(callbacks.Plugin):
|
||||
irc.reply(text)
|
||||
aol = wrap(aol, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def jeffk(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -507,52 +530,56 @@ class Filter(callbacks.Plugin):
|
||||
# Keeping these separate so people can just replace the alphabets for
|
||||
# whatever their language of choice
|
||||
_spellLetters = {
|
||||
'a': 'ay', 'b': 'bee', 'c': 'see', 'd': 'dee', 'e': 'ee', 'f': 'eff',
|
||||
'g': 'gee', 'h': 'aych', 'i': 'eye', 'j': 'jay', 'k': 'kay', 'l':
|
||||
'ell', 'm': 'em', 'n': 'en', 'o': 'oh', 'p': 'pee', 'q': 'cue', 'r':
|
||||
'arr', 's': 'ess', 't': 'tee', 'u': 'you', 'v': 'vee', 'w':
|
||||
'double-you', 'x': 'ecks', 'y': 'why', 'z': 'zee'
|
||||
'a': _('ay'), 'b': _('bee'), 'c': _('see'), 'd': _('dee'),
|
||||
'e': _('ee'), 'f': _('eff'), 'g': _('gee'), 'h': _('aych'),
|
||||
'i': _('eye'), 'j': _('jay'), 'k': _('kay'), 'l': _('ell'),
|
||||
'm': _('em'), 'n': _('en'), 'o': _('oh'), 'p': _('pee'), 'q': _('cue'),
|
||||
'r': _('arr'), 's': _('ess'), 't': _('tee'), 'u': _('you'),
|
||||
'v': _('vee'), 'w': _('double-you'), 'x': _('ecks'), 'y': _('why'),
|
||||
'z': _('zee')
|
||||
}
|
||||
for (k, v) in _spellLetters.items():
|
||||
_spellLetters[k.upper()] = v
|
||||
_spellPunctuation = {
|
||||
'!': 'exclamation point',
|
||||
'"': 'quote',
|
||||
'#': 'pound',
|
||||
'$': 'dollar sign',
|
||||
'%': 'percent',
|
||||
'&': 'ampersand',
|
||||
'\'': 'single quote',
|
||||
'(': 'left paren',
|
||||
')': 'right paren',
|
||||
'*': 'asterisk',
|
||||
'+': 'plus',
|
||||
',': 'comma',
|
||||
'-': 'minus',
|
||||
'.': 'period',
|
||||
'/': 'slash',
|
||||
':': 'colon',
|
||||
';': 'semicolon',
|
||||
'<': 'less than',
|
||||
'=': 'equals',
|
||||
'>': 'greater than',
|
||||
'?': 'question mark',
|
||||
'@': 'at',
|
||||
'[': 'left bracket',
|
||||
'\\': 'backslash',
|
||||
']': 'right bracket',
|
||||
'^': 'caret',
|
||||
'_': 'underscore',
|
||||
'`': 'backtick',
|
||||
'{': 'left brace',
|
||||
'|': 'pipe',
|
||||
'}': 'right brace',
|
||||
'~': 'tilde'
|
||||
'!': _('exclamation point'),
|
||||
'"': _('quote'),
|
||||
'#': _('pound'),
|
||||
'$': _('dollar sign'),
|
||||
'%': _('percent'),
|
||||
'&': _('ampersand'),
|
||||
'\'': _('single quote'),
|
||||
'(': _('left paren'),
|
||||
')': _('right paren'),
|
||||
'*': _('asterisk'),
|
||||
'+': _('plus'),
|
||||
',': _('comma'),
|
||||
'-': _('minus'),
|
||||
'.': _('period'),
|
||||
'/': _('slash'),
|
||||
':': _('colon'),
|
||||
';': _('semicolon'),
|
||||
'<': _('less than'),
|
||||
'=': _('equals'),
|
||||
'>': _('greater than'),
|
||||
'?': _('question mark'),
|
||||
'@': _('at'),
|
||||
'[': _('left bracket'),
|
||||
'\\': _('backslash'),
|
||||
']': _('right bracket'),
|
||||
'^': _('caret'),
|
||||
'_': _('underscore'),
|
||||
'`': _('backtick'),
|
||||
'{': _('left brace'),
|
||||
'|': _('pipe'),
|
||||
'}': _('right brace'),
|
||||
'~': _('tilde')
|
||||
}
|
||||
_spellNumbers = {
|
||||
'0': 'zero', '1': 'one', '2': 'two', '3': 'three', '4': 'four',
|
||||
'5': 'five', '6': 'six', '7': 'seven', '8': 'eight', '9': 'nine'
|
||||
'0': _('zero'), '1': _('one'), '2': _('two'), '3': _('three'),
|
||||
'4': _('four'), '5': _('five'), '6': _('six'), '7': _('seven'),
|
||||
'8': _('eight'), '9': _('nine')
|
||||
}
|
||||
@internationalizeDocstring
|
||||
def spellit(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -582,6 +609,7 @@ class Filter(callbacks.Plugin):
|
||||
irc.reply(out.getvalue())
|
||||
spellit = wrap(spellit, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def gnu(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -590,6 +618,7 @@ class Filter(callbacks.Plugin):
|
||||
irc.reply(' '.join(['GNU/' + s for s in text.split()]))
|
||||
gnu = wrap(gnu, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def shrink(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -608,6 +637,7 @@ class Filter(callbacks.Plugin):
|
||||
shrink = wrap(shrink, ['text'])
|
||||
|
||||
_azn_trans = string.maketrans('rlRL', 'lrLR')
|
||||
@internationalizeDocstring
|
||||
def azn(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -656,6 +686,7 @@ class Filter(callbacks.Plugin):
|
||||
'_': u'\u203e', 'o': u'o',
|
||||
}
|
||||
|
||||
@internationalizeDocstring
|
||||
def uniud(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -681,6 +712,7 @@ class Filter(callbacks.Plugin):
|
||||
s = '%s \x02 \x02' % ''.join(map(lambda x: x.encode('utf-8'), turned))
|
||||
irc.reply(s)
|
||||
uniud = wrap(uniud, ['text'])
|
||||
Filter = internationalizeDocstring(Filter)
|
||||
|
||||
Class = Filter
|
||||
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Format')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
|
197
plugins/Format/locale/fr.po
Normal file
197
plugins/Format/locale/fr.po
Normal file
@ -0,0 +1,197 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-17 12:46+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: plugin.py:43
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> bolded.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le texte, en gras"
|
||||
|
||||
#: plugin.py:52
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> in reverse-video.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le texte, inversé"
|
||||
|
||||
#: plugin.py:61
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> underlined.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le texte, souligné"
|
||||
|
||||
#: plugin.py:70
|
||||
msgid ""
|
||||
"<foreground> [<background>] <text>\n"
|
||||
"\n"
|
||||
" Returns <text> with foreground color <foreground> and background color\n"
|
||||
" <background> (if given)\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<premier plan> [<arrière plan>] <texte>\n"
|
||||
"\n"
|
||||
"Retourne le <texte> avec les couleurs de <premier plan> et de l'<arrière plan> (si donné)."
|
||||
|
||||
#: plugin.py:80
|
||||
msgid ""
|
||||
"<separator> <string 1> [<string> ...]\n"
|
||||
"\n"
|
||||
" Joins all the arguments together with <separator>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<séparateur> <chaîne 1> [<chaîne 2> ...]\n"
|
||||
"\n"
|
||||
"Joint tous les arguments en utilisant le <séparateur>."
|
||||
|
||||
#: plugin.py:89
|
||||
msgid ""
|
||||
"<chars to translate> <chars to replace those with> <text>\n"
|
||||
"\n"
|
||||
" Replaces <chars to translate> with <chars to replace those with> in\n"
|
||||
" <text>. The first and second arguments must necessarily be the same\n"
|
||||
" length.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<caractères à remplacer> <caractères de remplacement> <texte>\n"
|
||||
"\n"
|
||||
"Remplacer des caractères par d'autres. Le premier et le second argument doivent obligatoirement être de la même taille."
|
||||
|
||||
#: plugin.py:96
|
||||
msgid "<chars to translate> must be the same length as <chars to replace those with>."
|
||||
msgstr "<caractères à remplacer> doit être de la même taille que <caractères de remplacement>"
|
||||
|
||||
#: plugin.py:103
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> uppercased.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le texte, en majuscules"
|
||||
|
||||
#: plugin.py:112
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> lowercased.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le texte, en minuscules"
|
||||
|
||||
#: plugin.py:121
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> capitalized.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le texte, capitalisé"
|
||||
|
||||
#: plugin.py:130
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> titlecased.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le texte, mis en majuscules de titre."
|
||||
|
||||
#: plugin.py:139
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns the text surrounded by double quotes.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<texte>\n"
|
||||
"\n"
|
||||
"Retourne le texte, entouré de doubles guillemets."
|
||||
|
||||
#: plugin.py:148
|
||||
msgid ""
|
||||
"<string 1> <string 2>\n"
|
||||
"\n"
|
||||
" Concatenates two strings. Do keep in mind that this is *not* the same\n"
|
||||
" thing as join \"\", since if <string 2> contains spaces, they won't be\n"
|
||||
" removed by concat.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<chaîne 1> <chaîne 2>\n"
|
||||
"\n"
|
||||
"Concatène les deux chaînes. Notez que ce n'est pas la même chose que de les joindre avec \"\", car, si <chaîne 2> contient des espaces, ils ne seront pas supprimés par la concaténation."
|
||||
|
||||
#: plugin.py:159
|
||||
msgid ""
|
||||
"<size> <text>\n"
|
||||
"\n"
|
||||
" Cuts <text> down to <size> by chopping off the rightmost characters in\n"
|
||||
" excess of <size>. If <size> is a negative number, it chops that many\n"
|
||||
" characters off the end of <text>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<taille> <texte>\n"
|
||||
"\n"
|
||||
"Coup le <texte> en morceaux de <taille>, en découpant les caractères dépassant la <taille>. Si la <taille> est un nombre négatif, il coupe en comptant à partir de la fin du texte."
|
||||
|
||||
#: plugin.py:170
|
||||
msgid ""
|
||||
"<number> <text>\n"
|
||||
"\n"
|
||||
" Returns the <number>th space-separated field of <text>. I.e., if text\n"
|
||||
" is \"foo bar baz\" and <number> is 2, \"bar\" is returned.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<nombre> <texte>\n"
|
||||
"\n"
|
||||
"Retourne le <nombre>-ième élément (séparé par des espaces) du <texte>. C'est à dire que si le texte est \"foo bar baz\" et que <nombre> est 2, \"bar\" sera retourné."
|
||||
|
||||
#: plugin.py:183
|
||||
msgid ""
|
||||
"<format string> [<arg> ...]\n"
|
||||
"\n"
|
||||
" Expands a Python-style format string using the remaining args. Just be\n"
|
||||
" sure always to use %s, not %d or %f or whatever, because all the args\n"
|
||||
" are strings.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<chaîne de formattage> [<arg> ...]\n"
|
||||
"\n"
|
||||
|
||||
#: plugin.py:197
|
||||
msgid "Not enough arguments for the format string."
|
||||
msgstr "Pas assez d'arguments pour formatter la chaîne."
|
||||
|
170
plugins/Format/messages.pot
Normal file
170
plugins/Format/messages.pot
Normal file
@ -0,0 +1,170 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-17 12:46+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: plugin.py:43
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> bolded.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:52
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> in reverse-video.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:61
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> underlined.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:70
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<foreground> [<background>] <text>\n"
|
||||
"\n"
|
||||
" Returns <text> with foreground color <foreground> and background color\n"
|
||||
" <background> (if given)\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:80
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<separator> <string 1> [<string> ...]\n"
|
||||
"\n"
|
||||
" Joins all the arguments together with <separator>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:89
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<chars to translate> <chars to replace those with> <text>\n"
|
||||
"\n"
|
||||
" Replaces <chars to translate> with <chars to replace those with> in\n"
|
||||
" <text>. The first and second arguments must necessarily be the same\n"
|
||||
" length.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:96
|
||||
msgid "<chars to translate> must be the same length as <chars to replace those with>."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:103
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> uppercased.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:112
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> lowercased.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:121
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> capitalized.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:130
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns <text> titlecased.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:139
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<text>\n"
|
||||
"\n"
|
||||
" Returns the text surrounded by double quotes.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:148
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<string 1> <string 2>\n"
|
||||
"\n"
|
||||
" Concatenates two strings. Do keep in mind that this is *not* the same\n"
|
||||
" thing as join \"\", since if <string 2> contains spaces, they won't be\n"
|
||||
" removed by concat.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:159
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<size> <text>\n"
|
||||
"\n"
|
||||
" Cuts <text> down to <size> by chopping off the rightmost characters in\n"
|
||||
" excess of <size>. If <size> is a negative number, it chops that many\n"
|
||||
" characters off the end of <text>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:170
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<number> <text>\n"
|
||||
"\n"
|
||||
" Returns the <number>th space-separated field of <text>. I.e., if text\n"
|
||||
" is \"foo bar baz\" and <number> is 2, \"bar\" is returned.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:183
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<format string> [<arg> ...]\n"
|
||||
"\n"
|
||||
" Expands a Python-style format string using the remaining args. Just be\n"
|
||||
" sure always to use %s, not %d or %f or whatever, because all the args\n"
|
||||
" are strings.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:197
|
||||
msgid "Not enough arguments for the format string."
|
||||
msgstr ""
|
||||
|
@ -34,8 +34,11 @@ import supybot.utils as utils
|
||||
from supybot.commands import *
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Format')
|
||||
|
||||
class Format(callbacks.Plugin):
|
||||
@internationalizeDocstring
|
||||
def bold(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -44,6 +47,7 @@ class Format(callbacks.Plugin):
|
||||
irc.reply(ircutils.bold(text))
|
||||
bold = wrap(bold, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def reverse(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -52,6 +56,7 @@ class Format(callbacks.Plugin):
|
||||
irc.reply(ircutils.reverse(text))
|
||||
reverse = wrap(reverse, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def underline(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -60,6 +65,7 @@ class Format(callbacks.Plugin):
|
||||
irc.reply(ircutils.underline(text))
|
||||
underline = wrap(underline, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def color(self, irc, msg, args, fg, bg, text):
|
||||
"""<foreground> [<background>] <text>
|
||||
|
||||
@ -69,6 +75,7 @@ class Format(callbacks.Plugin):
|
||||
irc.reply(ircutils.mircColor(text, fg=fg, bg=bg))
|
||||
color = wrap(color, ['color', optional('color'), 'text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def join(self, irc, msg, args, sep):
|
||||
"""<separator> <string 1> [<string> ...]
|
||||
|
||||
@ -77,6 +84,7 @@ class Format(callbacks.Plugin):
|
||||
irc.reply(sep.join(args))
|
||||
join = wrap(join, ['anything'], allowExtra=True)
|
||||
|
||||
@internationalizeDocstring
|
||||
def translate(self, irc, msg, args, bad, good, text):
|
||||
"""<chars to translate> <chars to replace those with> <text>
|
||||
|
||||
@ -85,11 +93,12 @@ class Format(callbacks.Plugin):
|
||||
length.
|
||||
"""
|
||||
if len(bad) != len(good):
|
||||
irc.error('<chars to translate> must be the same length as '
|
||||
'<chars to replace those with>.', Raise=True)
|
||||
irc.error(_('<chars to translate> must be the same length as '
|
||||
'<chars to replace those with>.'), Raise=True)
|
||||
irc.reply(text.translate(string.maketrans(bad, good)))
|
||||
translate = wrap(translate, ['something', 'something', 'text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def upper(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -98,6 +107,7 @@ class Format(callbacks.Plugin):
|
||||
irc.reply(text.upper())
|
||||
upper = wrap(upper, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def lower(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -106,6 +116,7 @@ class Format(callbacks.Plugin):
|
||||
irc.reply(text.lower())
|
||||
lower = wrap(lower, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def capitalize(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -114,6 +125,7 @@ class Format(callbacks.Plugin):
|
||||
irc.reply(text.capitalize())
|
||||
capitalize = wrap(capitalize, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def title(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -122,6 +134,7 @@ class Format(callbacks.Plugin):
|
||||
irc.reply(text.title())
|
||||
title = wrap(title, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def repr(self, irc, msg, args, text):
|
||||
"""<text>
|
||||
|
||||
@ -130,6 +143,7 @@ class Format(callbacks.Plugin):
|
||||
irc.reply(utils.str.dqrepr(text))
|
||||
repr = wrap(repr, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def concat(self, irc, msg, args, first, second):
|
||||
"""<string 1> <string 2>
|
||||
|
||||
@ -140,6 +154,7 @@ class Format(callbacks.Plugin):
|
||||
irc.reply(first+second)
|
||||
concat = wrap(concat, ['something', 'text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def cut(self, irc, msg, args, size, text):
|
||||
"""<size> <text>
|
||||
|
||||
@ -150,6 +165,7 @@ class Format(callbacks.Plugin):
|
||||
irc.reply(text[:size])
|
||||
cut = wrap(cut, ['int', 'text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def field(self, irc, msg, args, index, text):
|
||||
"""<number> <text>
|
||||
|
||||
@ -162,6 +178,7 @@ class Format(callbacks.Plugin):
|
||||
irc.errorInvalid('field')
|
||||
field = wrap(field, ['index', 'text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def format(self, irc, msg, args):
|
||||
"""<format string> [<arg> ...]
|
||||
|
||||
@ -177,7 +194,8 @@ class Format(callbacks.Plugin):
|
||||
irc.reply(s)
|
||||
except TypeError, e:
|
||||
self.log.debug(utils.exnToString(e))
|
||||
irc.error('Not enough arguments for the format string.',Raise=True)
|
||||
irc.error(_('Not enough arguments for the format string.'),
|
||||
Raise=True)
|
||||
|
||||
|
||||
Class = Format
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Games')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
|
140
plugins/Games/locale/fr.po
Normal file
140
plugins/Games/locale/fr.po
Normal file
@ -0,0 +1,140 @@
|
||||
# French translations for PACKAGE package
|
||||
# Traductions françaises du paquet PACKAGE.
|
||||
# Copyright (C) 2010 ORGANIZATION
|
||||
# ProgVal <progval@gmail.com>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-17 13:16+CEST\n"
|
||||
"PO-Revision-Date: 2010-12-23 19:55+0100\n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: French\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
"Language: fr\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: plugin.py:46
|
||||
msgid ""
|
||||
"takes no arguments\n"
|
||||
"\n"
|
||||
" Flips a coin and returns the result.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"ne prend pas d'argument\n"
|
||||
"\n"
|
||||
"Lance une pièce et retourne le résultat."
|
||||
|
||||
#: plugin.py:51
|
||||
msgid "heads"
|
||||
msgstr "face"
|
||||
|
||||
#: plugin.py:53
|
||||
msgid "tails"
|
||||
msgstr "pile"
|
||||
|
||||
#: plugin.py:58
|
||||
msgid ""
|
||||
"<dice>d<sides>\n"
|
||||
"\n"
|
||||
" Rolls a die with <sides> number of sides <dice> times.\n"
|
||||
" For example, 2d6 will roll 2 six-sided dice; 10d10 will roll 10\n"
|
||||
" ten-sided dice.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<lancers>d<faces>\n"
|
||||
"\n"
|
||||
"Fait un certain nombre de <lancers> d'un dé d'un certain nombre de <faces>. Par exemple, 2d6 lancera deux dés à six faces, et 10d10 dix dés à dix faces."
|
||||
|
||||
#: plugin.py:66
|
||||
msgid "You can't roll more than 1000 dice."
|
||||
msgstr "Vous ne pouvez lancer plus de 1000 dés."
|
||||
|
||||
#: plugin.py:68
|
||||
msgid "Dice can't have more than 100 sides."
|
||||
msgstr "Vous ne pouvez pas avoir plus de 100 faces."
|
||||
|
||||
#: plugin.py:70
|
||||
msgid "Dice can't have fewer than 3 sides."
|
||||
msgstr "Vous ne pouvez pas avoir moins de trois faces."
|
||||
|
||||
#: plugin.py:78
|
||||
msgid "Dice must be of the form <dice>d<sides>"
|
||||
msgstr "Les dés doivent être de la forme <lancers>d<faces>"
|
||||
|
||||
#: plugin.py:82
|
||||
msgid "It is possible.|Yes!|Of course.|Naturally.|Obviously.|It shall be.|The outlook is good.|It is so.|One would be wise to think so.|The answer is certainly yes."
|
||||
msgstr "C'est possible.|Oui !|Bien sûr.|Naturellement.|Évidemment.|Ce doit être ça.|Ce n'est pas impossible.|C'est le cas.|C'est ce que l'on peut penser.|La réponse est certainement oui."
|
||||
|
||||
#: plugin.py:86
|
||||
msgid "In your dreams.|I doubt it very much.|No chance.|The outlook is poor.|Unlikely.|About as likely as pigs flying.|You're kidding, right?|NO!|NO.|No.|The answer is a resounding no."
|
||||
msgstr "Dans tes rêves.|J'en doute.|Impossible.|Ça m'étonnerait|Improbable.|Quand les poules auront des dents|La semaine des quatre jeudis.|Tu rigoles ?|NON !|NON.|Non.|La réponse semble être non."
|
||||
|
||||
#: plugin.py:90
|
||||
msgid "Maybe...|No clue.|_I_ don't know.|The outlook is hazy, please ask again later.|What are you asking me for?|Come again?|You know the answer better than I.|The answer is def-- oooh! shiny thing!"
|
||||
msgstr "Peut-être...|Aucune idée|*Je* ne sais pas|Je n'en sais rien, veuillez réessayer.|Qu'est-ce que vous me demander ?|Revenez plus tard.|Vous connaissez la réponse mieux que moi.|La réponse est... oooh ! un truc qui brille !"
|
||||
|
||||
#: plugin.py:107
|
||||
msgid ""
|
||||
"[<question>]\n"
|
||||
"\n"
|
||||
" Ask a question and the answer shall be provided.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<question>]\n"
|
||||
"\n"
|
||||
"Posez une question, et la réponse devrait vous être donnée."
|
||||
|
||||
#: plugin.py:121
|
||||
msgid ""
|
||||
"[spin]\n"
|
||||
"\n"
|
||||
" Fires the revolver. If the bullet was in the chamber, you're dead.\n"
|
||||
" Tell me to spin the chambers and I will.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[spin]\n"
|
||||
"\n"
|
||||
"Tire avec le revolver. Si la balle était dans la chambre, vous être mort. Dites-moi de recharger les chambres (en indiquant 'spin') et je le ferais."
|
||||
|
||||
#: plugin.py:128
|
||||
msgid "*SPIN* Are you feeling lucky?"
|
||||
msgstr "*FAIT TOURNER LE BARILLET* Prêt à mettre votre chance à l'épreuve ?"
|
||||
|
||||
#: plugin.py:137
|
||||
msgid "*BANG* Hey, who put a blank in here?!"
|
||||
msgstr "*BANG* Eh, qui a fait un trou ici ?"
|
||||
|
||||
#: plugin.py:139
|
||||
msgid "reloads and spins the chambers."
|
||||
msgstr "recharge et fait tourner les chambres"
|
||||
|
||||
#: plugin.py:141
|
||||
msgid "*click*"
|
||||
msgstr "*clic*"
|
||||
|
||||
#: plugin.py:148
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" Returns the number of consecutive lines you've sent in <channel>\n"
|
||||
" without being interrupted by someone else (i.e. how long your current\n"
|
||||
" 'monologue' is). <channel> is only necessary if the message isn't sent\n"
|
||||
" in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>]\n"
|
||||
"\n"
|
||||
"Retourne le nombre de lignes consécutives que vous avez écrites sur le <canal> sans être interrompu par qui que ce soit. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:167
|
||||
msgid "Your current monologue is at least %n long."
|
||||
msgstr "Votre monologue actuel est au moins long de %n."
|
||||
|
||||
#: plugin.py:168
|
||||
msgid "line"
|
||||
msgstr "ligne"
|
||||
|
128
plugins/Games/messages.pot
Normal file
128
plugins/Games/messages.pot
Normal file
@ -0,0 +1,128 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-17 13:16+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: plugin.py:46
|
||||
#, docstring
|
||||
msgid ""
|
||||
"takes no arguments\n"
|
||||
"\n"
|
||||
" Flips a coin and returns the result.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:51
|
||||
msgid "heads"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:53
|
||||
msgid "tails"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:58
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<dice>d<sides>\n"
|
||||
"\n"
|
||||
" Rolls a die with <sides> number of sides <dice> times.\n"
|
||||
" For example, 2d6 will roll 2 six-sided dice; 10d10 will roll 10\n"
|
||||
" ten-sided dice.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:66
|
||||
msgid "You can't roll more than 1000 dice."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:68
|
||||
msgid "Dice can't have more than 100 sides."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:70
|
||||
msgid "Dice can't have fewer than 3 sides."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:78
|
||||
msgid "Dice must be of the form <dice>d<sides>"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:82
|
||||
msgid "It is possible.|Yes!|Of course.|Naturally.|Obviously.|It shall be.|The outlook is good.|It is so.|One would be wise to think so.|The answer is certainly yes."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:86
|
||||
msgid "In your dreams.|I doubt it very much.|No chance.|The outlook is poor.|Unlikely.|About as likely as pigs flying.|You're kidding, right?|NO!|NO.|No.|The answer is a resounding no."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:90
|
||||
msgid "Maybe...|No clue.|_I_ don't know.|The outlook is hazy, please ask again later.|What are you asking me for?|Come again?|You know the answer better than I.|The answer is def-- oooh! shiny thing!"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:107
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<question>]\n"
|
||||
"\n"
|
||||
" Ask a question and the answer shall be provided.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:121
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[spin]\n"
|
||||
"\n"
|
||||
" Fires the revolver. If the bullet was in the chamber, you're dead.\n"
|
||||
" Tell me to spin the chambers and I will.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:128
|
||||
msgid "*SPIN* Are you feeling lucky?"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:137
|
||||
msgid "*BANG* Hey, who put a blank in here?!"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:139
|
||||
msgid "reloads and spins the chambers."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:141
|
||||
msgid "*click*"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:148
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>]\n"
|
||||
"\n"
|
||||
" Returns the number of consecutive lines you've sent in <channel>\n"
|
||||
" without being interrupted by someone else (i.e. how long your current\n"
|
||||
" 'monologue' is). <channel> is only necessary if the message isn't sent\n"
|
||||
" in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:167
|
||||
msgid "Your current monologue is at least %n long."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:168
|
||||
msgid "line"
|
||||
msgstr ""
|
||||
|
@ -36,20 +36,24 @@ from supybot.commands import *
|
||||
import supybot.ircmsgs as ircmsgs
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Games')
|
||||
|
||||
|
||||
class Games(callbacks.Plugin):
|
||||
@internationalizeDocstring
|
||||
def coin(self, irc, msg, args):
|
||||
"""takes no arguments
|
||||
|
||||
Flips a coin and returns the result.
|
||||
"""
|
||||
if random.randrange(0, 2):
|
||||
irc.reply('heads')
|
||||
irc.reply(_('heads'))
|
||||
else:
|
||||
irc.reply('tails')
|
||||
irc.reply(_('tails'))
|
||||
coin = wrap(coin)
|
||||
|
||||
@internationalizeDocstring
|
||||
def dice(self, irc, msg, args, m):
|
||||
"""<dice>d<sides>
|
||||
|
||||
@ -59,11 +63,11 @@ class Games(callbacks.Plugin):
|
||||
"""
|
||||
(dice, sides) = utils.iter.imap(int, m.groups())
|
||||
if dice > 1000:
|
||||
irc.error('You can\'t roll more than 1000 dice.')
|
||||
irc.error(_('You can\'t roll more than 1000 dice.'))
|
||||
elif sides > 100:
|
||||
irc.error('Dice can\'t have more than 100 sides.')
|
||||
irc.error(_('Dice can\'t have more than 100 sides.'))
|
||||
elif sides < 3:
|
||||
irc.error('Dice can\'t have fewer than 3 sides.')
|
||||
irc.error(_('Dice can\'t have fewer than 3 sides.'))
|
||||
else:
|
||||
L = [0] * dice
|
||||
for i in xrange(dice):
|
||||
@ -71,36 +75,34 @@ class Games(callbacks.Plugin):
|
||||
irc.reply(format('%L', [str(x) for x in L]))
|
||||
_dicere = re.compile(r'^(\d+)d(\d+)$')
|
||||
dice = wrap(dice, [('matches', _dicere,
|
||||
'Dice must be of the form <dice>d<sides>')])
|
||||
_('Dice must be of the form <dice>d<sides>'))])
|
||||
|
||||
# The list of words and algorithm are pulled straight the mozbot
|
||||
# MagicEightBall.bm module: http://tinyurl.com/7ytg7
|
||||
_responses = {'positive': ['It is possible.', 'Yes!', 'Of course.',
|
||||
'Naturally.', 'Obviously.', 'It shall be.',
|
||||
'The outlook is good.', 'It is so.',
|
||||
'One would be wise to think so.',
|
||||
'The answer is certainly yes.'],
|
||||
'negative': ['In your dreams.', 'I doubt it very much.',
|
||||
'No chance.', 'The outlook is poor.',
|
||||
'Unlikely.', 'About as likely as pigs flying.',
|
||||
'You\'re kidding, right?', 'NO!', 'NO.', 'No.',
|
||||
'The answer is a resounding no.', ],
|
||||
'unknown' : ['Maybe...', 'No clue.', '_I_ don\'t know.',
|
||||
'The outlook is hazy, please ask again later.',
|
||||
'What are you asking me for?', 'Come again?',
|
||||
'You know the answer better than I.',
|
||||
'The answer is def-- oooh! shiny thing!'],
|
||||
}
|
||||
_positive = _('It is possible.|Yes!|Of course.|Naturally.|Obviously.|'
|
||||
'It shall be.|The outlook is good.|It is so.|'
|
||||
'One would be wise to think so.|'
|
||||
'The answer is certainly yes.')
|
||||
_negative = _('In your dreams.|I doubt it very much.|No chance.|'
|
||||
'The outlook is poor.|Unlikely.|'
|
||||
'About as likely as pigs flying.|You\'re kidding, right?|'
|
||||
'NO!|NO.|No.|The answer is a resounding no.')
|
||||
_unknown = _('Maybe...|No clue.|_I_ don\'t know.|'
|
||||
'The outlook is hazy, please ask again later.|'
|
||||
'What are you asking me for?|Come again?|'
|
||||
'You know the answer better than I.|'
|
||||
'The answer is def-- oooh! shiny thing!')
|
||||
|
||||
def _checkTheBall(self, questionLength):
|
||||
if questionLength % 3 == 0:
|
||||
category = 'positive'
|
||||
catalog = self._positive
|
||||
elif questionLength % 3 == 1:
|
||||
category = 'negative'
|
||||
catalog = self._negative
|
||||
else:
|
||||
category = 'unknown'
|
||||
return utils.iter.choice(self._responses[category])
|
||||
catalog = self._unknown
|
||||
return utils.iter.choice(catalog.split('|'))
|
||||
|
||||
@internationalizeDocstring
|
||||
def eightball(self, irc, msg, args, text):
|
||||
"""[<question>]
|
||||
|
||||
@ -114,6 +116,7 @@ class Games(callbacks.Plugin):
|
||||
|
||||
_rouletteChamber = random.randrange(0, 6)
|
||||
_rouletteBullet = random.randrange(0, 6)
|
||||
@internationalizeDocstring
|
||||
def roulette(self, irc, msg, args, spin):
|
||||
"""[spin]
|
||||
|
||||
@ -122,7 +125,7 @@ class Games(callbacks.Plugin):
|
||||
"""
|
||||
if spin:
|
||||
self._rouletteBullet = random.randrange(0, 6)
|
||||
irc.reply('*SPIN* Are you feeling lucky?', prefixNick=False)
|
||||
irc.reply(_('*SPIN* Are you feeling lucky?'), prefixNick=False)
|
||||
return
|
||||
channel = msg.args[0]
|
||||
if self._rouletteChamber == self._rouletteBullet:
|
||||
@ -131,15 +134,16 @@ class Games(callbacks.Plugin):
|
||||
if irc.nick in irc.state.channels[channel].ops:
|
||||
irc.queueMsg(ircmsgs.kick(channel, msg.nick, 'BANG!'))
|
||||
else:
|
||||
irc.reply('*BANG* Hey, who put a blank in here?!',
|
||||
irc.reply(_('*BANG* Hey, who put a blank in here?!'),
|
||||
prefixNick=False)
|
||||
irc.reply('reloads and spins the chambers.', action=True)
|
||||
irc.reply(_('reloads and spins the chambers.'), action=True)
|
||||
else:
|
||||
irc.reply('*click*')
|
||||
irc.reply(_('*click*'))
|
||||
self._rouletteChamber += 1
|
||||
self._rouletteChamber %= 6
|
||||
roulette = wrap(roulette, ['public', additional(('literal', 'spin'))])
|
||||
|
||||
@internationalizeDocstring
|
||||
def monologue(self, irc, msg, args, channel):
|
||||
"""[<channel>]
|
||||
|
||||
@ -160,8 +164,8 @@ class Games(callbacks.Plugin):
|
||||
i += 1
|
||||
else:
|
||||
break
|
||||
irc.reply(format('Your current monologue is at least %n long.',
|
||||
(i, 'line')))
|
||||
irc.reply(format(_('Your current monologue is at least %n long.'),
|
||||
(i, _('line'))))
|
||||
monologue = wrap(monologue, ['channel'])
|
||||
|
||||
Class = Games
|
||||
|
@ -30,15 +30,17 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Google')
|
||||
|
||||
def configure(advanced):
|
||||
from supybot.questions import output, yn
|
||||
conf.registerPlugin('Google', True)
|
||||
output("""The Google plugin has the functionality to watch for URLs
|
||||
output(_("""The Google plugin has the functionality to watch for URLs
|
||||
that match a specific pattern. (We call this a snarfer)
|
||||
When supybot sees such a URL, it will parse the web page
|
||||
for information and reply with the results.""")
|
||||
if yn('Do you want the Google search snarfer enabled by default?'):
|
||||
for information and reply with the results."""))
|
||||
if yn(_('Do you want the Google search snarfer enabled by default?')):
|
||||
conf.supybot.plugins.Google.searchSnarfer.setValue(True)
|
||||
|
||||
class Language(registry.OnlySomeStrings):
|
||||
@ -94,29 +96,29 @@ class SafeSearch(registry.OnlySomeStrings):
|
||||
|
||||
Google = conf.registerPlugin('Google')
|
||||
conf.registerGlobalValue(Google, 'referer',
|
||||
registry.String('', """Determines the URL that will be sent to Google for
|
||||
registry.String('', _("""Determines the URL that will be sent to Google for
|
||||
the Referer field of the search requests. If this value is empty, a
|
||||
Referer will be generated in the following format:
|
||||
http://$server/$botName"""))
|
||||
http://$server/$botName""")))
|
||||
conf.registerChannelValue(Google, 'searchSnarfer',
|
||||
registry.Boolean(False, """Determines whether the search snarfer is
|
||||
registry.Boolean(False, _("""Determines whether the search snarfer is
|
||||
enabled. If so, messages (even unaddressed ones) beginning with the word
|
||||
'google' will result in the first URL Google returns being sent to the
|
||||
channel."""))
|
||||
channel.""")))
|
||||
conf.registerChannelValue(Google, 'colorfulFilter',
|
||||
registry.Boolean(False, """Determines whether the word 'google' in the
|
||||
bot's output will be made colorful (like Google's logo)."""))
|
||||
registry.Boolean(False, _("""Determines whether the word 'google' in the
|
||||
bot's output will be made colorful (like Google's logo).""")))
|
||||
conf.registerChannelValue(Google, 'bold',
|
||||
registry.Boolean(True, """Determines whether results are bolded."""))
|
||||
registry.Boolean(True, _("""Determines whether results are bolded.""")))
|
||||
conf.registerChannelValue(Google, 'maximumResults',
|
||||
NumSearchResults(8, """Determines the maximum number of results returned
|
||||
from the google command."""))
|
||||
NumSearchResults(8, _("""Determines the maximum number of results returned
|
||||
from the google command.""")))
|
||||
conf.registerChannelValue(Google, 'defaultLanguage',
|
||||
Language('lang_en', """Determines what default language is used in
|
||||
searches. If left empty, no specific language will be requested."""))
|
||||
Language('lang_'+ _('en'), _("""Determines what default language is used in
|
||||
searches. If left empty, no specific language will be requested.""")))
|
||||
conf.registerChannelValue(Google, 'searchFilter',
|
||||
SafeSearch('moderate', """Determines what level of search filtering to use
|
||||
SafeSearch('moderate', _("""Determines what level of search filtering to use
|
||||
by default. 'active' - most filtering, 'moderate' - default filtering,
|
||||
'off' - no filtering"""))
|
||||
'off' - no filtering""")))
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
||||
|
225
plugins/Google/locale/fr.po
Normal file
225
plugins/Google/locale/fr.po
Normal file
@ -0,0 +1,225 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-17 14:50+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: config.py:39
|
||||
msgid ""
|
||||
"The Google plugin has the functionality to watch for URLs\n"
|
||||
" that match a specific pattern. (We call this a snarfer)\n"
|
||||
" When supybot sees such a URL, it will parse the web page\n"
|
||||
" for information and reply with the results."
|
||||
msgstr "Le plugin Google sert à lire des URLs qui correspondent à un masque spécifique (nous appelons ça un 'snarfer'). Lorsque Supybot voit une telle URL, il parse la page web pour trouver des informations et répond avec les résultats."
|
||||
|
||||
#: config.py:43
|
||||
msgid "Do you want the Google search snarfer enabled by default?"
|
||||
msgstr "Voulez-vous activer le snarfer de recherche Google par défaut ?"
|
||||
|
||||
#: config.py:88
|
||||
msgid "Value must be 1 <= n <= 8"
|
||||
msgstr "La valeur doit être comprise entre 1 et 8 (inclus)"
|
||||
|
||||
#: config.py:99
|
||||
msgid ""
|
||||
"Determines the URL that will be sent to Google for\n"
|
||||
" the Referer field of the search requests. If this value is empty, a\n"
|
||||
" Referer will be generated in the following format:\n"
|
||||
" http://$server/$botName"
|
||||
msgstr "Détermine l'URL qui sera envoyée à Google comme Referer pour les recerches. Si la valeur est vide, un Refere sera automatiquement généré dans le format : http://$server/$botNamr"
|
||||
|
||||
#: config.py:104
|
||||
msgid ""
|
||||
"Determines whether the search snarfer is\n"
|
||||
" enabled. If so, messages (even unaddressed ones) beginning with the word\n"
|
||||
" 'google' will result in the first URL Google returns being sent to the\n"
|
||||
" channel."
|
||||
msgstr "Détermine si le snarger de recherche est activé. Si c'est le cas, les messages (même non adressés) commençant par 'google' seront répondus par la première URL que Google donne pour cette recherche."
|
||||
|
||||
#: config.py:109
|
||||
msgid ""
|
||||
"Determines whether the word 'google' in the\n"
|
||||
" bot's output will be made colorful (like Google's logo)."
|
||||
msgstr "Détermine si le mot 'google' dans la sortie du bot sera coloré (comme le logo de Google)"
|
||||
|
||||
#: config.py:112
|
||||
msgid "Determines whether results are bolded."
|
||||
msgstr "Détermine si les résultats sont mis en gras."
|
||||
|
||||
#: config.py:114
|
||||
msgid ""
|
||||
"Determines the maximum number of results returned\n"
|
||||
" from the google command."
|
||||
msgstr "Détermine le nombre maximum de résultats retournés par la commande google."
|
||||
|
||||
#: config.py:117
|
||||
msgid ""
|
||||
"Determines what default language is used in\n"
|
||||
" searches. If left empty, no specific language will be requested."
|
||||
msgstr "Détermine quand langue par défaut est utilisée dans les recherches. Si laissé vide, aucune langue spécifique ne sera demandée."
|
||||
|
||||
#: config.py:117
|
||||
msgid "en"
|
||||
msgstr "fr"
|
||||
|
||||
#: config.py:120
|
||||
msgid ""
|
||||
"Determines what level of search filtering to use\n"
|
||||
" by default. 'active' - most filtering, 'moderate' - default filtering,\n"
|
||||
" 'off' - no filtering"
|
||||
msgstr "Détermine le niveau de filtrage à utiliser par défaut. 'active' filtre tout, 'moderate' est le filtre par défaut, et 'off' désactive le filtrage."
|
||||
|
||||
#: plugin.py:101
|
||||
msgid ""
|
||||
"Perform a search using Google's AJAX API.\n"
|
||||
" search(\"search phrase\", options={})\n"
|
||||
"\n"
|
||||
" Valid options are:\n"
|
||||
" smallsearch - True/False (Default: False)\n"
|
||||
" filter - {active,moderate,off} (Default: \"moderate\")\n"
|
||||
" language - Restrict search to documents in the given language\n"
|
||||
" (Default: \"lang_en\")\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"Perform a search using Google's AJAX API.\n"
|
||||
" search(\"search phrase\", options={})\n"
|
||||
"\n"
|
||||
" Valid options are:\n"
|
||||
" smallsearch - True/False (Default: False)\n"
|
||||
" filter - {active,moderate,off} (Default: \"moderate\")\n"
|
||||
" language - Restrict search to documents in the given language\n"
|
||||
" (Default: \"lang_en\")\n"
|
||||
" "
|
||||
|
||||
#: plugin.py:141
|
||||
#: plugin.py:192
|
||||
msgid "We broke The Google!"
|
||||
msgstr "Google est toukassay !"
|
||||
|
||||
#: plugin.py:161
|
||||
msgid "No matches found."
|
||||
msgstr "Aucune correspondance."
|
||||
|
||||
#: plugin.py:167
|
||||
msgid ""
|
||||
"<search>\n"
|
||||
"\n"
|
||||
" Does a google search, but only returns the first result.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<recherche>\n"
|
||||
"\n"
|
||||
"Effectue une recherche google, mais ne retourne que le premier résultat."
|
||||
|
||||
#: plugin.py:176
|
||||
msgid "Google found nothing."
|
||||
msgstr "Google n'a rien trouvé."
|
||||
|
||||
#: plugin.py:181
|
||||
msgid ""
|
||||
"<search> [--{filter,language} <value>]\n"
|
||||
"\n"
|
||||
" Searches google.com for the given string. As many results as can fit\n"
|
||||
" are included. --language accepts a language abbreviation; --filter\n"
|
||||
" accepts a filtering level ('active', 'moderate', 'off').\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<recherche> [--filtre <valeur>] [--language <valeur>]\n"
|
||||
"\n"
|
||||
"Rercherche la chaîne donnée sur Google. Autant de résultats que possible sont donnés. --language accepte une abbréviation de langue ; --filter accepte un niveau de filtrage ('active', 'moderate', 'off')."
|
||||
|
||||
#: plugin.py:204
|
||||
msgid ""
|
||||
"<url>\n"
|
||||
"\n"
|
||||
" Returns a link to the cached version of <url> if it is available.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<url>\n"
|
||||
"\n"
|
||||
"Retourne un lien vers la version en cache de l'<url>, si elle est disponible."
|
||||
|
||||
#: plugin.py:215
|
||||
msgid "Google seems to have no cache for that site."
|
||||
msgstr "Google semble ne pas avoir de cache pour ce site."
|
||||
|
||||
#: plugin.py:220
|
||||
msgid ""
|
||||
"<search string> <search string> [<search string> ...]\n"
|
||||
"\n"
|
||||
" Returns the results of each search, in order, from greatest number\n"
|
||||
" of results to least.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<chaîne 1> <chaîne 2> [<chaîne 3> ...]\n"
|
||||
"\n"
|
||||
"Retourne les résultats de chaque recherche, dans l'ordre, par ordre croissant du nombre de résultats."
|
||||
|
||||
#: plugin.py:244
|
||||
msgid ""
|
||||
"<from-language> [to] <to-language> <text>\n"
|
||||
"\n"
|
||||
" Returns <text> translated from <from-language> into <to-language>.\n"
|
||||
" Beware that translating to or from languages that use multi-byte\n"
|
||||
" characters may result in some very odd results.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<langue de départ> [to] <langue finale> <texte>\n"
|
||||
"\n"
|
||||
|
||||
#: plugin.py:263
|
||||
msgid "from language"
|
||||
msgstr "de la langue"
|
||||
|
||||
#: plugin.py:264
|
||||
#: plugin.py:273
|
||||
msgid "Valid languages are: %L"
|
||||
msgstr "Les langues valides sont : %L"
|
||||
|
||||
#: plugin.py:272
|
||||
msgid "to language"
|
||||
msgstr "vers la langue"
|
||||
|
||||
#: plugin.py:289
|
||||
msgid "^google\\s+(.*)$"
|
||||
msgstr "^google\\s+(.*)$"
|
||||
|
||||
#: plugin.py:311
|
||||
msgid ""
|
||||
"<expression>\n"
|
||||
"\n"
|
||||
" Uses Google's calculator to calculate the value of <expression>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<expression>\n"
|
||||
"\n"
|
||||
"Utilise la calculatrice Google pour calculer la valeur de l'<expression>."
|
||||
|
||||
#: plugin.py:325
|
||||
msgid "Google's calculator didn't come up with anything."
|
||||
msgstr "La calculatrice Google ne donne aucun résultat."
|
||||
|
||||
#: plugin.py:331
|
||||
msgid ""
|
||||
"<phone number>\n"
|
||||
"\n"
|
||||
" Looks <phone number> up on Google.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<numéro de téléphone>\n"
|
||||
"\n"
|
||||
"Recherche le <numéro de téléphone> sur Google."
|
||||
|
||||
#: plugin.py:345
|
||||
msgid "Google's phonebook didn't come up with anything."
|
||||
msgstr "L'annuaire téléphonique de Google ne donne aucun résultat."
|
||||
|
206
plugins/Google/messages.pot
Normal file
206
plugins/Google/messages.pot
Normal file
@ -0,0 +1,206 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-17 14:50+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: config.py:39
|
||||
msgid ""
|
||||
"The Google plugin has the functionality to watch for URLs\n"
|
||||
" that match a specific pattern. (We call this a snarfer)\n"
|
||||
" When supybot sees such a URL, it will parse the web page\n"
|
||||
" for information and reply with the results."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:43
|
||||
msgid "Do you want the Google search snarfer enabled by default?"
|
||||
msgstr ""
|
||||
|
||||
#: config.py:88
|
||||
#, docstring
|
||||
msgid "Value must be 1 <= n <= 8"
|
||||
msgstr ""
|
||||
|
||||
#: config.py:99
|
||||
msgid ""
|
||||
"Determines the URL that will be sent to Google for\n"
|
||||
" the Referer field of the search requests. If this value is empty, a\n"
|
||||
" Referer will be generated in the following format:\n"
|
||||
" http://$server/$botName"
|
||||
msgstr ""
|
||||
|
||||
#: config.py:104
|
||||
msgid ""
|
||||
"Determines whether the search snarfer is\n"
|
||||
" enabled. If so, messages (even unaddressed ones) beginning with the word\n"
|
||||
" 'google' will result in the first URL Google returns being sent to the\n"
|
||||
" channel."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:109
|
||||
msgid ""
|
||||
"Determines whether the word 'google' in the\n"
|
||||
" bot's output will be made colorful (like Google's logo)."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:112
|
||||
msgid "Determines whether results are bolded."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:114
|
||||
msgid ""
|
||||
"Determines the maximum number of results returned\n"
|
||||
" from the google command."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:117
|
||||
msgid ""
|
||||
"Determines what default language is used in\n"
|
||||
" searches. If left empty, no specific language will be requested."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:117
|
||||
msgid "en"
|
||||
msgstr ""
|
||||
|
||||
#: config.py:120
|
||||
msgid ""
|
||||
"Determines what level of search filtering to use\n"
|
||||
" by default. 'active' - most filtering, 'moderate' - default filtering,\n"
|
||||
" 'off' - no filtering"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:101
|
||||
#, docstring
|
||||
msgid ""
|
||||
"Perform a search using Google's AJAX API.\n"
|
||||
" search(\"search phrase\", options={})\n"
|
||||
"\n"
|
||||
" Valid options are:\n"
|
||||
" smallsearch - True/False (Default: False)\n"
|
||||
" filter - {active,moderate,off} (Default: \"moderate\")\n"
|
||||
" language - Restrict search to documents in the given language\n"
|
||||
" (Default: \"lang_en\")\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:141 plugin.py:192
|
||||
msgid "We broke The Google!"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:161
|
||||
msgid "No matches found."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:167
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<search>\n"
|
||||
"\n"
|
||||
" Does a google search, but only returns the first result.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:176
|
||||
msgid "Google found nothing."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:181
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<search> [--{filter,language} <value>]\n"
|
||||
"\n"
|
||||
" Searches google.com for the given string. As many results as can fit\n"
|
||||
" are included. --language accepts a language abbreviation; --filter\n"
|
||||
" accepts a filtering level ('active', 'moderate', 'off').\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:204
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<url>\n"
|
||||
"\n"
|
||||
" Returns a link to the cached version of <url> if it is available.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:215
|
||||
msgid "Google seems to have no cache for that site."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:220
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<search string> <search string> [<search string> ...]\n"
|
||||
"\n"
|
||||
" Returns the results of each search, in order, from greatest number\n"
|
||||
" of results to least.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:244
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<from-language> [to] <to-language> <text>\n"
|
||||
"\n"
|
||||
" Returns <text> translated from <from-language> into <to-language>.\n"
|
||||
" Beware that translating to or from languages that use multi-byte\n"
|
||||
" characters may result in some very odd results.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:263
|
||||
msgid "from language"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:264 plugin.py:273
|
||||
msgid "Valid languages are: %L"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:272
|
||||
msgid "to language"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:289
|
||||
#, docstring
|
||||
msgid "^google\\s+(.*)$"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:311
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<expression>\n"
|
||||
"\n"
|
||||
" Uses Google's calculator to calculate the value of <expression>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:325
|
||||
msgid "Google's calculator didn't come up with anything."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:331
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<phone number>\n"
|
||||
"\n"
|
||||
" Looks <phone number> up on Google.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:345
|
||||
msgid "Google's phonebook didn't come up with anything."
|
||||
msgstr ""
|
||||
|
@ -41,6 +41,8 @@ from supybot.commands import *
|
||||
import supybot.ircmsgs as ircmsgs
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Google')
|
||||
|
||||
simplejson = None
|
||||
|
||||
@ -94,6 +96,7 @@ class Google(callbacks.PluginRegexp):
|
||||
return msg
|
||||
|
||||
_gsearchUrl = 'http://ajax.googleapis.com/ajax/services/search/web'
|
||||
@internationalizeDocstring
|
||||
def search(self, query, channel, options={}):
|
||||
"""Perform a search using Google's AJAX API.
|
||||
search("search phrase", options={})
|
||||
@ -135,7 +138,7 @@ class Google(callbacks.PluginRegexp):
|
||||
json = simplejson.load(fd)
|
||||
fd.close()
|
||||
if json['responseStatus'] != 200:
|
||||
raise callbacks.Error, 'We broke The Google!'
|
||||
raise callbacks.Error, _('We broke The Google!')
|
||||
return json
|
||||
|
||||
def formatData(self, data, bold=True, max=0):
|
||||
@ -155,10 +158,11 @@ class Google(callbacks.PluginRegexp):
|
||||
else:
|
||||
results.append(url)
|
||||
if not results:
|
||||
return format('No matches found.')
|
||||
return format(_('No matches found.'))
|
||||
else:
|
||||
return format('; '.join(results))
|
||||
|
||||
@internationalizeDocstring
|
||||
def lucky(self, irc, msg, args, text):
|
||||
"""<search>
|
||||
|
||||
@ -169,9 +173,10 @@ class Google(callbacks.PluginRegexp):
|
||||
url = data['responseData']['results'][0]['unescapedUrl']
|
||||
irc.reply(url.encode('utf-8'))
|
||||
else:
|
||||
irc.reply('Google found nothing.')
|
||||
irc.reply(_('Google found nothing.'))
|
||||
lucky = wrap(lucky, ['text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def google(self, irc, msg, args, optlist, text):
|
||||
"""<search> [--{filter,language} <value>]
|
||||
|
||||
@ -184,7 +189,7 @@ class Google(callbacks.PluginRegexp):
|
||||
irc.errorInvalid('language')
|
||||
data = self.search(text, msg.args[0], dict(optlist))
|
||||
if data['responseStatus'] != 200:
|
||||
irc.reply('We broke The Google!')
|
||||
irc.reply(_('We broke The Google!'))
|
||||
return
|
||||
bold = self.registryValue('bold', msg.args[0])
|
||||
max = self.registryValue('maximumResults', msg.args[0])
|
||||
@ -194,6 +199,7 @@ class Google(callbacks.PluginRegexp):
|
||||
'filter':''}),
|
||||
'text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def cache(self, irc, msg, args, url):
|
||||
"""<url>
|
||||
|
||||
@ -206,9 +212,10 @@ class Google(callbacks.PluginRegexp):
|
||||
url = m['cacheUrl'].encode('utf-8')
|
||||
irc.reply(url)
|
||||
return
|
||||
irc.error('Google seems to have no cache for that site.')
|
||||
irc.error(_('Google seems to have no cache for that site.'))
|
||||
cache = wrap(cache, ['url'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def fight(self, irc, msg, args):
|
||||
"""<search string> <search string> [<search string> ...]
|
||||
|
||||
@ -232,6 +239,7 @@ class Google(callbacks.PluginRegexp):
|
||||
irc.reply(s)
|
||||
|
||||
_gtranslateUrl='http://ajax.googleapis.com/ajax/services/language/translate'
|
||||
@internationalizeDocstring
|
||||
def translate(self, irc, msg, args, fromLang, toLang, text):
|
||||
"""<from-language> [to] <to-language> <text>
|
||||
|
||||
@ -252,8 +260,8 @@ class Google(callbacks.PluginRegexp):
|
||||
fromLang = lang.transLangs[fromLang.capitalize()]
|
||||
elif lang.normalize('lang_'+fromLang)[5:] \
|
||||
not in lang.transLangs.values():
|
||||
irc.errorInvalid('from language', fromLang,
|
||||
format('Valid languages are: %L',
|
||||
irc.errorInvalid(_('from language'), fromLang,
|
||||
format(_('Valid languages are: %L'),
|
||||
lang.transLangs.keys()))
|
||||
else:
|
||||
fromLang = lang.normalize('lang_'+fromLang)[5:]
|
||||
@ -261,8 +269,8 @@ class Google(callbacks.PluginRegexp):
|
||||
toLang = lang.transLangs[toLang.capitalize()]
|
||||
elif lang.normalize('lang_'+toLang)[5:] \
|
||||
not in lang.transLangs.values():
|
||||
irc.errorInvalid('to language', toLang,
|
||||
format('Valid languages are: %L',
|
||||
irc.errorInvalid(_('to language'), toLang,
|
||||
format(_('Valid languages are: %L'),
|
||||
lang.transLangs.keys()))
|
||||
else:
|
||||
toLang = lang.normalize('lang_'+toLang)[5:]
|
||||
@ -298,6 +306,7 @@ class Google(callbacks.PluginRegexp):
|
||||
_calcSupRe = re.compile(r'<sup>(.*?)</sup>', re.I)
|
||||
_calcFontRe = re.compile(r'<font size=-2>(.*?)</font>')
|
||||
_calcTimesRe = re.compile(r'&(?:times|#215);')
|
||||
@internationalizeDocstring
|
||||
def calc(self, irc, msg, args, expr):
|
||||
"""<expression>
|
||||
|
||||
@ -313,10 +322,11 @@ class Google(callbacks.PluginRegexp):
|
||||
s = self._calcTimesRe.sub(r'*', s)
|
||||
irc.reply(s)
|
||||
else:
|
||||
irc.reply('Google\'s calculator didn\'t come up with anything.')
|
||||
irc.reply(_('Google\'s calculator didn\'t come up with anything.'))
|
||||
calc = wrap(calc, ['text'])
|
||||
|
||||
_phoneRe = re.compile(r'Phonebook.*?<font size=-1>(.*?)<a href')
|
||||
@internationalizeDocstring
|
||||
def phonebook(self, irc, msg, args, phonenumber):
|
||||
"""<phone number>
|
||||
|
||||
@ -332,7 +342,7 @@ class Google(callbacks.PluginRegexp):
|
||||
s = utils.web.htmlToText(s)
|
||||
irc.reply(s)
|
||||
else:
|
||||
irc.reply('Google\'s phonebook didn\'t come up with anything.')
|
||||
irc.reply(_('Google\'s phonebook didn\'t come up with anything.'))
|
||||
phonebook = wrap(phonebook, ['text'])
|
||||
|
||||
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Herald')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
@ -41,31 +43,31 @@ def configure(advanced):
|
||||
|
||||
Herald = conf.registerPlugin('Herald')
|
||||
conf.registerChannelValue(Herald, 'heralding',
|
||||
registry.Boolean(True, """Determines whether messages will be sent to the
|
||||
registry.Boolean(True, _("""Determines whether messages will be sent to the
|
||||
channel when a recognized user joins; basically enables or disables the
|
||||
plugin."""))
|
||||
plugin.""")))
|
||||
conf.registerGlobalValue(Herald, 'requireCapability',
|
||||
registry.String('', """Determines what capability (if any) is required to
|
||||
add/change/remove the herald of another user."""))
|
||||
registry.String('', _("""Determines what capability (if any) is required to
|
||||
add/change/remove the herald of another user.""")))
|
||||
conf.registerChannelValue(Herald, 'throttle',
|
||||
registry.PositiveInteger(600, """Determines the minimum number of seconds
|
||||
between heralds."""))
|
||||
registry.PositiveInteger(600, _("""Determines the minimum number of seconds
|
||||
between heralds.""")))
|
||||
conf.registerChannelValue(Herald.throttle, 'afterPart',
|
||||
registry.NonNegativeInteger(0, """Determines the minimum number of seconds
|
||||
registry.NonNegativeInteger(0, _("""Determines the minimum number of seconds
|
||||
after parting that the bot will not herald the person when he or she
|
||||
rejoins."""))
|
||||
rejoins.""")))
|
||||
conf.registerChannelValue(Herald.throttle, 'afterSplit',
|
||||
registry.NonNegativeInteger(60, """Determines the minimum number of seconds
|
||||
after a netsplit that the bot will not herald the users that split."""))
|
||||
registry.NonNegativeInteger(60, _("""Determines the minimum number of seconds
|
||||
after a netsplit that the bot will not herald the users that split.""")))
|
||||
conf.registerChannelValue(Herald, 'default',
|
||||
registry.String('', """Sets the default herald to use. If a user has a
|
||||
registry.String('', _("""Sets the default herald to use. If a user has a
|
||||
personal herald specified, that will be used instead. If set to the empty
|
||||
string, the default herald will be disabled."""))
|
||||
string, the default herald will be disabled.""")))
|
||||
conf.registerChannelValue(Herald.default, 'notice',
|
||||
registry.Boolean(True, """Determines whether the default herald will be
|
||||
sent as a NOTICE instead of a PRIVMSG."""))
|
||||
registry.Boolean(True, _("""Determines whether the default herald will be
|
||||
sent as a NOTICE instead of a PRIVMSG.""")))
|
||||
conf.registerChannelValue(Herald.default, 'public',
|
||||
registry.Boolean(False, """Determines whether the default herald will be
|
||||
sent publicly."""))
|
||||
registry.Boolean(False, _("""Determines whether the default herald will be
|
||||
sent publicly.""")))
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
||||
|
148
plugins/Herald/locale/fr.po
Normal file
148
plugins/Herald/locale/fr.po
Normal file
@ -0,0 +1,148 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-17 15:21+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: config.py:46
|
||||
msgid ""
|
||||
"Determines whether messages will be sent to the\n"
|
||||
" channel when a recognized user joins; basically enables or disables the\n"
|
||||
" plugin."
|
||||
msgstr "Détermine si les messages seront envoyés sur le canal lorsqu'un utilisateur reconnu arrive ; active ou désactive basiquement le plugin."
|
||||
|
||||
#: config.py:50
|
||||
msgid ""
|
||||
"Determines what capability (if any) is required to\n"
|
||||
" add/change/remove the herald of another user."
|
||||
msgstr "Détermine quelle permission (s'il en est une) est requise pour ajouter/changer/supprimer le message d'annonce d'un autre utilisateur."
|
||||
|
||||
#: config.py:53
|
||||
msgid ""
|
||||
"Determines the minimum number of seconds\n"
|
||||
" between heralds."
|
||||
msgstr "Détermine le nombre minimum de secondes entre deux annonces."
|
||||
|
||||
#: config.py:56
|
||||
msgid ""
|
||||
"Determines the minimum number of seconds\n"
|
||||
" after parting that the bot will not herald the person when he or she\n"
|
||||
" rejoins."
|
||||
msgstr "Détermine le nombre minimum de secondes après qu'un utilisateur soit parti pour que le bot puisse l'annoncer à nouveau quand il revient."
|
||||
|
||||
#: config.py:60
|
||||
msgid ""
|
||||
"Determines the minimum number of seconds\n"
|
||||
" after a netsplit that the bot will not herald the users that split."
|
||||
msgstr "Détermine le nombre minimum de secondes après un netsplit durant lequel le bot n'annoncera pas les utilisateurs qui ont splitté."
|
||||
|
||||
#: config.py:63
|
||||
msgid ""
|
||||
"Sets the default herald to use. If a user has a\n"
|
||||
" personal herald specified, that will be used instead. If set to the empty\n"
|
||||
" string, the default herald will be disabled."
|
||||
msgstr "Définit le message d'annonce par défaut à utiliser. Si un utilisateur a un message d'annonce personnel spécifié, il peut être utilisé à la place. Si définit à une chaîne vide, le message d'annonce sera désactivé."
|
||||
|
||||
#: config.py:67
|
||||
msgid ""
|
||||
"Determines whether the default herald will be\n"
|
||||
" sent as a NOTICE instead of a PRIVMSG."
|
||||
msgstr "Détermine si le message d'annonce sera envoyé en NOTICE plutôt qu'en PRIVMSG."
|
||||
|
||||
#: config.py:70
|
||||
msgid ""
|
||||
"Determines whether the default herald will be\n"
|
||||
" sent publicly."
|
||||
msgstr "Détermine si le message d'annonce sera envoyé publiquement."
|
||||
|
||||
#: plugin.py:143
|
||||
msgid ""
|
||||
"[<channel>] [--remove|<msg>]\n"
|
||||
"\n"
|
||||
" If <msg> is given, sets the default herald to <msg>. A <msg> of \"\"\n"
|
||||
" will remove the default herald. If <msg> is not given, returns the\n"
|
||||
" current default herald. <channel> is only necessary if the message\n"
|
||||
" isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [--remove|<message>]\n"
|
||||
"\n"
|
||||
"Si le <message> est donné, définit le message d'annonce par défaut pour être le <message>. Un <message> de la forme \"\" supprimera le message d'annonce par défaut. Si le <message> n'est pas donné, retourne le message d'annonce par défaut actuel. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:162
|
||||
msgid "I do not have a default herald set for %s."
|
||||
msgstr "Je n'ai pas de message d'annonce par défaut pour %s."
|
||||
|
||||
#: plugin.py:170
|
||||
msgid ""
|
||||
"[<channel>] [<user|nick>]\n"
|
||||
"\n"
|
||||
" Returns the current herald message for <user> (or the user\n"
|
||||
" <nick|hostmask> is currently identified or recognized as). If <user>\n"
|
||||
" is not given, defaults to the user giving the command. <channel>\n"
|
||||
" is only necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <utilisateur|nick>]\n"
|
||||
"\n"
|
||||
"Retourne le message d'annonce courant pour l'<utilisateur> (ou l'utilisateur désigné par le <nick>). Si l'<utilisateur> n'est pas donné, cela vaut par défaut l'utilisateur donnant la commande. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:181
|
||||
msgid "I have no herald for %s."
|
||||
msgstr "Je n'ai pas de message d'annonce pour %s."
|
||||
|
||||
#: plugin.py:201
|
||||
msgid ""
|
||||
"[<channel>] <user|nick> <msg>\n"
|
||||
"\n"
|
||||
" Sets the herald message for <user> (or the user <nick|hostmask> is\n"
|
||||
" currently identified or recognized as) to <msg>. <channel> is only\n"
|
||||
" necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <utilisateur|nick> <message>\n"
|
||||
"\n"
|
||||
"Définit le <message> d'annonce de l'<utilisateur> (ou la personne désignée par <nick>). <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:214
|
||||
msgid ""
|
||||
"[<channel>] [<user|nick>]\n"
|
||||
"\n"
|
||||
" Removes the herald message set for <user>, or the user\n"
|
||||
" <nick|hostmask> is currently identified or recognized as. If <user>\n"
|
||||
" is not given, defaults to the user giving the command.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the channel\n"
|
||||
" itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<utilisateur|nick>]\n"
|
||||
"\n"
|
||||
"Supprime le message d'annonce de l'<utilisateur> (ou de l'utilisateur désigné par le <nick>). <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:227
|
||||
msgid "I have no herald for that user."
|
||||
msgstr "Je n'ai pas de message d'annonce pour cet utilisateur."
|
||||
|
||||
#: plugin.py:232
|
||||
msgid ""
|
||||
"[<channel>] [<user|nick>] <regexp>\n"
|
||||
"\n"
|
||||
" Changes the herald message for <user>, or the user <nick|hostmask> is\n"
|
||||
" currently identified or recognized as, according to <regexp>. If\n"
|
||||
" <user> is not given, defaults to the calling user. <channel> is only\n"
|
||||
" necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<utilisateur|nick>] [<expression régulière>]\n"
|
||||
"\n"
|
||||
"Change le message d'annonce de l'<utilisateur> (ou de l'utilisateur désigné par le <nick>), en fonction de l'<expression régulière>. Si l'<utilisateur> n'est pas donné, cea correspond par défaut de l'utilisateur appelant la commande. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
140
plugins/Herald/messages.pot
Normal file
140
plugins/Herald/messages.pot
Normal file
@ -0,0 +1,140 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-17 15:21+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: config.py:46
|
||||
msgid ""
|
||||
"Determines whether messages will be sent to the\n"
|
||||
" channel when a recognized user joins; basically enables or disables the\n"
|
||||
" plugin."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:50
|
||||
msgid ""
|
||||
"Determines what capability (if any) is required to\n"
|
||||
" add/change/remove the herald of another user."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:53
|
||||
msgid ""
|
||||
"Determines the minimum number of seconds\n"
|
||||
" between heralds."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:56
|
||||
msgid ""
|
||||
"Determines the minimum number of seconds\n"
|
||||
" after parting that the bot will not herald the person when he or she\n"
|
||||
" rejoins."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:60
|
||||
msgid ""
|
||||
"Determines the minimum number of seconds\n"
|
||||
" after a netsplit that the bot will not herald the users that split."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:63
|
||||
msgid ""
|
||||
"Sets the default herald to use. If a user has a\n"
|
||||
" personal herald specified, that will be used instead. If set to the empty\n"
|
||||
" string, the default herald will be disabled."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:67
|
||||
msgid ""
|
||||
"Determines whether the default herald will be\n"
|
||||
" sent as a NOTICE instead of a PRIVMSG."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:70
|
||||
msgid ""
|
||||
"Determines whether the default herald will be\n"
|
||||
" sent publicly."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:143
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [--remove|<msg>]\n"
|
||||
"\n"
|
||||
" If <msg> is given, sets the default herald to <msg>. A <msg> of \"\"\n"
|
||||
" will remove the default herald. If <msg> is not given, returns the\n"
|
||||
" current default herald. <channel> is only necessary if the message\n"
|
||||
" isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:162
|
||||
msgid "I do not have a default herald set for %s."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:170
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<user|nick>]\n"
|
||||
"\n"
|
||||
" Returns the current herald message for <user> (or the user\n"
|
||||
" <nick|hostmask> is currently identified or recognized as). If <user>\n"
|
||||
" is not given, defaults to the user giving the command. <channel>\n"
|
||||
" is only necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:181
|
||||
msgid "I have no herald for %s."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:201
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <user|nick> <msg>\n"
|
||||
"\n"
|
||||
" Sets the herald message for <user> (or the user <nick|hostmask> is\n"
|
||||
" currently identified or recognized as) to <msg>. <channel> is only\n"
|
||||
" necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:214
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<user|nick>]\n"
|
||||
"\n"
|
||||
" Removes the herald message set for <user>, or the user\n"
|
||||
" <nick|hostmask> is currently identified or recognized as. If <user>\n"
|
||||
" is not given, defaults to the user giving the command.\n"
|
||||
" <channel> is only necessary if the message isn't sent in the channel\n"
|
||||
" itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:227
|
||||
msgid "I have no herald for that user."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:232
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<user|nick>] <regexp>\n"
|
||||
"\n"
|
||||
" Changes the herald message for <user>, or the user <nick|hostmask> is\n"
|
||||
" currently identified or recognized as, according to <regexp>. If\n"
|
||||
" <user> is not given, defaults to the calling user. <channel> is only\n"
|
||||
" necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
@ -40,6 +40,8 @@ import supybot.plugins as plugins
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.utils.structures import TimeoutQueue
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Herald')
|
||||
|
||||
filename = conf.supybot.directories.data.dirize('Herald.db')
|
||||
|
||||
@ -136,6 +138,7 @@ class Herald(callbacks.Plugin):
|
||||
raise KeyError
|
||||
return id
|
||||
|
||||
@internationalizeDocstring
|
||||
def default(self, irc, msg, args, channel, optlist, text):
|
||||
"""[<channel>] [--remove|<msg>]
|
||||
|
||||
@ -156,12 +159,13 @@ class Herald(callbacks.Plugin):
|
||||
irc.replySuccess()
|
||||
else:
|
||||
resp = self.registryValue('default', channel) or \
|
||||
'I do not have a default herald set for %s.' % channel
|
||||
_('I do not have a default herald set for %s.') % channel
|
||||
irc.reply(resp)
|
||||
default = wrap(default, ['channel',
|
||||
getopts({'remove': ''}),
|
||||
additional('text')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def get(self, irc, msg, args, channel, user):
|
||||
"""[<channel>] [<user|nick>]
|
||||
|
||||
@ -174,7 +178,7 @@ class Herald(callbacks.Plugin):
|
||||
herald = self.db[channel, user.id]
|
||||
irc.reply(herald)
|
||||
except KeyError:
|
||||
irc.error('I have no herald for %s.' % user.name)
|
||||
irc.error(_('I have no herald for %s.') % user.name)
|
||||
get = wrap(get, ['channel', first('otherUser', 'user')])
|
||||
|
||||
def _preCheck(self, irc, msg, user):
|
||||
@ -192,6 +196,7 @@ class Herald(callbacks.Plugin):
|
||||
# I chose not to make <user|nick> optional in this command because
|
||||
# if it's not a valid username (e.g., if the user tyops and misspells a
|
||||
# username), it may be nice not to clobber the user's herald.
|
||||
@internationalizeDocstring
|
||||
def add(self, irc, msg, args, channel, user, herald):
|
||||
"""[<channel>] <user|nick> <msg>
|
||||
|
||||
@ -204,6 +209,7 @@ class Herald(callbacks.Plugin):
|
||||
irc.replySuccess()
|
||||
add = wrap(add, ['channel', 'otherUser', 'text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def remove(self, irc, msg, args, channel, user):
|
||||
"""[<channel>] [<user|nick>]
|
||||
|
||||
@ -218,9 +224,10 @@ class Herald(callbacks.Plugin):
|
||||
del self.db[channel, user.id]
|
||||
irc.replySuccess()
|
||||
except KeyError:
|
||||
irc.error('I have no herald for that user.')
|
||||
irc.error(_('I have no herald for that user.'))
|
||||
remove = wrap(remove, ['channel', first('otherUser', 'user')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def change(self, irc, msg, args, channel, user, changer):
|
||||
"""[<channel>] [<user|nick>] <regexp>
|
||||
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Internet')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
@ -42,7 +44,7 @@ def configure(advanced):
|
||||
Internet = conf.registerPlugin('Internet')
|
||||
# This is where your configuration variables (if any) should go. For example:
|
||||
# conf.registerGlobalValue(Internet, 'someConfigVariableName',
|
||||
# registry.Boolean(False, """Help for someConfigVariableName."""))
|
||||
# registry.Boolean(False, _("""Help for someConfigVariableName.""")))
|
||||
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
||||
|
90
plugins/Internet/locale/fr.po
Normal file
90
plugins/Internet/locale/fr.po
Normal file
@ -0,0 +1,90 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-17 15:20+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: plugin.py:43
|
||||
msgid "Add the help for \"@help Internet\" here."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:47
|
||||
msgid ""
|
||||
"<host|ip>\n"
|
||||
"\n"
|
||||
" Returns the ip of <host> or the reverse DNS hostname of <ip>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<hôte|ip>\n"
|
||||
"\n"
|
||||
"Retourne l'ip de l'<hôte>, ou le reverse DNS de l'<ip>"
|
||||
|
||||
#: plugin.py:54
|
||||
#: plugin.py:61
|
||||
#: plugin.py:65
|
||||
msgid "Host not found."
|
||||
msgstr "Hôte non trouvé."
|
||||
|
||||
#: plugin.py:77
|
||||
msgid ""
|
||||
"<domain>\n"
|
||||
"\n"
|
||||
" Returns WHOIS information on the registration of <domain>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<domaine>\n"
|
||||
"\n"
|
||||
"Retourne les informations du WHOIS sur le <domaine>."
|
||||
|
||||
#: plugin.py:83
|
||||
msgid "domain"
|
||||
msgstr "domaine"
|
||||
|
||||
#: plugin.py:112
|
||||
msgid "updated %s"
|
||||
msgstr "mis à jour le %s"
|
||||
|
||||
#: plugin.py:115
|
||||
msgid "registered %s"
|
||||
msgstr "enregistré le %s"
|
||||
|
||||
#: plugin.py:118
|
||||
msgid "expires %s"
|
||||
msgstr "expire le %s"
|
||||
|
||||
#: plugin.py:138
|
||||
msgid " <registered at %s>"
|
||||
msgstr " <enregistré le %s>"
|
||||
|
||||
#: plugin.py:140
|
||||
msgid " <registered by %s>"
|
||||
msgstr " <enregistré par %s>"
|
||||
|
||||
#: plugin.py:145
|
||||
msgid "%s%s is %L."
|
||||
msgstr "%s%s est %L"
|
||||
|
||||
#: plugin.py:148
|
||||
msgid "I couldn't find such a domain."
|
||||
msgstr "Je ne peux trouver ce domaine."
|
||||
|
||||
#: plugin.py:153
|
||||
msgid ""
|
||||
"<ip>\n"
|
||||
"\n"
|
||||
" Returns the hexadecimal IP for that IP.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<ip>\n"
|
||||
"\n"
|
||||
"Retourne l'IP hexadécimale pour cette IP."
|
||||
|
85
plugins/Internet/messages.pot
Normal file
85
plugins/Internet/messages.pot
Normal file
@ -0,0 +1,85 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-17 15:20+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: plugin.py:43
|
||||
#, docstring
|
||||
msgid "Add the help for \"@help Internet\" here."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:47
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<host|ip>\n"
|
||||
"\n"
|
||||
" Returns the ip of <host> or the reverse DNS hostname of <ip>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:54 plugin.py:61 plugin.py:65
|
||||
msgid "Host not found."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:77
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<domain>\n"
|
||||
"\n"
|
||||
" Returns WHOIS information on the registration of <domain>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:83
|
||||
msgid "domain"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:112
|
||||
msgid "updated %s"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:115
|
||||
msgid "registered %s"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:118
|
||||
msgid "expires %s"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:138
|
||||
msgid " <registered at %s>"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:140
|
||||
msgid " <registered by %s>"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:145
|
||||
msgid "%s%s is %L."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:148
|
||||
msgid "I couldn't find such a domain."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:153
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<ip>\n"
|
||||
"\n"
|
||||
" Returns the hexadecimal IP for that IP.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
@ -35,11 +35,13 @@ import supybot.utils as utils
|
||||
from supybot.commands import *
|
||||
from supybot.utils.iter import any
|
||||
import supybot.callbacks as callbacks
|
||||
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Internet')
|
||||
|
||||
class Internet(callbacks.Plugin):
|
||||
"""Add the help for "@help Internet" here."""
|
||||
threaded = True
|
||||
@internationalizeDocstring
|
||||
def dns(self, irc, msg, args, host):
|
||||
"""<host|ip>
|
||||
|
||||
@ -48,18 +50,18 @@ class Internet(callbacks.Plugin):
|
||||
if utils.net.isIP(host):
|
||||
hostname = socket.getfqdn(host)
|
||||
if hostname == host:
|
||||
irc.reply('Host not found.')
|
||||
irc.reply(_('Host not found.'))
|
||||
else:
|
||||
irc.reply(hostname)
|
||||
else:
|
||||
try:
|
||||
ip = socket.gethostbyname(host)
|
||||
if ip == '64.94.110.11': # Verisign sucks!
|
||||
irc.reply('Host not found.')
|
||||
irc.reply(_('Host not found.'))
|
||||
else:
|
||||
irc.reply(ip)
|
||||
except socket.error:
|
||||
irc.reply('Host not found.')
|
||||
irc.reply(_('Host not found.'))
|
||||
dns = wrap(dns, ['something'])
|
||||
|
||||
_domain = ['Domain Name', 'Server Name', 'domain']
|
||||
@ -69,6 +71,7 @@ class Internet(callbacks.Plugin):
|
||||
_created = ['Created On', 'Domain Registration Date', 'Creation Date']
|
||||
_expires = ['Expiration Date', 'Domain Expiration Date']
|
||||
_status = ['Status', 'Domain Status', 'status']
|
||||
@internationalizeDocstring
|
||||
def whois(self, irc, msg, args, domain):
|
||||
"""<domain>
|
||||
|
||||
@ -76,7 +79,7 @@ class Internet(callbacks.Plugin):
|
||||
"""
|
||||
usertld = domain.split('.')[-1]
|
||||
if '.' not in domain:
|
||||
irc.errorInvalid('domain')
|
||||
irc.errorInvalid(_('domain'))
|
||||
return
|
||||
try:
|
||||
t = telnetlib.Telnet('%s.whois-servers.net' % usertld, 43)
|
||||
@ -105,13 +108,13 @@ class Internet(callbacks.Plugin):
|
||||
registrar = ':'.join(line.split(':')[1:]).strip()
|
||||
elif not updated and any(line.startswith, self._updated):
|
||||
s = ':'.join(line.split(':')[1:]).strip()
|
||||
updated = 'updated %s' % s
|
||||
updated = _('updated %s') % s
|
||||
elif not created and any(line.startswith, self._created):
|
||||
s = ':'.join(line.split(':')[1:]).strip()
|
||||
created = 'registered %s' % s
|
||||
created = _('registered %s') % s
|
||||
elif not expires and any(line.startswith, self._expires):
|
||||
s = ':'.join(line.split(':')[1:]).strip()
|
||||
expires = 'expires %s' % s
|
||||
expires = _('expires %s') % s
|
||||
elif not status and any(line.startswith, self._status):
|
||||
status = ':'.join(line.split(':')[1:]).strip().lower()
|
||||
if not status:
|
||||
@ -131,19 +134,20 @@ class Internet(callbacks.Plugin):
|
||||
if not line:
|
||||
continue
|
||||
if line.startswith('Email'):
|
||||
url = ' <registered at %s>' % line.split('@')[-1]
|
||||
url = _(' <registered at %s>') % line.split('@')[-1]
|
||||
elif line.startswith('Registrar Organization:'):
|
||||
url = ' <registered by %s>' % line.split(':')[1].strip()
|
||||
url = _(' <registered by %s>') % line.split(':')[1].strip()
|
||||
elif line == 'Not a valid ID pattern':
|
||||
url = ''
|
||||
if server and status:
|
||||
info = filter(None, [status, created, updated, expires])
|
||||
s = format('%s%s is %L.', server, url, info)
|
||||
s = format(_('%s%s is %L.'), server, url, info)
|
||||
irc.reply(s)
|
||||
else:
|
||||
irc.error('I couldn\'t find such a domain.')
|
||||
irc.error(_('I couldn\'t find such a domain.'))
|
||||
whois = wrap(whois, ['lowered'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def hexip(self, irc, msg, args, ip):
|
||||
"""<ip>
|
||||
|
||||
@ -156,7 +160,7 @@ class Internet(callbacks.Plugin):
|
||||
ret += '%02x' % i
|
||||
irc.reply(ret.upper())
|
||||
hexip = wrap(hexip, ['ip'])
|
||||
|
||||
Internet = internationalizeDocstring(Internet)
|
||||
|
||||
Class = Internet
|
||||
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Karma')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
@ -41,22 +43,22 @@ def configure(advanced):
|
||||
conf.registerPlugin('Karma')
|
||||
|
||||
conf.registerChannelValue(conf.supybot.plugins.Karma, 'simpleOutput',
|
||||
registry.Boolean(False, """Determines whether the bot will output shorter
|
||||
versions of the karma output when requesting a single thing's karma."""))
|
||||
registry.Boolean(False, _("""Determines whether the bot will output shorter
|
||||
versions of the karma output when requesting a single thing's karma.""")))
|
||||
conf.registerChannelValue(conf.supybot.plugins.Karma, 'response',
|
||||
registry.Boolean(False, """Determines whether the bot will reply with a
|
||||
success message when something's karma is increased or decreased."""))
|
||||
registry.Boolean(False, _("""Determines whether the bot will reply with a
|
||||
success message when something's karma is increased or decreased.""")))
|
||||
conf.registerChannelValue(conf.supybot.plugins.Karma, 'rankingDisplay',
|
||||
registry.Integer(3, """Determines how many highest/lowest karma things are
|
||||
shown when karma is called with no arguments."""))
|
||||
registry.Integer(3, _("""Determines how many highest/lowest karma things
|
||||
are shown when karma is called with no arguments.""")))
|
||||
conf.registerChannelValue(conf.supybot.plugins.Karma, 'mostDisplay',
|
||||
registry.Integer(25, """Determines how many karma things are shown when
|
||||
the most command is called.'"""))
|
||||
registry.Integer(25, _("""Determines how many karma things are shown when
|
||||
the most command is called.'""")))
|
||||
conf.registerChannelValue(conf.supybot.plugins.Karma, 'allowSelfRating',
|
||||
registry.Boolean(False, """Determines whether users can adjust the karma
|
||||
of their nick."""))
|
||||
registry.Boolean(False, _("""Determines whether users can adjust the karma
|
||||
of their nick.""")))
|
||||
conf.registerChannelValue(conf.supybot.plugins.Karma, 'allowUnaddressedKarma',
|
||||
registry.Boolean(False, """Determines whether the bot will
|
||||
increase/decrease karma without being addressed."""))
|
||||
registry.Boolean(False, _("""Determines whether the bot will
|
||||
increase/decrease karma without being addressed.""")))
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
||||
|
152
plugins/Karma/locale/fr.po
Normal file
152
plugins/Karma/locale/fr.po
Normal file
@ -0,0 +1,152 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-28 15:19+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: config.py:46
|
||||
msgid ""
|
||||
"Determines whether the bot will output shorter\n"
|
||||
" versions of the karma output when requesting a single thing's karma."
|
||||
msgstr "Détermine si le bot donnera comme sortie une version plus courte du karma lorsqu'on lui demandera un seul karma."
|
||||
|
||||
#: config.py:49
|
||||
msgid ""
|
||||
"Determines whether the bot will reply with a\n"
|
||||
" success message when something's karma is increased or decreased."
|
||||
msgstr "Détermine si le bot répondra avec un message de succès si un karma est augmenté ou diminué."
|
||||
|
||||
#: config.py:52
|
||||
msgid ""
|
||||
"Determines how many highest/lowest karma things\n"
|
||||
" are shown when karma is called with no arguments."
|
||||
msgstr "Détermine combien de plus haut/bas karmas sont affichés lorsque karma est appelé sans argument."
|
||||
|
||||
#: config.py:55
|
||||
msgid ""
|
||||
"Determines how many karma things are shown when\n"
|
||||
" the most command is called.'"
|
||||
msgstr "Détermine combien de karmas sont affichés lorsque la commande most est appelée."
|
||||
|
||||
#: config.py:58
|
||||
msgid ""
|
||||
"Determines whether users can adjust the karma\n"
|
||||
" of their nick."
|
||||
msgstr "Détermine si les utilisateurs peuvent ajuster le karma de leur nick."
|
||||
|
||||
#: config.py:61
|
||||
msgid ""
|
||||
"Determines whether the bot will\n"
|
||||
" increase/decrease karma without being addressed."
|
||||
msgstr "Détermine si le bot augmentera/diminuera le karma sans que l'on s'adresse à lui."
|
||||
|
||||
#: plugin.py:243
|
||||
#: plugin.py:251
|
||||
msgid "You're not allowed to adjust your own karma."
|
||||
msgstr "Vous n'êtes pas autorisé à modifier votre propre karma."
|
||||
|
||||
#: plugin.py:280
|
||||
msgid ""
|
||||
"[<channel>] [<thing> ...]\n"
|
||||
"\n"
|
||||
" Returns the karma of <thing>. If <thing> is not given, returns the top\n"
|
||||
" N karmas, where N is determined by the config variable\n"
|
||||
" supybot.plugins.Karma.rankingDisplay. If one <thing> is given, returns\n"
|
||||
" the details of its karma; if more than one <thing> is given, returns\n"
|
||||
" the total karma of each of the the things. <channel> is only necessary\n"
|
||||
" if the message isn't sent on the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<objet> ...]\n"
|
||||
"\n"
|
||||
"Retourne le karma de l'<objet>. Si l'<objet> n'est pas donné, retourne les trois premiers et derniers karmas. Si une <chose> est donnée, retourne les détails de son karma ; si plus d'une <chose> est donnée, retourne le karma total de chacune de ces choses. Le <canal> n'est nécessaire que si la commande n'est pas envoyée sur le canal lui-même."
|
||||
|
||||
#: plugin.py:293
|
||||
msgid "%s has neutral karma."
|
||||
msgstr "%s a un karma neutre."
|
||||
|
||||
#: plugin.py:300
|
||||
msgid "Karma for %q has been increased %n and decreased %n for a total karma of %s."
|
||||
msgstr "Le karma de %q a été augmenté %n fois et diminué %n fois, pour un karma total de %s."
|
||||
|
||||
#: plugin.py:302
|
||||
#: plugin.py:303
|
||||
msgid "time"
|
||||
msgstr "<empty>"
|
||||
|
||||
#: plugin.py:316
|
||||
msgid "I didn't know the karma for any of those things."
|
||||
msgstr "Je ne connais le karma d'aucune de ces choses."
|
||||
|
||||
#: plugin.py:326
|
||||
#: plugin.py:355
|
||||
msgid "I have no karma for this channel."
|
||||
msgstr "Je n'ai pas de karma pour ce canal."
|
||||
|
||||
#: plugin.py:331
|
||||
msgid " You (%s) are ranked %i out of %i."
|
||||
msgstr " Vous (%s) êtes #%i sur %i"
|
||||
|
||||
#: plugin.py:335
|
||||
msgid "Highest karma: %L. Lowest karma: %L.%s"
|
||||
msgstr "Plus haut karma : %L. Plus bas karma : %L.%s"
|
||||
|
||||
#: plugin.py:343
|
||||
msgid ""
|
||||
"[<channel>] {increased,decreased,active}\n"
|
||||
"\n"
|
||||
" Returns the most increased, the most decreased, or the most active\n"
|
||||
" (the sum of increased and decreased) karma things. <channel> is only\n"
|
||||
" necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] {increased,decreased,active}\n"
|
||||
"\n"
|
||||
"Retourne le plus augmenté (increased), le plus descendu (decreased), ou le plus actif (la somme des montées et descentes) des karmas. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:361
|
||||
msgid ""
|
||||
"[<channel>] <name>\n"
|
||||
"\n"
|
||||
" Resets the karma of <name> to 0.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <nom>\n"
|
||||
"\n"
|
||||
"Redéfinit le karma de <nom> à 0."
|
||||
|
||||
#: plugin.py:371
|
||||
msgid ""
|
||||
"[<channel>] <filename>\n"
|
||||
"\n"
|
||||
" Dumps the Karma database for <channel> to <filename> in the bot's\n"
|
||||
" data directory. <channel> is only necessary if the message isn't sent\n"
|
||||
" in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <nom de fichier>\n"
|
||||
"\n"
|
||||
"Exporte la base de données des Karma du <canal> dans le <nom de fichier> dans le répertoire de données du bot. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:383
|
||||
msgid ""
|
||||
"[<channel>] <filename>\n"
|
||||
"\n"
|
||||
" Loads the Karma database for <channel> from <filename> in the bot's\n"
|
||||
" data directory. <channel> is only necessary if the message isn't sent\n"
|
||||
" in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] <nom de fichier>\n"
|
||||
"\n"
|
||||
"Charge la base de données des Karma du <canal> du <nom de fichier> dans le répertoire de données du bot. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
141
plugins/Karma/messages.pot
Normal file
141
plugins/Karma/messages.pot
Normal file
@ -0,0 +1,141 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-28 15:19+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: config.py:46
|
||||
msgid ""
|
||||
"Determines whether the bot will output shorter\n"
|
||||
" versions of the karma output when requesting a single thing's karma."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:49
|
||||
msgid ""
|
||||
"Determines whether the bot will reply with a\n"
|
||||
" success message when something's karma is increased or decreased."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:52
|
||||
msgid ""
|
||||
"Determines how many highest/lowest karma things\n"
|
||||
" are shown when karma is called with no arguments."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:55
|
||||
msgid ""
|
||||
"Determines how many karma things are shown when\n"
|
||||
" the most command is called.'"
|
||||
msgstr ""
|
||||
|
||||
#: config.py:58
|
||||
msgid ""
|
||||
"Determines whether users can adjust the karma\n"
|
||||
" of their nick."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:61
|
||||
msgid ""
|
||||
"Determines whether the bot will\n"
|
||||
" increase/decrease karma without being addressed."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:243 plugin.py:251
|
||||
msgid "You're not allowed to adjust your own karma."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:280
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<thing> ...]\n"
|
||||
"\n"
|
||||
" Returns the karma of <thing>. If <thing> is not given, returns the top\n"
|
||||
" N karmas, where N is determined by the config variable\n"
|
||||
" supybot.plugins.Karma.rankingDisplay. If one <thing> is given, returns\n"
|
||||
" the details of its karma; if more than one <thing> is given, returns\n"
|
||||
" the total karma of each of the the things. <channel> is only necessary\n"
|
||||
" if the message isn't sent on the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:293
|
||||
msgid "%s has neutral karma."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:300
|
||||
msgid "Karma for %q has been increased %n and decreased %n for a total karma of %s."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:302 plugin.py:303
|
||||
msgid "time"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:316
|
||||
msgid "I didn't know the karma for any of those things."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:326 plugin.py:355
|
||||
msgid "I have no karma for this channel."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:331
|
||||
msgid " You (%s) are ranked %i out of %i."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:335
|
||||
msgid "Highest karma: %L. Lowest karma: %L.%s"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:343
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] {increased,decreased,active}\n"
|
||||
"\n"
|
||||
" Returns the most increased, the most decreased, or the most active\n"
|
||||
" (the sum of increased and decreased) karma things. <channel> is only\n"
|
||||
" necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:361
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <name>\n"
|
||||
"\n"
|
||||
" Resets the karma of <name> to 0.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:371
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <filename>\n"
|
||||
"\n"
|
||||
" Dumps the Karma database for <channel> to <filename> in the bot's\n"
|
||||
" data directory. <channel> is only necessary if the message isn't sent\n"
|
||||
" in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:383
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] <filename>\n"
|
||||
"\n"
|
||||
" Loads the Karma database for <channel> from <filename> in the bot's\n"
|
||||
" data directory. <channel> is only necessary if the message isn't sent\n"
|
||||
" in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
@ -38,6 +38,8 @@ import supybot.plugins as plugins
|
||||
import supybot.ircmsgs as ircmsgs
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Karma')
|
||||
|
||||
class SqliteKarmaDB(object):
|
||||
def __init__(self, filename):
|
||||
@ -238,7 +240,7 @@ class Karma(callbacks.Plugin):
|
||||
thing = thing[:-2]
|
||||
if ircutils.strEqual(thing, irc.msg.nick) and \
|
||||
not self.registryValue('allowSelfRating', channel):
|
||||
irc.error('You\'re not allowed to adjust your own karma.')
|
||||
irc.error(_('You\'re not allowed to adjust your own karma.'))
|
||||
elif thing:
|
||||
self.db.increment(channel, self._normalizeThing(thing))
|
||||
self._respond(irc, channel)
|
||||
@ -246,7 +248,7 @@ class Karma(callbacks.Plugin):
|
||||
thing = thing[:-2]
|
||||
if ircutils.strEqual(thing, irc.msg.nick) and \
|
||||
not self.registryValue('allowSelfRating', channel):
|
||||
irc.error('You\'re not allowed to adjust your own karma.')
|
||||
irc.error(_('You\'re not allowed to adjust your own karma.'))
|
||||
elif thing:
|
||||
self.db.decrement(channel, self._normalizeThing(thing))
|
||||
self._respond(irc, channel)
|
||||
@ -273,6 +275,7 @@ class Karma(callbacks.Plugin):
|
||||
if thing[-2:] in ('++', '--'):
|
||||
self._doKarma(irc, channel, thing)
|
||||
|
||||
@internationalizeDocstring
|
||||
def karma(self, irc, msg, args, channel, things):
|
||||
"""[<channel>] [<thing> ...]
|
||||
|
||||
@ -287,16 +290,17 @@ class Karma(callbacks.Plugin):
|
||||
name = things[0]
|
||||
t = self.db.get(channel, name)
|
||||
if t is None:
|
||||
irc.reply(format('%s has neutral karma.', name))
|
||||
irc.reply(format(_('%s has neutral karma.'), name))
|
||||
else:
|
||||
(added, subtracted) = t
|
||||
total = added - subtracted
|
||||
if self.registryValue('simpleOutput', channel):
|
||||
s = format('%s: %i', name, total)
|
||||
else:
|
||||
s = format('Karma for %q has been increased %n and '
|
||||
'decreased %n for a total karma of %s.',
|
||||
name, (added, 'time'), (subtracted, 'time'),
|
||||
s = format(_('Karma for %q has been increased %n and '
|
||||
'decreased %n for a total karma of %s.'),
|
||||
name, (added, _('time')),
|
||||
(subtracted, _('time')),
|
||||
total)
|
||||
irc.reply(s)
|
||||
elif len(things) > 1:
|
||||
@ -309,7 +313,8 @@ class Karma(callbacks.Plugin):
|
||||
s += neutral
|
||||
irc.reply(s + '.')
|
||||
else:
|
||||
irc.reply('I didn\'t know the karma for any of those things.')
|
||||
irc.reply(_('I didn\'t know the karma for any of those '
|
||||
'things.'))
|
||||
else: # No name was given. Return the top/bottom N karmas.
|
||||
limit = self.registryValue('rankingDisplay', channel)
|
||||
top = self.db.top(channel, limit)
|
||||
@ -318,21 +323,22 @@ class Karma(callbacks.Plugin):
|
||||
lowest = [format('%q (%s)', s, t)
|
||||
for (s, t) in self.db.bottom(channel, limit)]
|
||||
if not (highest and lowest):
|
||||
irc.error('I have no karma for this channel.')
|
||||
irc.error(_('I have no karma for this channel.'))
|
||||
return
|
||||
rank = self.db.rank(channel, msg.nick)
|
||||
if rank is not None:
|
||||
total = self.db.size(channel)
|
||||
rankS = format(' You (%s) are ranked %i out of %i.',
|
||||
rankS = format(_(' You (%s) are ranked %i out of %i.'),
|
||||
msg.nick, rank, total)
|
||||
else:
|
||||
rankS = ''
|
||||
s = format('Highest karma: %L. Lowest karma: %L.%s',
|
||||
s = format(_('Highest karma: %L. Lowest karma: %L.%s'),
|
||||
highest, lowest, rankS)
|
||||
irc.reply(s)
|
||||
karma = wrap(karma, ['channel', any('something')])
|
||||
|
||||
_mostAbbrev = utils.abbrev(['increased', 'decreased', 'active'])
|
||||
@internationalizeDocstring
|
||||
def most(self, irc, msg, args, channel, kind):
|
||||
"""[<channel>] {increased,decreased,active}
|
||||
|
||||
@ -346,10 +352,11 @@ class Karma(callbacks.Plugin):
|
||||
L = [format('%q: %i', name, i) for (name, i) in L]
|
||||
irc.reply(format('%L', L))
|
||||
else:
|
||||
irc.error('I have no karma for this channel.')
|
||||
irc.error(_('I have no karma for this channel.'))
|
||||
most = wrap(most, ['channel',
|
||||
('literal', ['increased', 'decreased', 'active'])])
|
||||
|
||||
@internationalizeDocstring
|
||||
def clear(self, irc, msg, args, channel, name):
|
||||
"""[<channel>] <name>
|
||||
|
||||
@ -359,6 +366,7 @@ class Karma(callbacks.Plugin):
|
||||
irc.replySuccess()
|
||||
clear = wrap(clear, [('checkChannelCapability', 'op'), 'text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def dump(self, irc, msg, args, channel, filename):
|
||||
"""[<channel>] <filename>
|
||||
|
||||
@ -370,6 +378,7 @@ class Karma(callbacks.Plugin):
|
||||
irc.replySuccess()
|
||||
dump = wrap(dump, [('checkCapability', 'owner'), 'channeldb', 'filename'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def load(self, irc, msg, args, channel, filename):
|
||||
"""[<channel>] <filename>
|
||||
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Lart')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
@ -42,10 +44,10 @@ def configure(advanced):
|
||||
Lart = conf.registerPlugin('Lart')
|
||||
# This is where your configuration variables (if any) should go. For example:
|
||||
# conf.registerGlobalValue(Lart, 'someConfigVariableName',
|
||||
# registry.Boolean(False, """Help for someConfigVariableName."""))
|
||||
# registry.Boolean(False, _("""Help for someConfigVariableName.""")))
|
||||
conf.registerChannelValue(Lart, 'showIds',
|
||||
registry.Boolean(False, """Determines whether the bot will show the ids of
|
||||
a lart when the lart is given."""))
|
||||
registry.Boolean(False, _("""Determines whether the bot will show the ids
|
||||
of a lart when the lart is given.""")))
|
||||
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
||||
|
54
plugins/Lart/locale/fr.po
Normal file
54
plugins/Lart/locale/fr.po
Normal file
@ -0,0 +1,54 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-17 15:21+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: config.py:49
|
||||
msgid ""
|
||||
"Determines whether the bot will show the ids\n"
|
||||
" of a lart when the lart is given."
|
||||
msgstr "Détermine si le bot affichera les idées d'un lart lorsqu'il est donné."
|
||||
|
||||
#: plugin.py:48
|
||||
msgid "Larts must contain $who."
|
||||
msgstr "Les larts doivent contenir $who."
|
||||
|
||||
#: plugin.py:52
|
||||
msgid ""
|
||||
"[<channel>] [<id>] <who|what> [for <reason>]\n"
|
||||
"\n"
|
||||
" Uses the Luser Attitude Readjustment Tool on <who|what> (for <reason>,\n"
|
||||
" if given). If <id> is given, uses that specific lart. <channel> is\n"
|
||||
" only necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<canal>] [<id>] [<qui|quoi> [for <raison>]\n"
|
||||
"\n"
|
||||
"Utilise le Luser Attitude Readjustment Tool sur <qui|quoi> (pour la <raison>, si elle est donnée). Si l'<id> est donné, utilise un LART spécifique. <canal> n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même."
|
||||
|
||||
#: plugin.py:66
|
||||
msgid "There is no lart with id #%i."
|
||||
msgstr "Il n'y a pas de lart d'id #%i."
|
||||
|
||||
#: plugin.py:71
|
||||
msgid "There are no larts in my database for %s."
|
||||
msgstr "Il n'y a pas de lart dans ma base de données pour %s."
|
||||
|
||||
#: plugin.py:77
|
||||
msgid "trying to dis me"
|
||||
msgstr "essaye de me manquer de respect"
|
||||
|
||||
#: plugin.py:85
|
||||
msgid " for "
|
||||
msgstr " pour "
|
||||
|
54
plugins/Lart/messages.pot
Normal file
54
plugins/Lart/messages.pot
Normal file
@ -0,0 +1,54 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-17 15:21+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: config.py:49
|
||||
msgid ""
|
||||
"Determines whether the bot will show the ids\n"
|
||||
" of a lart when the lart is given."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:48
|
||||
msgid "Larts must contain $who."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:52
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<channel>] [<id>] <who|what> [for <reason>]\n"
|
||||
"\n"
|
||||
" Uses the Luser Attitude Readjustment Tool on <who|what> (for <reason>,\n"
|
||||
" if given). If <id> is given, uses that specific lart. <channel> is\n"
|
||||
" only necessary if the message isn't sent in the channel itself.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:66
|
||||
msgid "There is no lart with id #%i."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:71
|
||||
msgid "There are no larts in my database for %s."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:77
|
||||
msgid "trying to dis me"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:85
|
||||
msgid " for "
|
||||
msgstr ""
|
||||
|
@ -32,6 +32,8 @@ import re
|
||||
from supybot.commands import *
|
||||
import supybot.plugins as plugins
|
||||
import supybot.ircutils as ircutils
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Lart')
|
||||
|
||||
class Lart(plugins.ChannelIdDatabasePlugin):
|
||||
_meRe = re.compile(r'\bme\b', re.I)
|
||||
@ -43,8 +45,9 @@ class Lart(plugins.ChannelIdDatabasePlugin):
|
||||
|
||||
def addValidator(self, irc, text):
|
||||
if '$who' not in text:
|
||||
irc.error('Larts must contain $who.', Raise=True)
|
||||
irc.error(_('Larts must contain $who.'), Raise=True)
|
||||
|
||||
@internationalizeDocstring
|
||||
def lart(self, irc, msg, args, channel, id, text):
|
||||
"""[<channel>] [<id>] <who|what> [for <reason>]
|
||||
|
||||
@ -60,18 +63,18 @@ class Lart(plugins.ChannelIdDatabasePlugin):
|
||||
try:
|
||||
lart = self.db.get(channel, id)
|
||||
except KeyError:
|
||||
irc.error(format('There is no lart with id #%i.', id))
|
||||
irc.error(format(_('There is no lart with id #%i.'), id))
|
||||
return
|
||||
else:
|
||||
lart = self.db.random(channel)
|
||||
if not lart:
|
||||
irc.error(format('There are no larts in my database '
|
||||
'for %s.', channel))
|
||||
irc.error(format(_('There are no larts in my database '
|
||||
'for %s.'), channel))
|
||||
return
|
||||
text = lart.text
|
||||
if ircutils.strEqual(target, irc.nick):
|
||||
target = msg.nick
|
||||
reason = self._replaceFirstPerson('trying to dis me', irc.nick)
|
||||
reason = self._replaceFirstPerson(_('trying to dis me'), irc.nick)
|
||||
else:
|
||||
target = self._replaceFirstPerson(target, msg.nick)
|
||||
reason = self._replaceFirstPerson(reason, msg.nick)
|
||||
@ -79,7 +82,7 @@ class Lart(plugins.ChannelIdDatabasePlugin):
|
||||
target = target.rstrip('.')
|
||||
text = text.replace('$who', target)
|
||||
if reason:
|
||||
text += ' for ' + reason
|
||||
text += _(' for ') + reason
|
||||
if self.registryValue('showIds', channel):
|
||||
text += format(' (#%i)', lart.id)
|
||||
irc.reply(text, action=True)
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Later')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by setup.py to configure this module. Advanced is
|
||||
@ -40,10 +42,11 @@ def configure(advanced):
|
||||
|
||||
Later = conf.registerPlugin('Later')
|
||||
conf.registerGlobalValue(Later, 'maximum',
|
||||
registry.NonNegativeInteger(0, """Determines the maximum number of messages
|
||||
to be queued for a user. If this value is 0, there is no maximum."""))
|
||||
registry.NonNegativeInteger(0, _("""Determines the maximum number of
|
||||
messages to be queued for a user. If this value is 0, there is no maximum.
|
||||
""")))
|
||||
conf.registerGlobalValue(Later, 'private',
|
||||
registry.Boolean(True, """Determines whether users will be notified in the
|
||||
first place in which they're seen, or in private."""))
|
||||
registry.Boolean(True, _("""Determines whether users will be notified in
|
||||
the first place in which they're seen, or in private.""")))
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
||||
|
108
plugins/Later/locale/fr.po
Normal file
108
plugins/Later/locale/fr.po
Normal file
@ -0,0 +1,108 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-28 16:15+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: config.py:45
|
||||
msgid ""
|
||||
"Determines the maximum number of\n"
|
||||
" messages to be queued for a user. If this value is 0, there is no maximum.\n"
|
||||
" "
|
||||
msgstr "Détermine le nombre maximum de messages en attente d'un utilisateur. Si la valeur est 0, il n'y a pas de maximum"
|
||||
|
||||
#: config.py:49
|
||||
msgid ""
|
||||
"Determines whether users will be notified in\n"
|
||||
" the first place in which they're seen, or in private."
|
||||
msgstr "Détermine si les utilisateurs seront notifiés au premier endroit où ils sont vus, ou en privé."
|
||||
|
||||
#: plugin.py:46
|
||||
msgid ""
|
||||
"Used to do things later; currently, it only allows the sending of\n"
|
||||
" nick-based notes. Do note (haha!) that these notes are *not* private\n"
|
||||
" and don't even pretend to be; if you want such features, consider using the\n"
|
||||
" Note plugin."
|
||||
msgstr "Utilisé pour faire des choses plus tard ; actuellement, il n'autorise que les notes basées sur des nicks. Notez (haha !) que ces notes ne sont *pas* privées, et qu'elle ne sont pas conçues pour l'être ; si vous voulez une telle fonctionnalité, utilisez le plugin Note."
|
||||
|
||||
#: plugin.py:84
|
||||
msgid "%s ago"
|
||||
msgstr "il y a %s"
|
||||
|
||||
#: plugin.py:86
|
||||
msgid "just now"
|
||||
msgstr "à l'instant"
|
||||
|
||||
#: plugin.py:107
|
||||
msgid ""
|
||||
"<nick> <text>\n"
|
||||
"\n"
|
||||
" Tells <nick> <text> the next time <nick> is in seen. <nick> can\n"
|
||||
" contain wildcard characters, and the first matching nick will be\n"
|
||||
" given the note.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<nick> <texte>\n"
|
||||
"\n"
|
||||
"Dit le <texte> à <nick> la prochaine fois qu'il est vu. <nick> peut contenir des jokers, et le premier nick correspondant recevra la note."
|
||||
|
||||
#: plugin.py:114
|
||||
msgid "I can't send notes to myself."
|
||||
msgstr "Je ne peux m'envoyer de notes à moi-même."
|
||||
|
||||
#: plugin.py:120
|
||||
msgid "That person's message queue is already full."
|
||||
msgstr "La file d'attente des messages de cette personne est déjà pleine."
|
||||
|
||||
#: plugin.py:125
|
||||
msgid ""
|
||||
"[<nick>]\n"
|
||||
"\n"
|
||||
" If <nick> is given, replies with what notes are waiting on <nick>,\n"
|
||||
" otherwise, replies with the nicks that have notes waiting for them.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<nick>]\n"
|
||||
"\n"
|
||||
"Si le <nick> est donné, répond avec les notes en attente pour <nick> ; sinon, répond avec les nicks ayant des notes en attente."
|
||||
|
||||
#: plugin.py:136
|
||||
msgid "I have no notes for that nick."
|
||||
msgstr "Je n'ai pas de note pour ce nick."
|
||||
|
||||
#: plugin.py:141
|
||||
msgid "I currently have notes waiting for %L."
|
||||
msgstr "J'ai actuellement des notes en attente pour %L."
|
||||
|
||||
#: plugin.py:144
|
||||
msgid "I have no notes waiting to be delivered."
|
||||
msgstr "Je n'ai pas de note à délivrer."
|
||||
|
||||
#: plugin.py:149
|
||||
msgid ""
|
||||
"<nick>\n"
|
||||
"\n"
|
||||
" Removes the notes waiting on <nick>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<nick>\n"
|
||||
"\n"
|
||||
"Supprime les notes en attente pour <nick>."
|
||||
|
||||
#: plugin.py:158
|
||||
msgid "There were no notes for %r"
|
||||
msgstr "Il n'y a pas de note pour %r"
|
||||
|
||||
#: plugin.py:182
|
||||
msgid "Sent %s: <%s> %s"
|
||||
msgstr "Envoyé le %s : <%s> %s"
|
||||
|
105
plugins/Later/messages.pot
Normal file
105
plugins/Later/messages.pot
Normal file
@ -0,0 +1,105 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-28 16:15+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: config.py:45
|
||||
msgid ""
|
||||
"Determines the maximum number of\n"
|
||||
" messages to be queued for a user. If this value is 0, there is no maximum.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: config.py:49
|
||||
msgid ""
|
||||
"Determines whether users will be notified in\n"
|
||||
" the first place in which they're seen, or in private."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:46
|
||||
#, docstring
|
||||
msgid ""
|
||||
"Used to do things later; currently, it only allows the sending of\n"
|
||||
" nick-based notes. Do note (haha!) that these notes are *not* private\n"
|
||||
" and don't even pretend to be; if you want such features, consider using the\n"
|
||||
" Note plugin."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:84
|
||||
msgid "%s ago"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:86
|
||||
msgid "just now"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:107
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<nick> <text>\n"
|
||||
"\n"
|
||||
" Tells <nick> <text> the next time <nick> is in seen. <nick> can\n"
|
||||
" contain wildcard characters, and the first matching nick will be\n"
|
||||
" given the note.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:114
|
||||
msgid "I can't send notes to myself."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:120
|
||||
msgid "That person's message queue is already full."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:125
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<nick>]\n"
|
||||
"\n"
|
||||
" If <nick> is given, replies with what notes are waiting on <nick>,\n"
|
||||
" otherwise, replies with the nicks that have notes waiting for them.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:136
|
||||
msgid "I have no notes for that nick."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:141
|
||||
msgid "I currently have notes waiting for %L."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:144
|
||||
msgid "I have no notes waiting to be delivered."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:149
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<nick>\n"
|
||||
"\n"
|
||||
" Removes the notes waiting on <nick>.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:158
|
||||
msgid "There were no notes for %r"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:182
|
||||
msgid "Sent %s: <%s> %s"
|
||||
msgstr ""
|
||||
|
@ -38,6 +38,8 @@ from supybot.commands import *
|
||||
import supybot.ircmsgs as ircmsgs
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Later')
|
||||
|
||||
|
||||
class Later(callbacks.Plugin):
|
||||
@ -79,9 +81,9 @@ class Later(callbacks.Plugin):
|
||||
#format = conf.supybot.reply.format.time()
|
||||
diff = time.time() - when
|
||||
try:
|
||||
return utils.timeElapsed(diff, seconds=False) + ' ago'
|
||||
return _('%s ago') % utils.timeElapsed(diff, seconds=False)
|
||||
except ValueError:
|
||||
return 'just now'
|
||||
return _('just now')
|
||||
|
||||
def _addNote(self, nick, whence, text, at=None, maximum=None):
|
||||
if at is None:
|
||||
@ -100,6 +102,7 @@ class Later(callbacks.Plugin):
|
||||
self.wildcards.append(nick)
|
||||
self._flushNotes()
|
||||
|
||||
@internationalizeDocstring
|
||||
def tell(self, irc, msg, args, nick, text):
|
||||
"""<nick> <text>
|
||||
|
||||
@ -108,15 +111,16 @@ class Later(callbacks.Plugin):
|
||||
given the note.
|
||||
"""
|
||||
if ircutils.strEqual(nick, irc.nick):
|
||||
irc.error('I can\'t send notes to myself.')
|
||||
irc.error(_('I can\'t send notes to myself.'))
|
||||
return
|
||||
try:
|
||||
self._addNote(nick, msg.nick, text)
|
||||
irc.replySuccess()
|
||||
except ValueError:
|
||||
irc.error('That person\'s message queue is already full.')
|
||||
irc.error(_('That person\'s message queue is already full.'))
|
||||
tell = wrap(tell, ['something', 'text'])
|
||||
|
||||
@internationalizeDocstring
|
||||
def notes(self, irc, msg, args, nick):
|
||||
"""[<nick>]
|
||||
|
||||
@ -129,17 +133,18 @@ class Later(callbacks.Plugin):
|
||||
for (when, whence, note) in self._notes[nick]]
|
||||
irc.reply(format('%L', notes))
|
||||
else:
|
||||
irc.error('I have no notes for that nick.')
|
||||
irc.error(_('I have no notes for that nick.'))
|
||||
else:
|
||||
nicks = self._notes.keys()
|
||||
if nicks:
|
||||
utils.sortBy(ircutils.toLower, nicks)
|
||||
irc.reply(format('I currently have notes waiting for %L.',
|
||||
irc.reply(format(_('I currently have notes waiting for %L.'),
|
||||
nicks))
|
||||
else:
|
||||
irc.error('I have no notes waiting to be delivered.')
|
||||
irc.error(_('I have no notes waiting to be delivered.'))
|
||||
notes = wrap(notes, [additional('something')])
|
||||
|
||||
@internationalizeDocstring
|
||||
def remove(self, irc, msg, args, nick):
|
||||
"""<nick>
|
||||
|
||||
@ -150,7 +155,7 @@ class Later(callbacks.Plugin):
|
||||
self._flushNotes()
|
||||
irc.replySuccess()
|
||||
except KeyError:
|
||||
irc.error('There were no notes for %r' % nick)
|
||||
irc.error(_('There were no notes for %r') % nick)
|
||||
remove = wrap(remove, [('checkCapability', 'admin'), 'something'])
|
||||
|
||||
def doPrivmsg(self, irc, msg):
|
||||
@ -174,8 +179,8 @@ class Later(callbacks.Plugin):
|
||||
self._flushNotes()
|
||||
|
||||
def _formatNote(self, when, whence, note):
|
||||
return 'Sent %s: <%s> %s' % (self._timestamp(when), whence, note)
|
||||
|
||||
return _('Sent %s: <%s> %s') % (self._timestamp(when), whence, note)
|
||||
Later = internationalizeDocstring(Later)
|
||||
|
||||
|
||||
Class = Later
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Limiter')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
@ -41,17 +43,17 @@ def configure(advanced):
|
||||
|
||||
Limiter = conf.registerPlugin('Limiter')
|
||||
conf.registerChannelValue(Limiter, 'enable',
|
||||
registry.Boolean(False, """Determines whether the bot will maintain the
|
||||
registry.Boolean(False, _("""Determines whether the bot will maintain the
|
||||
channel limit to be slightly above the current number of people in the
|
||||
channel, in order to make clone/drone attacks harder."""))
|
||||
channel, in order to make clone/drone attacks harder.""")))
|
||||
conf.registerChannelValue(Limiter, 'minimumExcess',
|
||||
registry.PositiveInteger(5, """Determines the minimum number of free
|
||||
registry.PositiveInteger(5, _("""Determines the minimum number of free
|
||||
spots that will be saved when limits are being enforced. This should
|
||||
always be smaller than supybot.plugins.Limiter.limit.maximumExcess."""))
|
||||
always be smaller than supybot.plugins.Limiter.limit.maximumExcess.""")))
|
||||
conf.registerChannelValue(Limiter, 'maximumExcess',
|
||||
registry.PositiveInteger(10, """Determines the maximum number of free spots
|
||||
registry.PositiveInteger(10, _("""Determines the maximum number of free spots
|
||||
that will be saved when limits are being enforced. This should always be
|
||||
larger than supybot.plugins.Limiter.limit.minimumExcess."""))
|
||||
larger than supybot.plugins.Limiter.limit.minimumExcess.""")))
|
||||
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
||||
|
47
plugins/Limiter/locale/fr.po
Normal file
47
plugins/Limiter/locale/fr.po
Normal file
@ -0,0 +1,47 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-17 15:35+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: config.py:46
|
||||
msgid ""
|
||||
"Determines whether the bot will maintain the\n"
|
||||
" channel limit to be slightly above the current number of people in the\n"
|
||||
" channel, in order to make clone/drone attacks harder."
|
||||
msgstr "Détermine si le bot maintiendra la limite de canal pour être juste au-dessus du nombre actuel de personnes, pour rendre les attaques de clones plus difficiles"
|
||||
|
||||
#: config.py:50
|
||||
msgid ""
|
||||
"Determines the minimum number of free\n"
|
||||
" spots that will be saved when limits are being enforced. This should\n"
|
||||
" always be smaller than supybot.plugins.Limiter.limit.maximumExcess."
|
||||
msgstr "Détermine le nombre minimum de 'places' libres à avoir, c'est à dire que la limite sera changées lorsque ce nombre sera atteint. Ce doit toujours être plus petit que supybot.plugins.Limiter.limit.maximumExcess."
|
||||
|
||||
#: config.py:54
|
||||
msgid ""
|
||||
"Determines the maximum number of free spots\n"
|
||||
" that will be saved when limits are being enforced. This should always be\n"
|
||||
" larger than supybot.plugins.Limiter.limit.minimumExcess."
|
||||
msgstr "Détermine le nombre maximum de 'places' libre, c'est à dire le nombre de place qu'il y aura juste après chaque changement de limite. Ce doit toujours être plus grand que supybot.plugins.Limiter.limit.minimumExcess."
|
||||
|
||||
#: plugin.py:40
|
||||
msgid ""
|
||||
"In order to use this plugin, its config values need to be properly\n"
|
||||
" setup. supybot.plugins.Limiter.enable needs to be set to True and\n"
|
||||
" supybot.plugins.Limiter.{maximumExcess,minimumExcess} should be set to\n"
|
||||
" values appropriate to your channel (if the defaults aren't satisfactory.\n"
|
||||
" Once these are set, and someone enters/leaves the channel, Supybot will\n"
|
||||
" start setting the proper +l modes.\n"
|
||||
" "
|
||||
msgstr "Pour utiliser ce plugin, ses variables de configuration doivent être configurées proprement. supybot.plugins.Limiter.enable doit être défini à True, et supybot.plugins.Limiter.{maximumExcess,minimumExcess} doivent être définis à la valeur appropriée piur votre canal (si les valeurs par défaut ne satisfont pas). Une fois qu'elles sont définies, et que quelqu'un entrera/partira du canal, Supybot commencera à définir les modes +l."
|
||||
|
50
plugins/Limiter/messages.pot
Normal file
50
plugins/Limiter/messages.pot
Normal file
@ -0,0 +1,50 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-17 15:35+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: config.py:46
|
||||
msgid ""
|
||||
"Determines whether the bot will maintain the\n"
|
||||
" channel limit to be slightly above the current number of people in the\n"
|
||||
" channel, in order to make clone/drone attacks harder."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:50
|
||||
msgid ""
|
||||
"Determines the minimum number of free\n"
|
||||
" spots that will be saved when limits are being enforced. This should\n"
|
||||
" always be smaller than supybot.plugins.Limiter.limit.maximumExcess."
|
||||
msgstr ""
|
||||
|
||||
#: config.py:54
|
||||
msgid ""
|
||||
"Determines the maximum number of free spots\n"
|
||||
" that will be saved when limits are being enforced. This should always be\n"
|
||||
" larger than supybot.plugins.Limiter.limit.minimumExcess."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:40
|
||||
#, docstring
|
||||
msgid ""
|
||||
"In order to use this plugin, its config values need to be properly\n"
|
||||
" setup. supybot.plugins.Limiter.enable needs to be set to True and\n"
|
||||
" supybot.plugins.Limiter.{maximumExcess,minimumExcess} should be set to\n"
|
||||
" values appropriate to your channel (if the defaults aren't satisfactory.\n"
|
||||
" Once these are set, and someone enters/leaves the channel, Supybot will\n"
|
||||
" start setting the proper +l modes.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
@ -32,7 +32,8 @@ from supybot.commands import *
|
||||
import supybot.ircmsgs as ircmsgs
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.callbacks as callbacks
|
||||
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Limiter')
|
||||
|
||||
class Limiter(callbacks.Plugin):
|
||||
"""In order to use this plugin, its config values need to be properly
|
||||
@ -68,7 +69,7 @@ class Limiter(callbacks.Plugin):
|
||||
def doQuit(self, irc, msg):
|
||||
for channel in irc.state.channels:
|
||||
self._enforceLimit(irc, channel)
|
||||
|
||||
Limiter = internationalizeDocstring(Limiter)
|
||||
|
||||
Class = Limiter
|
||||
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Math')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
@ -42,7 +44,7 @@ def configure(advanced):
|
||||
Math = conf.registerPlugin('Math')
|
||||
# This is where your configuration variables (if any) should go. For example:
|
||||
# conf.registerGlobalValue(Math, 'someConfigVariableName',
|
||||
# registry.Boolean(False, """Help for someConfigVariableName."""))
|
||||
# registry.Boolean(False, _("""Help for someConfigVariableName.""")))
|
||||
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79:
|
||||
|
142
plugins/Math/locale/fr.po
Normal file
142
plugins/Math/locale/fr.po
Normal file
@ -0,0 +1,142 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Supybot-fr\n"
|
||||
"POT-Creation-Date: 2010-10-17 15:35+CEST\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
|
||||
"Language-Team: Supybot-fr <progval@gmail.com>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Français\n"
|
||||
"X-Poedit-Country: France\n"
|
||||
"X-Poedit-SourceCharset: ASCII\n"
|
||||
|
||||
#: plugin.py:52
|
||||
msgid ""
|
||||
"<fromBase> [<toBase>] <number>\n"
|
||||
"\n"
|
||||
" Converts <number> from base <fromBase> to base <toBase>.\n"
|
||||
" If <toBase> is left out, it converts to decimal.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<base 1> [<base 2>] <nombre>\n"
|
||||
"\n"
|
||||
"Converti le nombre d'une base à l'autre. La seconde base est la décimale par défaut."
|
||||
|
||||
#: plugin.py:63
|
||||
msgid "Invalid <number> for base %s: %s"
|
||||
msgstr "Nombre invalide pour la base %s : %s"
|
||||
|
||||
#: plugin.py:69
|
||||
msgid "Convert a decimal number to another base; returns a string."
|
||||
msgstr "Converti un nombre décimal dans une autre base, retourne une chaîne."
|
||||
|
||||
#: plugin.py:90
|
||||
msgid ""
|
||||
"Convert a number from any base, 2 through 36, to any other\n"
|
||||
" base, 2 through 36. Returns a string."
|
||||
msgstr "Convertir un nombre de n'import quelle base, de 2 à 36, à n'importe quelle base, de 2 à 36."
|
||||
|
||||
#: plugin.py:157
|
||||
msgid ""
|
||||
"<math expression>\n"
|
||||
"\n"
|
||||
" Returns the value of the evaluated <math expression>. The syntax is\n"
|
||||
" Python syntax; the type of arithmetic is floating point. Floating\n"
|
||||
" point arithmetic is used in order to prevent a user from being able to\n"
|
||||
" crash to the bot with something like '10**10**10**10'. One consequence\n"
|
||||
" is that large values such as '10**24' might not be exact.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<expression mathématique>\n"
|
||||
"\n"
|
||||
"Retourne la valeur de l'<expression mathématique> évaluée. La syntaxe est celle de Python ; le calcul est à virgule flottante. Les calculs à virgule flottante sont utilisés pour enmpêcher l'utilisateur de faire crasher le bot avec quelque chose du genre '10**10**10**10'. L'une des conséquences est que les grandes valeurs commandes '10**24' peuvent ne pas être exactes."
|
||||
|
||||
#: plugin.py:166
|
||||
#: plugin.py:220
|
||||
msgid "There's really no reason why you should have underscores or brackets in your mathematical expression. Please remove them."
|
||||
msgstr "Il n'y a aucune réelle raison que vous mettiez des underscores ou des crochets dans vos expressions mathématiques. Merci de les retirer."
|
||||
|
||||
#: plugin.py:172
|
||||
#: plugin.py:228
|
||||
msgid "You can't use lambda in this command."
|
||||
msgstr "Vous ne pouvez utiliser lambda dans cette commande."
|
||||
|
||||
#: plugin.py:202
|
||||
#: plugin.py:236
|
||||
msgid "The answer exceeded %s or so."
|
||||
msgstr "La réponse dépacer %s."
|
||||
|
||||
#: plugin.py:204
|
||||
#: plugin.py:238
|
||||
msgid "Something in there wasn't a valid number."
|
||||
msgstr "Quelque chose là-dedans n'est pas un nombre valide"
|
||||
|
||||
#: plugin.py:206
|
||||
#: plugin.py:240
|
||||
msgid "%s is not a defined function."
|
||||
msgstr "%s n'est pas une fonction définie"
|
||||
|
||||
#: plugin.py:213
|
||||
msgid ""
|
||||
"<math expression>\n"
|
||||
"\n"
|
||||
" This is the same as the calc command except that it allows integer\n"
|
||||
" math, and can thus cause the bot to suck up CPU. Hence it requires\n"
|
||||
" the 'trusted' capability to use.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<expression mathématique>\n"
|
||||
"\n"
|
||||
"Cette commande est la même que la commande 'calc', excepté qu'elle utilise des mathématiques entières, ce qui peut causer une surconsommation de CPU de la part du bot. C'est pourquoi elle requiert la capacité 'trusted'."
|
||||
|
||||
#: plugin.py:250
|
||||
msgid ""
|
||||
"<rpn math expression>\n"
|
||||
"\n"
|
||||
" Returns the value of an RPN expression.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<expression mathématique NPI>\n"
|
||||
"\n"
|
||||
"Retourne la valeur de l'expression mathématique NPI."
|
||||
|
||||
#: plugin.py:275
|
||||
msgid "Not enough arguments for %s"
|
||||
msgstr "Pas assez d'arguments pour %s."
|
||||
|
||||
#: plugin.py:288
|
||||
msgid "%q is not a defined function."
|
||||
msgstr "%q n'est pas une fonction définie."
|
||||
|
||||
#: plugin.py:295
|
||||
msgid "Stack: [%s]"
|
||||
msgstr "Pile : [%s]"
|
||||
|
||||
#: plugin.py:299
|
||||
msgid ""
|
||||
"[<number>] <unit> to <other unit>\n"
|
||||
"\n"
|
||||
" Converts from <unit> to <other unit>. If number isn't given, it\n"
|
||||
" defaults to 1. For unit information, see 'units' command.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<nombre>] <unité> to <autre unité>\n"
|
||||
"\n"
|
||||
"Convertit de l'<unité> à l'<autre unité>. Si le nombre n'est pas donné, il vaut 1 par défaut. Pour plus d'informations sur les unités, utilisez la commande 'units'."
|
||||
|
||||
#: plugin.py:314
|
||||
msgid ""
|
||||
" [<type>]\n"
|
||||
"\n"
|
||||
" With no arguments, returns a list of measurement types, which can be\n"
|
||||
" passed as arguments. When called with a type as an argument, returns\n"
|
||||
" the units of that type.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"[<type>]\n"
|
||||
"\n"
|
||||
"Sans argument, retourne la liste des types de mesures, qui peuvent être passés en argument. Lors de l'appel avec un argument, retourne les unités de chaque type."
|
||||
|
129
plugins/Math/messages.pot
Normal file
129
plugins/Math/messages.pot
Normal file
@ -0,0 +1,129 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2010-10-17 15:35+CEST\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: ENCODING\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
#: plugin.py:52
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<fromBase> [<toBase>] <number>\n"
|
||||
"\n"
|
||||
" Converts <number> from base <fromBase> to base <toBase>.\n"
|
||||
" If <toBase> is left out, it converts to decimal.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:63
|
||||
msgid "Invalid <number> for base %s: %s"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:69
|
||||
#, docstring
|
||||
msgid "Convert a decimal number to another base; returns a string."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:90
|
||||
#, docstring
|
||||
msgid ""
|
||||
"Convert a number from any base, 2 through 36, to any other\n"
|
||||
" base, 2 through 36. Returns a string."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:157
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<math expression>\n"
|
||||
"\n"
|
||||
" Returns the value of the evaluated <math expression>. The syntax is\n"
|
||||
" Python syntax; the type of arithmetic is floating point. Floating\n"
|
||||
" point arithmetic is used in order to prevent a user from being able to\n"
|
||||
" crash to the bot with something like '10**10**10**10'. One consequence\n"
|
||||
" is that large values such as '10**24' might not be exact.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:166 plugin.py:220
|
||||
msgid "There's really no reason why you should have underscores or brackets in your mathematical expression. Please remove them."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:172 plugin.py:228
|
||||
msgid "You can't use lambda in this command."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:202 plugin.py:236
|
||||
msgid "The answer exceeded %s or so."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:204 plugin.py:238
|
||||
msgid "Something in there wasn't a valid number."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:206 plugin.py:240
|
||||
msgid "%s is not a defined function."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:213
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<math expression>\n"
|
||||
"\n"
|
||||
" This is the same as the calc command except that it allows integer\n"
|
||||
" math, and can thus cause the bot to suck up CPU. Hence it requires\n"
|
||||
" the 'trusted' capability to use.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:250
|
||||
#, docstring
|
||||
msgid ""
|
||||
"<rpn math expression>\n"
|
||||
"\n"
|
||||
" Returns the value of an RPN expression.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:275
|
||||
msgid "Not enough arguments for %s"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:288
|
||||
msgid "%q is not a defined function."
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:295
|
||||
msgid "Stack: [%s]"
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:299
|
||||
#, docstring
|
||||
msgid ""
|
||||
"[<number>] <unit> to <other unit>\n"
|
||||
"\n"
|
||||
" Converts from <unit> to <other unit>. If number isn't given, it\n"
|
||||
" defaults to 1. For unit information, see 'units' command.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: plugin.py:314
|
||||
#, docstring
|
||||
msgid ""
|
||||
" [<type>]\n"
|
||||
"\n"
|
||||
" With no arguments, returns a list of measurement types, which can be\n"
|
||||
" passed as arguments. When called with a type as an argument, returns\n"
|
||||
" the units of that type.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user