Merge remote-tracking branch 'progval/testing' into HEAD

This commit is contained in:
Mika Suomalainen 2011-07-02 12:18:14 +03:00
commit 8a1ceb60d8
27 changed files with 1517 additions and 110 deletions

View File

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Supybot-fr\n"
"POT-Creation-Date: 2011-02-26 09:49+CET\n"
"PO-Revision-Date: 2011-06-12 11:51+0200\n"
"PO-Revision-Date: 2011-06-27 18:15+0200\n"
"Last-Translator: skizzhg <skizzhg@gmx.com>\n"
"Language-Team: Italian <skizzhg@gmx.com>\n"
"Language: it\n"
@ -22,9 +22,10 @@ msgstr ""
#: config.py:49
msgid ""
"Determines whether this plugin will automode\n"
" owners."
" owners even if they don't have op/halfop/voice/whatever capability.."
msgstr ""
"Determina se il plugin darà automaticamente il mode ai proprietari.\n"
" anche se non hanno la capacità op, halfop, voice, ecc..."
#: config.py:52
msgid ""

View File

@ -30,6 +30,7 @@
import time
import supybot.conf as conf
import supybot.ircdb as ircdb
import supybot.ircmsgs as ircmsgs
import supybot.ircutils as ircutils

View File

@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Supybot-fr\n"
"POT-Creation-Date: 2011-01-29 11:48+CET\n"
"POT-Creation-Date: 2011-02-26 09:49+CET\n"
"PO-Revision-Date: \n"
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
"Language-Team: Supybot-fr <progval@gmail.com>\n"
@ -13,13 +13,6 @@ msgstr ""
"X-Poedit-Country: France\n"
"X-Poedit-SourceCharset: ASCII\n"
#: __init__.py:30
msgid ""
"\n"
"Filters bad words on outgoing messages from the bot, so the bot can't be made\n"
"to say bad words.\n"
msgstr ""
#: config.py:40
msgid "Would you like to add some bad words?"
msgstr "Voulez-vous ajouter quelques mots interdits ?"

View File

@ -0,0 +1,167 @@
msgid ""
msgstr ""
"Project-Id-Version: Supybot-fr\n"
"POT-Creation-Date: 2011-02-26 09:49+CET\n"
"PO-Revision-Date: 2011-06-28 23:29+0200\n"
"Last-Translator: skizzhg <skizzhg@gmx.com>\n"
"Language-Team: Italian <skizzhg@gmx.com>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: config.py:40
msgid "Would you like to add some bad words?"
msgstr "Vuoi aggiungere delle parole volgari?"
#: config.py:41
msgid "What words? (separate individual words by spaces)"
msgstr "Quali parole? (separa ciascuna con uno spazio)"
#: config.py:53
msgid ""
"Determines what words are\n"
" considered to be 'bad' so the bot won't say them."
msgstr ""
"Determina quali parole sono considerate \"volgari\" per cui il bot non le pronuncerà.\n"
#: 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. After changing this setting, the BadWords regexp needs to be\n"
" regenerated by adding/removing a word to the list, or reloading the\n"
" plugin."
msgstr ""
"Determina se il bot richieda che le parole volgari siano indipendenti o all'interno\n"
" di altre parole. Ad esempio, se \"merda\" è volgare e questa opzione è impostata\n"
" a True, verrà censurata, ma \"merdata\" non lo sarà; probabilmente si preferisce\n"
" che questa sia su False. Dopo aver modificato questa impostazione, la regexp di\n"
" BadWords deve essere rigenerata con l'aggiunta o la rimozione di una parola\n"
" dall'elenco o ricaricando il plugin."
#: config.py:73
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 ""
"Determina quali caratteri sostituiranno le parole volgari, verranno utilizzati\n"
" rimpiazzando la parola da censurare in tutta la sua lunghezza."
#: config.py:81
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 ""
"Determina come verranno sostituite le parole volgari. \"nastyCharacters\" (predefinito)\n"
" rimpiazzerà la parola con lo stesso numero di \"brutti caratteri\" (come quelli usati\n"
" nei fumetti; configurabile da supybot.plugins.BadWords.nastyChars). \"simple\" sostituirà\n"
" una parola volgare con una stringa semplice (indipendentemente dalla lunghezza della parola);\n"
" questa stringa è configurabile tramite supybot.plugins.BadWords.simpleReplacement."
#: config.py:89
msgid ""
"Determines what word will replace bad\n"
" words if the replacement method is 'simple'."
msgstr ""
"Determina quale parola sostituirà quelle volgari se viene usato il metodo \"simple\"."
#: config.py:92
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 ""
"Determina se il bot rimuoverà i caratteri di formattazione prima di controllare\n"
" che contengano parole volgari. Se impostato a False, sarà relativamente facile\n"
" aggirare i filtri di questo plugin. Tuttavia, se impostato a True, non interagirà\n"
" con altri plugin che colorano o rendono il testo grassetto."
#: config.py:99
msgid ""
"Determines whether the bot will kick people with\n"
" a warning when they use bad words."
msgstr ""
"Determina se il bot caccerà (kick) gli utenti con un avvertimento quando usano volgarità."
#: config.py:102
msgid ""
"You have been kicked for using a word\n"
" prohibited in the presence of this bot. Please use more appropriate\n"
" language in the future."
msgstr ""
"Sei stato/a cacciato/a per aver usato parole proibite in presenza del bot.\n"
" In futuro utilizza un linguaggio più appropriato."
#: config.py:104
msgid ""
"Determines the kick message used by the\n"
" bot when kicking users for saying bad words."
msgstr ""
"Determina il messaggio del kick utilizzato dal bot per espellere gli utenti che scrivono volgarità."
#: plugin.py:46
#, docstring
msgid ""
"Maintains a list of words that the bot is not allowed to say.\n"
" Can also be used to kick people that say these words, if the bot\n"
" has op."
msgstr ""
"Mantiene un elenco di parole che il bot non può dire.\n"
" Se il bot ha lo stato di operatore, può essere anche utilizzato\n"
" per cacciare (kick) utenti che scrivono queste parole."
#: plugin.py:113
#, docstring
msgid ""
"takes no arguments\n"
"\n"
" Returns the list of words being censored.\n"
" "
msgstr ""
"non necessita argomenti\n"
"\n"
" Riporta l'elenco delle parole censurate.\n"
" "
#: plugin.py:123
msgid "I'm not currently censoring any bad words."
msgstr "Al momento non ho alcuna parola censurata."
#: plugin.py:128
#, docstring
msgid ""
"<word> [<word> ...]\n"
"\n"
" Adds all <word>s to the list of words being censored.\n"
" "
msgstr ""
"<parola> [<parola> ...]\n"
"\n"
" Aggiunge <parola> all'elenco di quelle da censurare.\n"
" "
#: plugin.py:140
#, docstring
msgid ""
"<word> [<word> ...]\n"
"\n"
" Removes <word>s from the list of words being censored.\n"
" "
msgstr ""
"<parola> [<parola> ...]\n"
"\n"
" Rimuove <parola> dall'elenco di quelle da censurare.\n"
" "

View File

@ -73,7 +73,7 @@ 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', ('isGranted', _('change the mode')), many('something')])
@internationalizeDocstring
def limit(self, irc, msg, args, channel, limit):
@ -99,7 +99,7 @@ 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', ('isGranted', _('moderate the channel'))])
@internationalizeDocstring
def unmoderate(self, irc, msg, args, channel):
@ -110,7 +110,7 @@ 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 = wrap(unmoderate, ['op', ('isGranted',
_('unmoderate the channel'))])
@internationalizeDocstring
@ -127,7 +127,7 @@ 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', ('isGranted', _('change the keyword')),
additional('somethingWithoutSpaces', '')])
@internationalizeDocstring
@ -187,7 +187,7 @@ class Channel(callbacks.Plugin):
self._sendMsgs(irc, nicks, f)
else:
irc.errorNoCapability(capability)
voice = wrap(voice, ['channel', ('haveOp', _('voice someone')),
voice = wrap(voice, ['channel', ('isGranted', _('voice someone')),
any('nickInChannel')])
@internationalizeDocstring
@ -247,7 +247,7 @@ class Channel(callbacks.Plugin):
def f(L):
return ircmsgs.devoices(channel, L)
self._sendMsgs(irc, nicks, f)
devoice = wrap(devoice, ['voice', ('haveOp', 'devoice someone'),
devoice = wrap(devoice, ['voice', ('isGranted', 'devoice someone'),
any('nickInChannel')])
@internationalizeDocstring
@ -283,7 +283,7 @@ class Channel(callbacks.Plugin):
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', ('isGranted', _('kick someone')),
commalist('nickInChannel'), additional('text')])
@internationalizeDocstring
@ -361,7 +361,7 @@ class Channel(callbacks.Plugin):
kban = wrap(kban,
['op',
getopts({'exact':'', 'nick':'', 'user':'', 'host':''}),
('haveOp', _('kick or ban someone')),
('isGranted', _('kick or ban someone')),
'nickInChannel',
optional('expiry', 0),
additional('text')])
@ -392,7 +392,7 @@ class Channel(callbacks.Plugin):
irc.error(_('No bans matching %s were found on %s.') %
(msg.prefix, channel))
unban = wrap(unban, ['op',
('haveOp', _('unban someone')),
('isGranted', _('unban someone')),
additional('hostmask')])
@internationalizeDocstring
@ -406,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', ('isGranted', _('invite someone')),
additional('nick')])
def do341(self, irc, msg):

View File

@ -8,8 +8,8 @@ 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"
"POT-Creation-Date: 2011-02-26 09:49+CET\n"
"PO-Revision-Date: 2011-06-30 13:29+0100\n"
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
"Language-Team: French\n"
"Language: fr\n"
@ -18,27 +18,40 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: config.py:57
#: 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 "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
#: 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 "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
#: 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 "Détermine quels mots (c'est à dire, les morceaux de texte sans espace) sont considérés comme sadleys par les stats."
#: plugin.py:246
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"
#: 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."
@ -90,6 +103,21 @@ msgstr "<empty>"
msgid "I have no stats for that %s in %s."
msgstr "Je n'ai pas de statistiques pour %s sur %s."
#: plugin.py:304
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."
#: 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."
@ -102,6 +130,18 @@ msgstr "Vous ne pouvez utiliser lambda dans cette commande."
msgid "stat variable"
msgstr "Variable statistique"
#: plugin.py:349
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."
#: 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."
@ -144,53 +184,3 @@ msgstr "utilisateur"
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."

182
plugins/Config/locale/it.po Normal file
View File

@ -0,0 +1,182 @@
msgid ""
msgstr ""
"Project-Id-Version: Supybot-fr\n"
"POT-Creation-Date: 2011-02-26 09:49+CET\n"
"PO-Revision-Date: 2011-06-28 12:33+0200\n"
"Last-Translator: skizzhg <skizzhg@gmx.com>\n"
"Language-Team: Italian <skizzhg@gmx.com>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: plugin.py:103
msgid "configuration variable"
msgstr "variabile di configurazione"
#: plugin.py:109
msgid "settable configuration variable"
msgstr "variabile di configurazione impostabile"
#: 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 ""
"<gruppo>\n"
"\n"
" Riporta le variabili di configurazione disponibili per il dato <gruppo>\n"
" di configurazione. Se una variabile ha delle sottovariabili, sarà preceduta\n"
" dal simbolo \"@\". Se una variabile è 'ChannelValue', ovvero può essere\n"
" configurata separatamente per ciascun canale tramite il comando \"channel\"\n"
" di questo plugin, sarà precedutà dal simbolo \"#\".\n"
" "
#: plugin.py:148
msgid "There don't seem to be any values in %s."
msgstr "Non sembra esserci alcun valore in %s."
#: plugin.py:154
#, docstring
msgid ""
"<word>\n"
"\n"
" Searches for <word> in the current configuration variables.\n"
" "
msgstr ""
"<parola>\n"
"\n"
" Cerca <parola> nelle variabili di configurazione.\n"
" "
#: plugin.py:167
msgid "There were no matching configuration variables."
msgstr "Non c'è nessuna variabile di configurazione corrispondente."
#: 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 "Questa variabile di registro non ha alcun valore. Utilizzare il comando \"list\"\n"
" in questo plugin per vedere quali variabili sono disponibili per questo gruppo."
#: 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 ""
"[<canale>] <nome> [<valore>]\n"
"\n"
" Se <valore> è fornito, imposta la variabile di configurazione <nome>\n"
" a <valore> per <canale>. Altrimenti restituisce l'attuale valore di\n"
" configurazione di <nome>. <canale> è necessario solo se il messaggio\n"
" non viene inviato nel canale stesso."
#: plugin.py:207
msgid "That configuration variable is not a channel-specific configuration variable."
msgstr "Questa variabile di configurazione non è specifica di un canale."
#: 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 ""
"<nome> [<valore>]\n"
"\n"
" Se <valore> è fornito, imposta il valore di <nome> a <valore>. Altrimenti riporta\n"
" l'attuale valore di <nome>. È possibile omettere \"supybot.\" prima del nome.\n"
" "
#: plugin.py:234
#, docstring
msgid ""
"<name>\n"
"\n"
" Returns the description of the configuration variable <name>.\n"
" "
msgstr ""
"<nome>\n"
"\n"
" Riporta la descrizione della variabile di configurazione <nome>.\n"
" "
#: plugin.py:242
msgid " (Current value: %s)"
msgstr " (Valore attuale: %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 "Questo gruppo di configurazione esiste ma sembra non avere un help.\n"
" Provare \"config list %s\" per vedere se ha dei sottovalori."
#: plugin.py:249
msgid "%s has no help."
msgstr "%s non ha un help."
#: plugin.py:254
#, docstring
msgid ""
"<name>\n"
"\n"
" Returns the default value of the configuration variable <name>.\n"
" "
msgstr ""
"<nome>\n"
"\n"
" Riporta il valore predefinito della variabile di configurazione <nome>.\n"
" "
#: plugin.py:264
#, docstring
msgid ""
"takes no arguments\n"
"\n"
" Reloads the various configuration files (user database, channel\n"
" database, registry, etc.).\n"
" "
msgstr ""
"non necessita argomenti\n"
"\n"
" Ricarica i file di configurazione (database utenti, database canale, registro, ecc.).\n"
" "
#: 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 ""
"<nomefile>\n"
"\n"
" Esporta le variabili di configurazione in <nomefile>. Se si vuole\n"
" mostrare a qualcuno il proprio file di configurazione evitando di\n"
" rivelare dati sensibili come le password, questo comando creerà un\n"
" file \"pulito\" adatto ad essere mostrato pubblicamente.\n"
" "

View File

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Supybot-fr\n"
"POT-Creation-Date: 2011-02-26 09:49+CET\n"
"PO-Revision-Date: 2011-06-15 18:11+0200\n"
"PO-Revision-Date: 2011-06-28 20:21+0200\n"
"Last-Translator: skizzhg <skizzhg@gmx.com>\n"
"Language-Team: Italian <skizzhg@gmx.com>\n"
"Language: it\n"
@ -96,18 +96,20 @@ msgstr "%L ha risposto: %s"
#, docstring
msgid ""
"<word> [<word> ...]\n"
"\n"
" Gets a random synonym from the Moby Thesaurus (moby-thes) database.\n"
" \n"
"\n"
" If given many words, gets a random synonym for each of them.\n"
" \n"
"\n"
" Quote phrases to have them treated as one lookup word.\n"
" "
msgstr ""
"<parola> [<parola> ...]\n"
"\n"
" Ricava un sinonimo casuale dal database di Moby Thesaurus (moby-thes).\n"
" \n"
"\n"
" Se si sono fornite più parole, ottiene un sinonimo casuale per ognuna.\n"
" \n"
"\n"
" Affinché esse vengano trattate come un'unica frase, racchiuderle tra virgolette.\n"
" "

248
plugins/Format/locale/it.po Normal file
View File

@ -0,0 +1,248 @@
msgid ""
msgstr ""
"Project-Id-Version: Supybot-fr\n"
"POT-Creation-Date: 2011-02-26 09:49+CET\n"
"PO-Revision-Date: 2011-06-29 14:11+0200\n"
"Last-Translator: skizzhg <skizzhg@gmx.com>\n"
"Language-Team: Italian <skizzhg@gmx.com>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: plugin.py:43
#, docstring
msgid ""
"<text>\n"
"\n"
" Returns <text> bolded.\n"
" "
msgstr ""
"<testo>\n"
"\n"
" Restituisce <testo> in grassetto.\n"
" "
#: plugin.py:52
#, docstring
msgid ""
"<text>\n"
"\n"
" Returns <text> in reverse-video.\n"
" "
msgstr ""
"<testo>\n"
"\n"
" Restituisce <testo> in negativo.\n"
" "
#: plugin.py:61
#, docstring
msgid ""
"<text>\n"
"\n"
" Returns <text> underlined.\n"
" "
msgstr ""
"<testo>\n"
"\n"
" Restituisce <testo> sottolineato.\n"
" "
#: 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 ""
"<primo piano> [<sfondo>] <testo>\n"
"\n"
" Restituisce <testo> con colore <primo piano> e colore di fondo <sfondo> (se specificato)\n"
" "
#: plugin.py:80
#, docstring
msgid ""
"<separator> <string 1> [<string> ...]\n"
"\n"
" Joins all the arguments together with <separator>.\n"
" "
msgstr ""
"<separatore> <stringa 1> [<stringa> ...]\n"
"\n"
" Unisce tutti gli argomenti con <separatore>.\n"
" "
#: 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 ""
"<caratteri da sostituire> <caratteri di sostituzione> <testo>\n"
"\n"
" Sostituisce <caratteri da sostituire> con <caratteri di sostituzione> in <testo>.\n"
" Il primo e il secondo argomento devono essere obbligatoriamente della stessa lunghezza.\n"
" "
#: plugin.py:96
msgid "<chars to translate> must be the same length as <chars to replace those with>."
msgstr "<caratteri da sostituire> devono essere della stessa lunghezza di <caratteri di sostituzione>."
#: plugin.py:103
#, docstring
msgid ""
"<substring to translate> <substring to replace it with> <text>\n"
"\n"
" Replaces all non-overlapping occurrences of <substring to translate>\n"
" with <substring to replace it with> in <text>.\n"
" "
msgstr ""
"<sottostringa da sostituire> <sottostringa di sostituzione> <testo>\n"
"\n"
" Sostituisce tutte le occorrenze di <sottostringa da sostituire> (a condizione\n"
" che non entrino in conflitto) con <sottostringa di sostituzione> in <testo>.\n"
" "
#: plugin.py:112
#, docstring
msgid ""
"<text>\n"
"\n"
" Returns <text> uppercased.\n"
" "
msgstr ""
"<testo>\n"
"\n"
" Restituisce <testo> tutto maiuscolo.\n"
" "
#: plugin.py:121
#, docstring
msgid ""
"<text>\n"
"\n"
" Returns <text> lowercased.\n"
" "
msgstr ""
"<testo>\n"
"\n"
" Restituisce <testo> minuscolo.\n"
" "
#: plugin.py:130
#, docstring
msgid ""
"<text>\n"
"\n"
" Returns <text> capitalized.\n"
" "
msgstr ""
"<testo>\n"
"\n"
" Restituisce <testo> maiuscolo.\n"
" "
#: plugin.py:139
#, docstring
msgid ""
"<text>\n"
"\n"
" Returns <text> titlecased.\n"
" "
msgstr ""
"<testo>\n"
"\n"
" Restituisce <testo> con tutte le prime lettere delle parole in maiuscolo.\n"
" "
#: plugin.py:148
#, docstring
msgid ""
"<text>\n"
"\n"
" Returns <text> surrounded by double quotes.\n"
" "
msgstr ""
"<testo>\n"
"\n"
" Restituisce <testo> tra virgolette doppie.\n"
" "
#: plugin.py:157
#, 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 ""
"<stringa 1> <stringa 2>\n"
"\n"
" Concatena due stringhe. Notare che non è come unire con \"\", dal momento\n"
" che se <stringa 2> contiene spazi, questi non verranno rimossi da concat.\n"
" "
#: plugin.py:168
#, 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 ""
"<dimensione> <testo>\n"
"\n"
" Taglia <testo> a <dimensione> rimuovendo i caratteri in eccesso più a\n"
" destra di <dimensione>. Se <dimensione> è un numero negativo, rimuove \n"
" i caratteri alla fine di <testo>.\n"
" "
#: plugin.py:179
#, 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 ""
"<numero> <testo>\n"
"\n"
" Riporta i campi (separati da spazi) <numero> di <testo>. Ovvero se il\n"
" testo è \"foo bar baz\" e <numero> è 2, verrà mostrato \"bar\".\n"
" "
#: plugin.py:192
#, 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 ""
"<formato stringa> [<argomento> ...]\n"
"\n"
" Espande un formato di stringa in stile Python utilizzando gli argomenti\n"
" restanti. Assicurarsi di usare sempre %s, non %d o %f o altro, in quanto\n"
" tutti gli argomenti sono stringhe.\n"
" "
#: plugin.py:206
msgid "Not enough arguments for the format string."
msgstr "Argomenti non sufficienti per il formato della stringa."

182
plugins/Herald/locale/it.po Normal file
View File

@ -0,0 +1,182 @@
msgid ""
msgstr ""
"Project-Id-Version: Supybot-fr\n"
"POT-Creation-Date: 2011-02-26 09:49+CET\n"
"PO-Revision-Date: 2011-06-30 02:17+0200\n"
"Last-Translator: skizzhg <skizzhg@gmx.com>\n"
"Language-Team: Italian <skizzhg@gmx.com>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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 ""
"Determina se i messaggi verranno inviati nel canale in cui entra un utente\n"
" riconosciuto; in pratica abilita o disabilita il plugin."
#: config.py:50
msgid ""
"Determines what capability (if any) is required to\n"
" add/change/remove the herald of another user."
msgstr ""
"Determina quale capacità (eventuale) è richiesta per aggiungere, modificare\n"
" e rimuovere l'annuncio di un altro utente."
#: config.py:53
msgid ""
"Determines the minimum number of seconds\n"
" between heralds."
msgstr ""
"Determina il numero minimo di secondi tra un annuncio e l'altro."
#: 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 ""
"Determina il numero minimo di secondi dopo l'uscita di un utente durante\n"
" i quali il bot non invierà l'annuncio alla persona al suo rientro."
#: 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 ""
"Determina il numero minimo di secondi dopo un netsplit durante i quali\n"
" il bot non nvierà l'annuncio agli utenti coinvolti."
#: 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 ""
"Imposta l'annuncio predefinito da utilizzare. Se un utente ha un annuncio personalizzato,\n"
" verrà usato quello. Se impostato ad una stringa vuota, il predefinito sarà disabilitato."
#: config.py:67
msgid ""
"Determines whether the default herald will be\n"
" sent as a NOTICE instead of a PRIVMSG."
msgstr ""
"Determina se l'annuncio predefinito verrà inviato tramite NOTICE anziché PRIVMSG."
#: config.py:70
msgid ""
"Determines whether the default herald will be\n"
" sent publicly."
msgstr ""
"Determina se l'annuncio predefinito verrà inviato pubblicamente."
#: 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 ""
"[<canale>] [--remove|<messaggio>]\n"
"\n"
" Se <messaggio> è fornito, imposta l'annuncio predefinito a <messaggio>.\n"
" Un <messaggio> nella forma \"\" rimuoverà il predefinito. Se <messaggio>\n"
" non è specificato, restituisce l'attuale annuncio. <canale> è necessario\n"
" solo se il messaggio non viene inviato nel canale stesso.\n"
" "
#: plugin.py:162
msgid "I do not have a default herald set for %s."
msgstr "Non ho un annuncio predefinito per %s."
#: 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 ""
"[<canale>] [<utente|nick>]\n"
"\n"
" Restituisce l'attuale annuncio per <utente> (o <nick|hostmask> con cui\n"
" è attualmente identificato). Se <utente> non è specificato, passa a quello\n"
" che ha dato il comando. <canale> è necessario solo se il messaggio non\n"
" viene inviato nel canale stesso.\n"
" "
#: plugin.py:181
msgid "I have no herald for %s."
msgstr "Non ho annunci per %s."
#: 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 ""
"[<canale>] <utente|nick> <messaggio>\n"
"\n"
" Imposta l'annuncio per <utente> (o <nick|hostmask> con cui è attualmente\n"
" identificato) a <messaggio>. <canale> è necessario solo se il messaggio\n"
" non viene inviato nel canale stesso.\n"
" "
#: 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 ""
"[<canale>] [<utente|nick>]\n"
"\n"
" Rimuove l'annuncio per <utente> o <nick|hostmask> con cui è attualmente\n"
" identificato. Se <utente> non è specificato, passa a quello che ha dato il comando.\n"
" <canale> è necessario solo se il messaggio non viene inviato nel canale stesso.\n"
" "
#: plugin.py:227
msgid "I have no herald for that user."
msgstr "Non ho annunci per questo utente."
#: 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 ""
"[<canale>] [<utente|nick>] <regexp>\n"
"\n"
" Modifica l'annuncio per <utente>, o <nick|hostmask> con cui è attualmente\n"
" identificato, in base a <regexp>. Se <utente> non è specificato, passa a quello\n"
" che ha dato il comando. <canale> è necessario solo se il messaggio non viene\n"
" inviato nel canale stesso.\n"
" "

View File

@ -149,7 +149,7 @@ class Herald(callbacks.Plugin):
"""
if optlist and text:
raise callbacks.ArgumentError
for (option, _) in optlist:
for (option, foo) in optlist:
if option == 'remove':
self.setRegistryValue('default', '', channel)
irc.replySuccess()

View File

@ -75,7 +75,7 @@ msgid ""
" 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"
" the total karma of each of the things. <channel> is only necessary\n"
" if the message isn't sent on the channel itself.\n"
" "
msgstr ""

View File

@ -62,7 +62,7 @@ msgid ""
" 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"
" the total karma of each of the things. <channel> is only necessary\n"
" if the message isn't sent on the channel itself.\n"
" "
msgstr ""

173
plugins/Karma/locale/it.po Normal file
View File

@ -0,0 +1,173 @@
msgid ""
msgstr ""
"Project-Id-Version: Supybot-fr\n"
"POT-Creation-Date: 2011-02-26 09:49+CET\n"
"PO-Revision-Date: 2011-06-28 10:43+0200\n"
"Last-Translator: skizzhg <skizzhg@gmx.com>\n"
"Language-Team: Italian <skizzhg@gmx.com>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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 ""
"Determina se il bot mostrerà una versione più corta del karma\n"
" quando viene richiesto per un singolo oggetto."
#: config.py:49
msgid ""
"Determines whether the bot will reply with a\n"
" success message when something's karma is increased or decreased."
msgstr ""
"Determina se il bot risponderà con un messaggio di successo quando\n"
" viene aumentato o diminuito il karma di qualcosa."
#: config.py:52
msgid ""
"Determines how many highest/lowest karma things\n"
" are shown when karma is called with no arguments."
msgstr ""
"Determina quanti karma più/meno vengono mostrati quando richiamato senza argomenti.\n"
#: config.py:55
msgid ""
"Determines how many karma things are shown when\n"
" the most command is called."
msgstr ""
"Determina quanti karma vengono mostrati richiamando il comando \"most\"."
#: config.py:58
msgid ""
"Determines whether users can adjust the karma\n"
" of their nick."
msgstr ""
"Determina se gli utenti possano modificare il karma del loro nick."
#: config.py:61
msgid ""
"Determines whether the bot will\n"
" increase/decrease karma without being addressed."
msgstr ""
"Determina se il bot aumenterà o diminuirà il karma senza essere richiamato."
#: plugin.py:247 plugin.py:255
msgid "You're not allowed to adjust your own karma."
msgstr "Non ti è permesso di modificare il tuo karma."
#: plugin.py:284
#, 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 things. <channel> is only necessary\n"
" if the message isn't sent on the channel itself.\n"
" "
msgstr ""
"[<canale>] [<oggetto> ...]\n"
"\n"
" Riporta il karma di <oggetto>. Se <oggetto> non è fornito, restituisce i primi\n"
" N karma, dove N è determinato dalla variabile supybot.plugins.Karma.rankingDisplay.\n"
" Se viene specificato un <oggetto>, riporta i dettagli del suo karma; se ne vengono \n"
" indicati più di uno, riporta il numero totale di karma di ciascuno degli oggetti.\n"
" <canale> è necessario solo se il messaggio non viene inviato nel canale stesso.\n"
" "
#: plugin.py:297
msgid "%s has neutral karma."
msgstr "%s ha un karma neutro."
#: plugin.py:304
msgid "Karma for %q has been increased %n and decreased %n for a total karma of %s."
msgstr "Il karma per %q è stato aumentato di %n e diminuito di %n per un totale di %s."
#: plugin.py:306 plugin.py:307
msgid "time"
msgstr "volta"
#: plugin.py:320
msgid "I didn't know the karma for any of those things."
msgstr "Non conosco il karma di nessuno di questi oggetti."
#: plugin.py:330 plugin.py:359
msgid "I have no karma for this channel."
msgstr "Non ho karma per questo canale."
#: plugin.py:335
msgid " You (%s) are ranked %i out of %i."
msgstr " %s, sei valutato %i su %i."
#: plugin.py:339
msgid "Highest karma: %L. Lowest karma: %L.%s"
msgstr "Karma più alto: %L. Karma più basso: %L.%s"
#: plugin.py:347
#, 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 ""
"[<canale>] {increased,decreased,active}\n"
"\n"
" Riporta il karma maggiormente aumentato (increased), diminuito (decreased)\n"
", o più attivo (active) (la somma di aumentato e diminuito). <canale> è \n"
" necessario solo se il messaggio non viene inviato nel canale stesso.\n"
" "
#: plugin.py:365
#, docstring
msgid ""
"[<channel>] <name>\n"
"\n"
" Resets the karma of <name> to 0.\n"
" "
msgstr ""
"[<cannle>] <nome>\n"
"\n"
" Azzera i karma di <nome>.\n"
" "
#: plugin.py:375
#, 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 ""
"[<canale>] <nomefile>\n"
"\n"
" Esporta il database dei karma di <canale> in <nomefile> nella directory dei dati\n"
" del bot. <canale> è necessario solo se il messaggio non viene inviato nel canale stesso.\n"
" "
#: plugin.py:387
#, 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 ""
"[<canale>] <filename>\n"
"\n"
" Carica il database dei karma di <canale> da <nomefile> nella directory dei dati\n"
" <canale> è necessario solo se il messaggio non viene inviato nel canale stesso.\n"
" "

View File

@ -64,7 +64,7 @@ msgid ""
" 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"
" the total karma of each of the things. <channel> is only necessary\n"
" if the message isn't sent on the channel itself.\n"
" "
msgstr ""

View File

@ -287,7 +287,7 @@ class Karma(callbacks.Plugin):
N karmas, where N is determined by the config variable
supybot.plugins.Karma.rankingDisplay. If one <thing> is given, returns
the details of its karma; if more than one <thing> is given, returns
the total karma of each of the the things. <channel> is only necessary
the total karma of each of the things. <channel> is only necessary
if the message isn't sent on the channel itself.
"""
if len(things) == 1:

165
plugins/Later/locale/it.po Normal file
View File

@ -0,0 +1,165 @@
msgid ""
msgstr ""
"Project-Id-Version: Supybot-fr\n"
"POT-Creation-Date: 2011-02-26 09:49+CET\n"
"PO-Revision-Date: 2011-06-26 18:57+0200\n"
"Last-Translator: skizzhg <skizzhg@gmx.com>\n"
"Language-Team: Italian <skizzhg@gmx.com>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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 ""
"Determina il numero massimo di messaggi da mettere in coda per un utente.\n"
" Se questo valore è uguale a 0, non c'è un limite massimo.\n"
" "
#: config.py:49
msgid ""
"Determines whether users will be notified in\n"
" the first place in which they're seen, or in private."
msgstr ""
"Determina se gli utenti riceveranno una nota nel primo luogo in cui sono visti o in privato."
#: config.py:52
msgid ""
"Determines whether users will be notified upon\n"
" joining any channel the bot is in, or only upon sending a message."
msgstr ""
"Determina se gli utenti riceveranno una nota entrando in qualsiasi canale\n"
" in cui è presente il bot o solo dopo aver inviato un messaggio."
#: config.py:55
msgid ""
"Determines the maximum number of\n"
" days that a message will remain queued for a user. After this time elapses,\n"
" the message will be deleted. If this value is 0, there is no maximum."
msgstr ""
"Determina il numero massimo di giorni che un messaggio rimarrà in coda per un utente. Allo scadere\n"
" di questo tempo il messaggio verrà cancellato. Se questo valore è uguale a 0, non c'è un limite massimo.\n"
#: 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 ""
"Utilizzato per fare cose in seguito; attualmente permette solo l'invio di note basate\n"
" sul nick. Nota (haha!) che queste note *non* sono private e non sono state progettate\n"
" per esserlo; se si vuole questa caratteristica, considerare l'utilizzo del plugin Note."
#: plugin.py:84
msgid "%s ago"
msgstr "%s fa"
#: plugin.py:86
msgid "just now"
msgstr "proprio ora"
#: plugin.py:106
#, docstring
msgid ""
"Validate nick according to the IRC RFC 2812 spec.\n"
"\n"
" Reference: http://tools.ietf.org/rfcmarkup?doc=2812#section-2.3.1\n"
"\n"
" Some irc clients' tab-completion feature appends 'address' characters\n"
" to nick, such as ':' or ','. We try correcting for that by trimming\n"
" a char off the end.\n"
"\n"
" If nick incorrigibly invalid, return False, otherwise,\n"
" return (possibly trimmed) nick.\n"
" "
msgstr ""
"Convalida il nick secondo la specifica IRC RFC 2812.\n"
"\n"
" Riferimento: http://tools.ietf.org/rfcmarkup?doc=2812#section-2.3.1\n"
"\n"
" Alcuni client IRC hanno l'autocompletamento del nick che aggiunge caratteri di\n"
" \"indirizzamento\" come \":\" o \",\" alla fine. Si cerca di correggere questo\n"
" comportamento tagliando un carattere al fondo.\n"
"\n"
" Se il nick non è valido restituisce False, altrimenti lo riporta (possibilmente tagliato).\n"
" "
#: plugin.py:151
#, 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 ""
"<nick> <testo>\n"
"\n"
" Riferisce <testo> a <nick> la prima volta che lo vede. <nick> può contenere\n"
" caratteri jolly, il primo che corrisponde riceverà la notifica.\n"
" "
#: plugin.py:159
msgid "I can't send notes to myself."
msgstr "Non posso inviare note a me stesso."
#: plugin.py:169
msgid "That person's message queue is already full."
msgstr "La coda dei messaggi di quell'utente è già piena."
#: plugin.py:174
#, 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 ""
"[<nick>]\n"
"\n"
" Se <nick> è fornito, risponde con le note in coda per <nick>,\n"
" altrimenti con i nick che hanno note in coda.\n"
" "
#: plugin.py:185
msgid "I have no notes for that nick."
msgstr "Non ho note per quel nick."
#: plugin.py:190
msgid "I currently have notes waiting for %L."
msgstr "Al momento non ho note in coda per %L."
#: plugin.py:193
msgid "I have no notes waiting to be delivered."
msgstr "Non ho note in attesa di essere consegnate."
#: plugin.py:198
#, docstring
msgid ""
"<nick>\n"
"\n"
" Removes the notes waiting on <nick>.\n"
" "
msgstr ""
"<nick>\n"
"\n"
" Rimuove le note in coda per <nick>.\n"
" "
#: plugin.py:207
msgid "There were no notes for %r"
msgstr "Non ci sono note per %r"
#: plugin.py:231
msgid "Sent %s: <%s> %s"
msgstr "Inviata %s: <%s> %s"

View File

@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Supybot-fr\n"
"POT-Creation-Date: 2010-10-29 14:47+CEST\n"
"POT-Creation-Date: 2011-02-26 09:49+CET\n"
"PO-Revision-Date: \n"
"Last-Translator: Valentin Lorentz <progval@gmail.com>\n"
"Language-Team: Supybot-fr <progval@gmail.com>\n"
@ -13,7 +13,7 @@ msgstr ""
"X-Poedit-Country: France\n"
"X-Poedit-SourceCharset: ASCII\n"
#: plugin.py:270
#: plugin.py:273
msgid ""
"<text>\n"
"\n"
@ -25,7 +25,7 @@ msgstr ""
"\n"
"Log le <texte> aux logs globaux de Supybot avec une priorité critique. Utile pour marquer les fichiers de logs pour des recherches ultérieures."
#: plugin.py:280
#: plugin.py:283
msgid ""
"<text>\n"
"\n"
@ -37,7 +37,7 @@ msgstr ""
"\n"
"Envoie le <texte> à tous les canaux sur lesquels le bot est sans être lobotomisé."
#: plugin.py:295
#: plugin.py:298
msgid ""
"[--remove] <command> [<plugin>]\n"
"\n"
@ -51,7 +51,7 @@ msgstr ""
"\n"
"Défini le <plugin> par défaut de la <commande>. Si --remove est donné, le commande par défaut actuelle est supprimée. Si aucun plugin n'est donné, retourne le plugin par défaut actuel. Voyez supybot.commands.defaultPlugins.importantPlugins pour plus d'informations."
#: plugin.py:333
#: plugin.py:336
msgid ""
"<string to be sent to the server>\n"
"\n"
@ -62,7 +62,7 @@ msgstr ""
"\n"
"Envoie la chaîne directement au serveur."
#: plugin.py:347
#: plugin.py:350
msgid ""
"[<text>]\n"
"\n"
@ -75,7 +75,7 @@ msgstr ""
"\n"
"Fait quitter le bot avec le message de quit <texte>. Si le <texte> n'est pas donné, le message de quit par défaut (supybot.plugins.Owner.quitMsg) est utilisé. Si quitMsg est vide, votre nick sera utilisé."
#: plugin.py:363
#: plugin.py:366
msgid ""
"takes no arguments\n"
"\n"
@ -87,7 +87,7 @@ msgstr ""
"\n"
"Lance tous les 'flushers' périodiques dans world.flushers. Ceci inclue l'écriture des logs et de la configuration sur le disque."
#: plugin.py:373
#: plugin.py:376
msgid ""
"[<level>]\n"
"\n"
@ -101,7 +101,7 @@ msgstr ""
"\n"
"Renvoie le 'upkeep' standard (flushes et gc.collect()). Si un niveau est donné, lance le niveau d'upkeep (actuellement, le seul niveau supporté est \"high\", ce qui fait que le bot vide beaucoup plus de cache que ce qu'il fait normalement)."
#: plugin.py:412
#: plugin.py:415
msgid ""
"[--deprecated] <plugin>\n"
"\n"
@ -115,7 +115,7 @@ msgstr ""
"\n"
"Charge le <plugin> de n'importe lequel des répertoires dans conf.supybot.directories.plugins, ce qui inclue généralement le répertoire principal de l'installation, et 'plugins' dans le répertoire courrant. Utilisez --deprected si nécessaire pour charger des plugins dépréciés."
#: plugin.py:447
#: plugin.py:450
msgid ""
"<plugin>\n"
"\n"
@ -127,7 +127,7 @@ msgstr ""
"\n"
"Décharger et recharge immédiatement le <plugin> ; utilisez la commande 'list' pour lister les plugins actuellement chargés."
#: plugin.py:476
#: plugin.py:479
msgid ""
"<plugin>\n"
"\n"
@ -140,7 +140,7 @@ msgstr ""
"\n"
"Décharger le <plugin> ; utilisez la commande 'list' pour lister les plugins actuellement chargés. Évidemment, le plugin Owner ne peut être déchargé."
#: plugin.py:500
#: plugin.py:503
msgid ""
"{add|remove} <capability>\n"
"\n"
@ -153,7 +153,7 @@ msgstr ""
"\n"
"Ajoute ou supprime (en fonction du premier argument) la <capacité> à la liste des capacités par défaut données aux utilisateurs (stockée dans la variable de configuration supybot.capabilities)."
#: plugin.py:525
#: plugin.py:528
msgid ""
"[<plugin>] <command>\n"
"\n"
@ -168,7 +168,7 @@ msgstr ""
"\n"
"Désactive la <commande> pour tous les utilisateurs (y compris le propriétaire. Si le <plugin> est donné, ne désactive la <commande> que pour le <plugin>. Si vous voulez désactiver la commande pour tous les utilisateurs sauf vous-même, définissez la capacité par défaut -plugin.command ou -command."
#: plugin.py:552
#: plugin.py:555
msgid ""
"[<plugin>] <command>\n"
"\n"
@ -181,7 +181,7 @@ msgstr ""
"\n"
"Active la <commande> pour tous les utilisateurs. Si le <plugin> est donné, ne réactive la <commande> que pour le <plugin>. Cette commande est l'inverse de disable."
#: plugin.py:571
#: plugin.py:574
msgid ""
"<plugin> <command> <new name>\n"
"\n"
@ -192,7 +192,7 @@ msgstr ""
"\n"
"Renomme la <commande> du <plugin> par un <nouveau nom>."
#: plugin.py:588
#: plugin.py:591
msgid ""
"<plugin>\n"
"\n"
@ -204,3 +204,13 @@ msgstr ""
"\n"
"Supprime tous les renommages du <plugin>. Ce plugin sera rechargé après que cette commande ait été lancée."
#: plugin.py:604
msgid ""
"takes no argument\n"
"\n"
" Reloads the locale of the bot."
msgstr ""
"ne prend pas d'argument\n"
"\n"
"Recharge la locale du bot."

View File

@ -389,7 +389,7 @@ class Relay(callbacks.Plugin):
return
network = self._getIrcName(irc)
if self.registryValue('hostmasks', channel):
hostmask = format(' (%s)', msg.prefix)
hostmask = format(' (%s)', msg.prefix.split('!')[1])
else:
hostmask = ''
s = format(_('%s%s has joined on %s'), msg.nick, hostmask, network)
@ -403,7 +403,7 @@ class Relay(callbacks.Plugin):
return
network = self._getIrcName(irc)
if self.registryValue('hostmasks', channel):
hostmask = format(' (%s)', msg.prefix)
hostmask = format(' (%s)', msg.prefix.split('!')[1])
else:
hostmask = ''
if len(msg.args) > 1:

View File

@ -479,7 +479,7 @@ class Topic(callbacks.Plugin):
irc.errorNoCapability(capabilities, Raise=True)
irc.queueMsg(ircmsgs.mode(channel, '+t'))
irc.noReply()
lock = wrap(lock, ['channel', ('haveOp', _('lock the topic'))])
lock = wrap(lock, ['channel', ('isGranted', _('lock the topic'))])
@internationalizeDocstring
def unlock(self, irc, msg, args, channel):
@ -493,7 +493,7 @@ class Topic(callbacks.Plugin):
irc.errorNoCapability(capabilities, Raise=True)
irc.queueMsg(ircmsgs.mode(channel, '-t'))
irc.noReply()
unlock = wrap(unlock, ['channel', ('haveOp', _('unlock the topic'))])
unlock = wrap(unlock, ['channel', ('isGranted', _('unlock the topic'))])
@internationalizeDocstring
def restore(self, irc, msg, args, channel):

192
plugins/Web/locale/it.po Normal file
View File

@ -0,0 +1,192 @@
msgid ""
msgstr ""
"Project-Id-Version: Supybot-fr\n"
"POT-Creation-Date: 2011-02-26 09:49+CET\n"
"PO-Revision-Date: 2011-06-26 22:11+0200\n"
"Last-Translator: skizzhg <skizzhg@gmx.com>\n"
"Language-Team: Italian <skizzhg@gmx.com>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: config.py:50
msgid ""
"Determines whether the bot will output the\n"
" HTML title of URLs it sees in the channel."
msgstr ""
"Determina se il bot mostrerà il titolo HTML degli URL che vede in canale."
#: config.py:53
msgid ""
"Determines what URLs are to be snarfed and\n"
" stored in the database in the channel; URLs matching the regexp given will\n"
" not be snarfed. Give the empty string if you have no URLs that you'd like\n"
" to exclude from being snarfed."
msgstr ""
"Determina quali URL vanno intercettati e memorizzati nel database del canale;\n"
" quelli che corrispondono alla regexp fornita non verranno coinvolti.\n"
" Se non si vuole escludere alcun URL, fornire una stringa vuota.\n"
#: config.py:60
msgid ""
"Determines the maximum number of\n"
" bytes the bot will download via the 'fetch' command in this plugin."
msgstr ""
"Determina il numero massimo di byte che il bot scaricherà tramite il comando \"fetch\" di questo plugin."
#: plugin.py:71
#, docstring
msgid "Add the help for \"@help Web\" here."
msgstr ""
#: plugin.py:114
#, docstring
msgid ""
"<url>\n"
"\n"
" Returns the HTTP headers of <url>. Only HTTP urls are valid, of\n"
" course.\n"
" "
msgstr ""
"<url>\n"
"\n"
" Restituisce gli header HTTP di <url>. Naturalmente sono validi solo ULR HTTP.\n"
" "
#: plugin.py:121
msgid "%s: %s"
msgstr "%s: %s"
#: plugin.py:131
#, docstring
msgid ""
"<url>\n"
"\n"
" Returns the DOCTYPE string of <url>. Only HTTP urls are valid, of\n"
" course.\n"
" "
msgstr ""
"<url>\n"
"\n"
" Restituisce la stringa DOCTYPE di <url>. Naturalmente sono validi solo ULR HTTP.\n"
" "
#: plugin.py:143
msgid "That URL has no specified doctype."
msgstr "Questo URL non doctype specificato."
#: plugin.py:148
#, docstring
msgid ""
"<url>\n"
"\n"
" Returns the Content-Length header of <url>. Only HTTP urls are valid,\n"
" of course.\n"
" "
msgstr ""
"<url>\n"
"\n"
" Restituisce l'header Content-Length di <url>. Naturalmente sono validi solo ULR HTTP.\n"
" "
#: plugin.py:157 plugin.py:162
msgid "%u is %S long."
msgstr "%u è lungo %S."
#: plugin.py:164
msgid "The server didn't tell me how long %u is but it's longer than %S."
msgstr "Il server non mi ha detto quanto sia lungo %u ma è più di %S."
#: plugin.py:173
#, docstring
msgid ""
"<url>\n"
"\n"
" Returns the HTML <title>...</title> of a URL.\n"
" "
msgstr ""
"<url>\n"
"\n"
" Restituisce il tag HTML <title>...</title> di un URL.\n"
" "
#: plugin.py:188
msgid "That URL appears to have no HTML title."
msgstr "Questo URL sembra non avere un titolo HTML."
#: plugin.py:190
msgid "That URL appears to have no HTML title within the first %S."
msgstr "Questo URL sembra non avere un titolo HTML entro i primi %S."
#: plugin.py:198
#, docstring
msgid ""
"<hostname|ip>\n"
"\n"
" Returns Netcraft.com's determination of what operating system and\n"
" webserver is running on the host given.\n"
" "
msgstr ""
"<hostname|ip>\n"
"\n"
" Riporta la stima di Netcraft.com riguardo a quale sistema\n"
" operativo e server web girano sull'host richiesto.\n"
" "
#: plugin.py:212
msgid "No results found for %s."
msgstr "Nessun risultato trovato per %s."
#: plugin.py:214
msgid "The format of page the was odd."
msgstr "Il formato della pagina è strano."
#: plugin.py:219
#, docstring
msgid ""
"<text>\n"
"\n"
" Returns the URL quoted form of the text.\n"
" "
msgstr ""
"<text>\n"
"\n"
" Codifica il testo in base alla codifica URL.\n"
" "
#: plugin.py:228
#, docstring
msgid ""
"<text>\n"
"\n"
" Returns the text un-URL quoted.\n"
" "
msgstr ""
"<text>\n"
"\n"
" Decodifica il testo codificato secondo la codifica URL.\n"
" "
#: plugin.py:238
#, docstring
msgid ""
"<url>\n"
"\n"
" Returns the contents of <url>, or as much as is configured in\n"
" supybot.plugins.Web.fetch.maximum. If that configuration variable is\n"
" set to 0, this command will be effectively disabled.\n"
" "
msgstr ""
"<url>\n"
"\n"
" Riporta il contenuto di <url>, o tanti byte quanti sono definiti in\n"
" supybot.plugins.Web.fetch.maximum. Se questa variabile è impostata a 0,\n"
" il comando sarà disabilitato.\n"
" "
#: plugin.py:246
msgid "This command is disabled (supybot.plugins.Web.fetch.maximum is set to 0)."
msgstr "Questo comando è disabilitato (supybot.plugins.Web.fetch.maximum è impostata a 0)."

View File

@ -154,7 +154,7 @@ class Web(callbacks.PluginRegexp):
try:
try:
size = fd.headers['Content-Length']
irc.reply(format(_('%u is %S long.'), url, size))
irc.reply(format(_('%u is %S long.'), url, int(size)))
except KeyError:
size = conf.supybot.protocols.http.peekSize()
s = fd.read(size)

56
sandbox/check_trans.py Executable file
View File

@ -0,0 +1,56 @@
#!/usr/bin/env python
import os
import sys
def main():
directory = sys.argv[1]
for plugin in os.listdir(directory):
if plugin[0] not in 'AZERTYUIOPQSDFGHJKLMWXCVBN':
continue
checkPlugin(os.path.join(directory, plugin))
def checkPlugin(pluginPath):
try:
pot = open(os.path.join(pluginPath, 'messages.pot'))
except IOError: # Does not exist
print 'WARNING: %s has no messages.pot' % pluginPath
return
localePath = os.path.join(pluginPath, 'locale')
for translation in os.listdir(localePath):
if not translation.endswith('.po'):
continue
pot.seek(0)
potPath = os.path.join(localePath, translation)
po = open(potPath)
if checkTranslation(pot, po):
print 'OK: ' + potPath
else:
print 'ERROR: ' + potPath
def checkTranslation(pot, po):
checking = False
for potLine in pot:
if not checking and potLine.startswith('msgid'):
checking = True
while True:
poLine = po.readline()
if poLine == '': # EOF
return False
if poLine.startswith('msgid'):
if poLine == potLine:
break
else:
return False
continue
elif checking and potLine.startswith('msgstr'):
checking = False
if checking:
poLine = po.readline()
if potLine != poLine:
return False
return True
if __name__ == '__main__':
main()

View File

@ -332,7 +332,7 @@ if __name__ == '__main__':
# These may take some resources, and it does not need to be run while boot, so
# we import it as late as possible (but before plugins are loaded).
import supybot.utils.httpserver as httpserver
import supybot.httpserver as httpserver
owner = Owner.Class()

View File

@ -252,6 +252,22 @@ def getNetworkIrc(irc, msg, args, state, errorIfNoMatch=False):
else:
state.args.append(irc)
def getHaveVoice(irc, msg, args, state, action=_('do that')):
if not state.channel:
getChannel(irc, msg, args, state)
if state.channel not in irc.state.channels:
state.error(_('I\'m not even in %s.') % state.channel, Raise=True)
if not irc.state.channels[state.channel].isVoice(irc.nick):
state.error(_('I need to be voiced to %s.') % action, Raise=True)
def getHaveHalfop(irc, msg, args, state, action=_('do that')):
if not state.channel:
getChannel(irc, msg, args, state)
if state.channel not in irc.state.channels:
state.error(_('I\'m not even in %s.') % state.channel, Raise=True)
if not irc.state.channels[state.channel].isHalfop(irc.nick):
state.error(_('I need to be halfopped to %s.') % action, Raise=True)
def getHaveOp(irc, msg, args, state, action=_('do that')):
if not state.channel:
getChannel(irc, msg, args, state)
@ -260,6 +276,17 @@ def getHaveOp(irc, msg, args, state, action=_('do that')):
if not irc.state.channels[state.channel].isOp(irc.nick):
state.error(_('I need to be opped to %s.') % action, Raise=True)
def getIsGranted(irc, msg, args, state, action=_('do that')):
if not state.channel:
getChannel(irc, msg, args, state)
if state.channel not in irc.state.channels:
state.error(_('I\'m not even in %s.') % state.channel, Raise=True)
if not irc.state.channels[state.channel].isOp(irc.nick) and \
not irc.state.channels[state.channel].isHalfop(irc.nick):
# isOp includes owners and protected users
state.error(_('I need to be at least halfopped to %s.') % action,
Raise=True)
def validChannel(irc, msg, args, state):
if irc.isChannel(args[0]):
state.args.append(args.pop(0))
@ -591,6 +618,8 @@ wrappers = ircutils.IrcDict({
'banmask': getBanmask,
'boolean': getBoolean,
'callerInGivenChannel': callerInGivenChannel,
'isGranted': getIsGranted, # I know this name sucks, but I can't find
# something better
'capability': getSomethingNoSpaces,
'channel': getChannel,
'channelDb': getChannelDb,
@ -605,7 +634,9 @@ wrappers = ircutils.IrcDict({
'float': getFloat,
'glob': getGlob,
'halfop': getHalfop,
'haveHalfop': getHaveHalfop,
'haveOp': getHaveOp,
'haveVoice': getHaveVoice,
'hostmask': getHostmask,
'httpUrl': getHttpUrl,
'id': getId,

View File

@ -53,7 +53,7 @@ if world.testing:
self.RequestHandlerClass = handler
self.socket = StringIO()
self._notServing = Event()
self._notServer.set()
self._notServing.set()
def fileno(self):
return hash(self)
@ -132,7 +132,7 @@ class SupyHTTPServerCallback:
message, it probably means you are developping a plugin, and you have
neither overriden this message or defined an handler for this query.""")
def doGet(self, handler, path):
def doGet(self, handler, path, *args, **kwargs):
handler.send_response(400)
self.send_header('Content_type', 'text/plain')
self.send_header('Content-Length', len(self.defaultResponse))
@ -153,7 +153,7 @@ class Supy404(SupyHTTPServerCallback):
if I don't know what to serve.
What I'm saying is you just triggered a 404 Not Found, and I am not
trained to help you in such a case.""")
def doGet(self, handler, path):
def doGet(self, handler, path, *args, **kwargs):
handler.send_response(404)
self.send_header('Content_type', 'text/plain')
self.send_header('Content-Length', len(self.response))

View File

@ -308,6 +308,7 @@ class Value(Group):
self._default = default
self._showDefault = showDefault
self._help = utils.str.normalizeWhitespace(help.strip())
self._callbacks = []
if setDefault:
self.setValue(default)
@ -345,6 +346,19 @@ class Value(Group):
for (name, v) in self._children.items():
if v.__class__ is self.X:
self.unregister(name)
# We call the callback once everything is clean
for callback, args, kwargs in self._callbacks:
callback(*args, **kwargs)
def addCallback(self, callback, *args, **kwargs):
"""Add a callback to the list. A callback is a function that will be
called when the value is changed. You can give this function as many
extra arguments as you wish, they will be passed to the callback."""
self._callbacks.append((callback, args, kwargs))
def removeCallback(self, callback):
"""Remove all occurences of this callbacks from the callback list."""
self._callbacks = [x for x in self._callbacks if x[0] is not callback]
def __str__(self):
return repr(self())