diff --git a/plugins/AutoMode/locale/it.po b/plugins/AutoMode/locale/it.po index 7a1d22e12..05a7e9e86 100644 --- a/plugins/AutoMode/locale/it.po +++ b/plugins/AutoMode/locale/it.po @@ -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 \n" "Language-Team: Italian \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 "" diff --git a/plugins/AutoMode/plugin.py b/plugins/AutoMode/plugin.py index 001db84f1..6a1ddc82d 100644 --- a/plugins/AutoMode/plugin.py +++ b/plugins/AutoMode/plugin.py @@ -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 diff --git a/plugins/BadWords/locale/fr.po b/plugins/BadWords/locale/fr.po index 101478d6b..f602542ce 100644 --- a/plugins/BadWords/locale/fr.po +++ b/plugins/BadWords/locale/fr.po @@ -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 \n" "Language-Team: Supybot-fr \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 ?" diff --git a/plugins/BadWords/locale/it.po b/plugins/BadWords/locale/it.po new file mode 100644 index 000000000..87ac2a5e3 --- /dev/null +++ b/plugins/BadWords/locale/it.po @@ -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 \n" +"Language-Team: Italian \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 "" +" [ ...]\n" +"\n" +" Adds all s to the list of words being censored.\n" +" " +msgstr "" +" [ ...]\n" +"\n" +" Aggiunge all'elenco di quelle da censurare.\n" +" " + +#: plugin.py:140 +#, docstring +msgid "" +" [ ...]\n" +"\n" +" Removes s from the list of words being censored.\n" +" " +msgstr "" +" [ ...]\n" +"\n" +" Rimuove dall'elenco di quelle da censurare.\n" +" " + diff --git a/plugins/Channel/plugin.py b/plugins/Channel/plugin.py index f483c800b..27bba391e 100644 --- a/plugins/Channel/plugin.py +++ b/plugins/Channel/plugin.py @@ -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): diff --git a/plugins/ChannelStats/locale/fr.po b/plugins/ChannelStats/locale/fr.po index 9ed8d6201..e1bb71871 100644 --- a/plugins/ChannelStats/locale/fr.po +++ b/plugins/ChannelStats/locale/fr.po @@ -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 \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 "" +"[] []\n" +"\n" +" Returns the statistics for on . is only\n" +" necessary if the message isn't sent on the channel itself. If \n" +" isn't given, it defaults to the user sending the command.\n" +" " +msgstr "" +"[] [nom]\n" +"\n" +" Retourne les statistiques pour sur le . n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même. Si 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 "" 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 "" +"[] \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 "" +"[] \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 "" +"[]\n" +"\n" +" Returns the statistics for . is only necessary if\n" +" the message isn't sent on the channel itself.\n" +" " +msgstr "" +"[canal]\n" +"\n" +"Retourne les statistiques pour le . 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 "" -#~ "[] []\n" -#~ "\n" -#~ " Returns the statistics for on . is " -#~ "only\n" -#~ " necessary if the message isn't sent on the channel itself. If " -#~ "\n" -#~ " isn't given, it defaults to the user sending the command.\n" -#~ " " -#~ msgstr "" -#~ "[] [nom]\n" -#~ "\n" -#~ " Retourne les statistiques pour sur le . n'est " -#~ "nécessaire que si le message n'est pas envoyé sur le canal lui-même. Si " -#~ " n'est pas donné, il correspond par défaut à l'utilisateur envoyant " -#~ "la commande" -#~ msgid "" -#~ "[] \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 "" -#~ "[] \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 "" -#~ "[]\n" -#~ "\n" -#~ " Returns the statistics for . is only " -#~ "necessary if\n" -#~ " the message isn't sent on the channel itself.\n" -#~ " " -#~ msgstr "" -#~ "[canal]\n" -#~ "\n" -#~ "Retourne les statistiques pour le . n'est nécessaire que " -#~ "si le message n'est pas envoyé sur le canal lui-même." - diff --git a/plugins/Config/locale/it.po b/plugins/Config/locale/it.po new file mode 100644 index 000000000..d05683704 --- /dev/null +++ b/plugins/Config/locale/it.po @@ -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 \n" +"Language-Team: Italian \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 "" +"\n" +"\n" +" Returns the configuration variables available under the given\n" +" configuration . 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 "" +"\n" +"\n" +" Riporta le variabili di configurazione disponibili per il dato \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 "" +"\n" +"\n" +" Searches for in the current configuration variables.\n" +" " +msgstr "" +"\n" +"\n" +" Cerca 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 "" +"[] []\n" +"\n" +" If is given, sets the channel configuration variable for \n" +" to for . Otherwise, returns the current channel\n" +" configuration value of . is only necessary if the\n" +" message isn't sent in the channel itself." +msgstr "" +"[] []\n" +"\n" +" Se è fornito, imposta la variabile di configurazione \n" +" a per . Altrimenti restituisce l'attuale valore di\n" +" configurazione di . è 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 "" +" []\n" +"\n" +" If is given, sets the value of to . Otherwise,\n" +" returns the current value of . You may omit the leading\n" +" \"supybot.\" in the name if you so choose.\n" +" " +msgstr "" +" []\n" +"\n" +" Se è fornito, imposta il valore di a . Altrimenti riporta\n" +" l'attuale valore di . È possibile omettere \"supybot.\" prima del nome.\n" +" " + +#: plugin.py:234 +#, docstring +msgid "" +"\n" +"\n" +" Returns the description of the configuration variable .\n" +" " +msgstr "" +"\n" +"\n" +" Riporta la descrizione della variabile di configurazione .\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 "" +"\n" +"\n" +" Returns the default value of the configuration variable .\n" +" " +msgstr "" +"\n" +"\n" +" Riporta il valore predefinito della variabile di configurazione .\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 "" +"\n" +"\n" +" Exports the public variables of your configuration to .\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 "" +"\n" +"\n" +" Esporta le variabili di configurazione in . 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" +" " + diff --git a/plugins/Dict/locale/it.po b/plugins/Dict/locale/it.po index e1845f28e..2c13fa596 100644 --- a/plugins/Dict/locale/it.po +++ b/plugins/Dict/locale/it.po @@ -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 \n" "Language-Team: Italian \n" "Language: it\n" @@ -96,18 +96,20 @@ msgstr "%L ha risposto: %s" #, docstring msgid "" " [ ...]\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 "" " [ ...]\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" " " diff --git a/plugins/Format/locale/it.po b/plugins/Format/locale/it.po new file mode 100644 index 000000000..bb0c18d13 --- /dev/null +++ b/plugins/Format/locale/it.po @@ -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 \n" +"Language-Team: Italian \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 "" +"\n" +"\n" +" Returns bolded.\n" +" " +msgstr "" +"\n" +"\n" +" Restituisce in grassetto.\n" +" " + +#: plugin.py:52 +#, docstring +msgid "" +"\n" +"\n" +" Returns in reverse-video.\n" +" " +msgstr "" +"\n" +"\n" +" Restituisce in negativo.\n" +" " + +#: plugin.py:61 +#, docstring +msgid "" +"\n" +"\n" +" Returns underlined.\n" +" " +msgstr "" +"\n" +"\n" +" Restituisce sottolineato.\n" +" " + +#: plugin.py:70 +#, docstring +msgid "" +" [] \n" +"\n" +" Returns with foreground color and background color\n" +" (if given)\n" +" " +msgstr "" +" [] \n" +"\n" +" Restituisce con colore e colore di fondo (se specificato)\n" +" " + +#: plugin.py:80 +#, docstring +msgid "" +" [ ...]\n" +"\n" +" Joins all the arguments together with .\n" +" " +msgstr "" +" [ ...]\n" +"\n" +" Unisce tutti gli argomenti con .\n" +" " + +#: plugin.py:89 +#, docstring +msgid "" +" \n" +"\n" +" Replaces with in\n" +" . The first and second arguments must necessarily be the same\n" +" length.\n" +" " +msgstr "" +" \n" +"\n" +" Sostituisce con in .\n" +" Il primo e il secondo argomento devono essere obbligatoriamente della stessa lunghezza.\n" +" " + +#: plugin.py:96 +msgid " must be the same length as ." +msgstr " devono essere della stessa lunghezza di ." + +#: plugin.py:103 +#, docstring +msgid "" +" \n" +"\n" +" Replaces all non-overlapping occurrences of \n" +" with in .\n" +" " +msgstr "" +" \n" +"\n" +" Sostituisce tutte le occorrenze di (a condizione\n" +" che non entrino in conflitto) con in .\n" +" " + +#: plugin.py:112 +#, docstring +msgid "" +"\n" +"\n" +" Returns uppercased.\n" +" " +msgstr "" +"\n" +"\n" +" Restituisce tutto maiuscolo.\n" +" " + +#: plugin.py:121 +#, docstring +msgid "" +"\n" +"\n" +" Returns lowercased.\n" +" " +msgstr "" +"\n" +"\n" +" Restituisce minuscolo.\n" +" " + +#: plugin.py:130 +#, docstring +msgid "" +"\n" +"\n" +" Returns capitalized.\n" +" " +msgstr "" +"\n" +"\n" +" Restituisce maiuscolo.\n" +" " + +#: plugin.py:139 +#, docstring +msgid "" +"\n" +"\n" +" Returns titlecased.\n" +" " +msgstr "" +"\n" +"\n" +" Restituisce con tutte le prime lettere delle parole in maiuscolo.\n" +" " + +#: plugin.py:148 +#, docstring +msgid "" +"\n" +"\n" +" Returns surrounded by double quotes.\n" +" " +msgstr "" +"\n" +"\n" +" Restituisce tra virgolette doppie.\n" +" " + +#: plugin.py:157 +#, docstring +msgid "" +" \n" +"\n" +" Concatenates two strings. Do keep in mind that this is *not* the same\n" +" thing as join \"\", since if contains spaces, they won't be\n" +" removed by concat.\n" +" " +msgstr "" +" \n" +"\n" +" Concatena due stringhe. Notare che non è come unire con \"\", dal momento\n" +" che se contiene spazi, questi non verranno rimossi da concat.\n" +" " + +#: plugin.py:168 +#, docstring +msgid "" +" \n" +"\n" +" Cuts down to by chopping off the rightmost characters in\n" +" excess of . If is a negative number, it chops that many\n" +" characters off the end of .\n" +" " +msgstr "" +" \n" +"\n" +" Taglia a rimuovendo i caratteri in eccesso più a\n" +" destra di . Se è un numero negativo, rimuove \n" +" i caratteri alla fine di .\n" +" " + +#: plugin.py:179 +#, docstring +msgid "" +" \n" +"\n" +" Returns the th space-separated field of . I.e., if text\n" +" is \"foo bar baz\" and is 2, \"bar\" is returned.\n" +" " +msgstr "" +" \n" +"\n" +" Riporta i campi (separati da spazi) di . Ovvero se il\n" +" testo è \"foo bar baz\" e è 2, verrà mostrato \"bar\".\n" +" " + +#: plugin.py:192 +#, docstring +msgid "" +" [ ...]\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 "" +" [ ...]\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." + diff --git a/plugins/Herald/locale/it.po b/plugins/Herald/locale/it.po new file mode 100644 index 000000000..dd5e96602 --- /dev/null +++ b/plugins/Herald/locale/it.po @@ -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 \n" +"Language-Team: Italian \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 "" +"[] [--remove|]\n" +"\n" +" If is given, sets the default herald to . A of \"\"\n" +" will remove the default herald. If is not given, returns the\n" +" current default herald. is only necessary if the message\n" +" isn't sent in the channel itself.\n" +" " +msgstr "" +"[] [--remove|]\n" +"\n" +" Se è fornito, imposta l'annuncio predefinito a .\n" +" Un nella forma \"\" rimuoverà il predefinito. Se \n" +" non è specificato, restituisce l'attuale annuncio. è 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 "" +"[] []\n" +"\n" +" Returns the current herald message for (or the user\n" +" is currently identified or recognized as). If \n" +" is not given, defaults to the user giving the command. \n" +" is only necessary if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[] []\n" +"\n" +" Restituisce l'attuale annuncio per (o con cui\n" +" è attualmente identificato). Se non è specificato, passa a quello\n" +" che ha dato il comando. è 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 "" +"[] \n" +"\n" +" Sets the herald message for (or the user is\n" +" currently identified or recognized as) to . is only\n" +" necessary if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[] \n" +"\n" +" Imposta l'annuncio per (o con cui è attualmente\n" +" identificato) a . è necessario solo se il messaggio\n" +" non viene inviato nel canale stesso.\n" +" " + +#: plugin.py:214 +#, docstring +msgid "" +"[] []\n" +"\n" +" Removes the herald message set for , or the user\n" +" is currently identified or recognized as. If \n" +" is not given, defaults to the user giving the command.\n" +" is only necessary if the message isn't sent in the channel\n" +" itself.\n" +" " +msgstr "" +"[] []\n" +"\n" +" Rimuove l'annuncio per o con cui è attualmente\n" +" identificato. Se non è specificato, passa a quello che ha dato il comando.\n" +" è 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 "" +"[] [] \n" +"\n" +" Changes the herald message for , or the user is\n" +" currently identified or recognized as, according to . If\n" +" is not given, defaults to the calling user. is only\n" +" necessary if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[] [] \n" +"\n" +" Modifica l'annuncio per , o con cui è attualmente\n" +" identificato, in base a . Se non è specificato, passa a quello\n" +" che ha dato il comando. è necessario solo se il messaggio non viene\n" +" inviato nel canale stesso.\n" +" " + diff --git a/plugins/Herald/plugin.py b/plugins/Herald/plugin.py index 833208ae8..b398362d1 100644 --- a/plugins/Herald/plugin.py +++ b/plugins/Herald/plugin.py @@ -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() diff --git a/plugins/Karma/locale/fi.po b/plugins/Karma/locale/fi.po index 3127e99fc..4ca1021e1 100644 --- a/plugins/Karma/locale/fi.po +++ b/plugins/Karma/locale/fi.po @@ -75,7 +75,7 @@ msgid "" " N karmas, where N is determined by the config variable\n" " supybot.plugins.Karma.rankingDisplay. If one is given, returns\n" " the details of its karma; if more than one is given, returns\n" -" the total karma of each of the the things. is only necessary\n" +" the total karma of each of the things. is only necessary\n" " if the message isn't sent on the channel itself.\n" " " msgstr "" diff --git a/plugins/Karma/locale/fr.po b/plugins/Karma/locale/fr.po index 6daa8c964..6c13cc654 100644 --- a/plugins/Karma/locale/fr.po +++ b/plugins/Karma/locale/fr.po @@ -62,7 +62,7 @@ msgid "" " N karmas, where N is determined by the config variable\n" " supybot.plugins.Karma.rankingDisplay. If one is given, returns\n" " the details of its karma; if more than one is given, returns\n" -" the total karma of each of the the things. is only necessary\n" +" the total karma of each of the things. is only necessary\n" " if the message isn't sent on the channel itself.\n" " " msgstr "" diff --git a/plugins/Karma/locale/it.po b/plugins/Karma/locale/it.po new file mode 100644 index 000000000..905b5a6ee --- /dev/null +++ b/plugins/Karma/locale/it.po @@ -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 \n" +"Language-Team: Italian \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 "" +"[] [ ...]\n" +"\n" +" Returns the karma of . If is not given, returns the top\n" +" N karmas, where N is determined by the config variable\n" +" supybot.plugins.Karma.rankingDisplay. If one is given, returns\n" +" the details of its karma; if more than one is given, returns\n" +" the total karma of each of the things. is only necessary\n" +" if the message isn't sent on the channel itself.\n" +" " +msgstr "" +"[] [ ...]\n" +"\n" +" Riporta il karma di . Se non è fornito, restituisce i primi\n" +" N karma, dove N è determinato dalla variabile supybot.plugins.Karma.rankingDisplay.\n" +" Se viene specificato un , 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" +" è 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 "" +"[] {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. is only\n" +" necessary if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[] {increased,decreased,active}\n" +"\n" +" Riporta il karma maggiormente aumentato (increased), diminuito (decreased)\n" +", o più attivo (active) (la somma di aumentato e diminuito). è \n" +" necessario solo se il messaggio non viene inviato nel canale stesso.\n" +" " + +#: plugin.py:365 +#, docstring +msgid "" +"[] \n" +"\n" +" Resets the karma of to 0.\n" +" " +msgstr "" +"[] \n" +"\n" +" Azzera i karma di .\n" +" " + +#: plugin.py:375 +#, docstring +msgid "" +"[] \n" +"\n" +" Dumps the Karma database for to in the bot's\n" +" data directory. is only necessary if the message isn't sent\n" +" in the channel itself.\n" +" " +msgstr "" +"[] \n" +"\n" +" Esporta il database dei karma di in nella directory dei dati\n" +" del bot. è necessario solo se il messaggio non viene inviato nel canale stesso.\n" +" " + +#: plugin.py:387 +#, docstring +msgid "" +"[] \n" +"\n" +" Loads the Karma database for from in the bot's\n" +" data directory. is only necessary if the message isn't sent\n" +" in the channel itself.\n" +" " +msgstr "" +"[] \n" +"\n" +" Carica il database dei karma di da nella directory dei dati\n" +" è necessario solo se il messaggio non viene inviato nel canale stesso.\n" +" " + diff --git a/plugins/Karma/messages.pot b/plugins/Karma/messages.pot index 19a85d552..2e2581232 100644 --- a/plugins/Karma/messages.pot +++ b/plugins/Karma/messages.pot @@ -64,7 +64,7 @@ msgid "" " N karmas, where N is determined by the config variable\n" " supybot.plugins.Karma.rankingDisplay. If one is given, returns\n" " the details of its karma; if more than one is given, returns\n" -" the total karma of each of the the things. is only necessary\n" +" the total karma of each of the things. is only necessary\n" " if the message isn't sent on the channel itself.\n" " " msgstr "" diff --git a/plugins/Karma/plugin.py b/plugins/Karma/plugin.py index dd2b4e0a6..375770619 100644 --- a/plugins/Karma/plugin.py +++ b/plugins/Karma/plugin.py @@ -287,7 +287,7 @@ class Karma(callbacks.Plugin): N karmas, where N is determined by the config variable supybot.plugins.Karma.rankingDisplay. If one is given, returns the details of its karma; if more than one is given, returns - the total karma of each of the the things. is only necessary + the total karma of each of the things. is only necessary if the message isn't sent on the channel itself. """ if len(things) == 1: diff --git a/plugins/Later/locale/it.po b/plugins/Later/locale/it.po new file mode 100644 index 000000000..cfda95fb1 --- /dev/null +++ b/plugins/Later/locale/it.po @@ -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 \n" +"Language-Team: Italian \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 "" +" \n" +"\n" +" Tells the next time is in seen. can\n" +" contain wildcard characters, and the first matching nick will be\n" +" given the note.\n" +" " +msgstr "" +" \n" +"\n" +" Riferisce a la prima volta che lo vede. 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 "" +"[]\n" +"\n" +" If is given, replies with what notes are waiting on ,\n" +" otherwise, replies with the nicks that have notes waiting for them.\n" +" " +msgstr "" +"[]\n" +"\n" +" Se è fornito, risponde con le note in coda per ,\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 "" +"\n" +"\n" +" Removes the notes waiting on .\n" +" " +msgstr "" +"\n" +"\n" +" Rimuove le note in coda per .\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" + diff --git a/plugins/Owner/locale/fr.po b/plugins/Owner/locale/fr.po index 87cd7cdd9..ea3500f3c 100644 --- a/plugins/Owner/locale/fr.po +++ b/plugins/Owner/locale/fr.po @@ -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 \n" "Language-Team: Supybot-fr \n" @@ -13,7 +13,7 @@ msgstr "" "X-Poedit-Country: France\n" "X-Poedit-SourceCharset: ASCII\n" -#: plugin.py:270 +#: plugin.py:273 msgid "" "\n" "\n" @@ -25,7 +25,7 @@ msgstr "" "\n" "Log le 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 "" "\n" "\n" @@ -37,7 +37,7 @@ msgstr "" "\n" "Envoie le à tous les canaux sur lesquels le bot est sans être lobotomisé." -#: plugin.py:295 +#: plugin.py:298 msgid "" "[--remove] []\n" "\n" @@ -51,7 +51,7 @@ msgstr "" "\n" "Défini le par défaut de la . 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 "" "\n" "\n" @@ -62,7 +62,7 @@ msgstr "" "\n" "Envoie la chaîne directement au serveur." -#: plugin.py:347 +#: plugin.py:350 msgid "" "[]\n" "\n" @@ -75,7 +75,7 @@ msgstr "" "\n" "Fait quitter le bot avec le message de quit . Si le 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 "" "[]\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] \n" "\n" @@ -115,7 +115,7 @@ msgstr "" "\n" "Charge le 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 "" "\n" "\n" @@ -127,7 +127,7 @@ msgstr "" "\n" "Décharger et recharge immédiatement le ; utilisez la commande 'list' pour lister les plugins actuellement chargés." -#: plugin.py:476 +#: plugin.py:479 msgid "" "\n" "\n" @@ -140,7 +140,7 @@ msgstr "" "\n" "Décharger le ; 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} \n" "\n" @@ -153,7 +153,7 @@ msgstr "" "\n" "Ajoute ou supprime (en fonction du premier argument) la à 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 "" "[] \n" "\n" @@ -168,7 +168,7 @@ msgstr "" "\n" "Désactive la pour tous les utilisateurs (y compris le propriétaire. Si le est donné, ne désactive la que pour le . 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 "" "[] \n" "\n" @@ -181,7 +181,7 @@ msgstr "" "\n" "Active la pour tous les utilisateurs. Si le est donné, ne réactive la que pour le . Cette commande est l'inverse de disable." -#: plugin.py:571 +#: plugin.py:574 msgid "" " \n" "\n" @@ -192,7 +192,7 @@ msgstr "" "\n" "Renomme la du par un ." -#: plugin.py:588 +#: plugin.py:591 msgid "" "\n" "\n" @@ -204,3 +204,13 @@ msgstr "" "\n" "Supprime tous les renommages du . 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." + diff --git a/plugins/Relay/plugin.py b/plugins/Relay/plugin.py index 6fe419589..02ac1625c 100644 --- a/plugins/Relay/plugin.py +++ b/plugins/Relay/plugin.py @@ -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: diff --git a/plugins/Topic/plugin.py b/plugins/Topic/plugin.py index 757ed3625..d3bfa1862 100644 --- a/plugins/Topic/plugin.py +++ b/plugins/Topic/plugin.py @@ -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): diff --git a/plugins/Web/locale/it.po b/plugins/Web/locale/it.po new file mode 100644 index 000000000..3352d943f --- /dev/null +++ b/plugins/Web/locale/it.po @@ -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 \n" +"Language-Team: Italian \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 "" +"\n" +"\n" +" Returns the HTTP headers of . Only HTTP urls are valid, of\n" +" course.\n" +" " +msgstr "" +"\n" +"\n" +" Restituisce gli header HTTP di . Naturalmente sono validi solo ULR HTTP.\n" +" " + +#: plugin.py:121 +msgid "%s: %s" +msgstr "%s: %s" + +#: plugin.py:131 +#, docstring +msgid "" +"\n" +"\n" +" Returns the DOCTYPE string of . Only HTTP urls are valid, of\n" +" course.\n" +" " +msgstr "" +"\n" +"\n" +" Restituisce la stringa DOCTYPE di . 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 "" +"\n" +"\n" +" Returns the Content-Length header of . Only HTTP urls are valid,\n" +" of course.\n" +" " +msgstr "" +"\n" +"\n" +" Restituisce l'header Content-Length di . 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 "" +"\n" +"\n" +" Returns the HTML ... of a URL.\n" +" " +msgstr "" +"\n" +"\n" +" Restituisce il tag HTML ... 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 "" +"\n" +"\n" +" Returns Netcraft.com's determination of what operating system and\n" +" webserver is running on the host given.\n" +" " +msgstr "" +"\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 "" +"\n" +"\n" +" Returns the URL quoted form of the text.\n" +" " +msgstr "" +"\n" +"\n" +" Codifica il testo in base alla codifica URL.\n" +" " + +#: plugin.py:228 +#, docstring +msgid "" +"\n" +"\n" +" Returns the text un-URL quoted.\n" +" " +msgstr "" +"\n" +"\n" +" Decodifica il testo codificato secondo la codifica URL.\n" +" " + +#: plugin.py:238 +#, docstring +msgid "" +"\n" +"\n" +" Returns the contents of , 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 "" +"\n" +"\n" +" Riporta il contenuto di , 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)." + diff --git a/plugins/Web/plugin.py b/plugins/Web/plugin.py index ea5a60aa4..edce0efcf 100644 --- a/plugins/Web/plugin.py +++ b/plugins/Web/plugin.py @@ -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) diff --git a/sandbox/check_trans.py b/sandbox/check_trans.py new file mode 100755 index 000000000..bb24fc106 --- /dev/null +++ b/sandbox/check_trans.py @@ -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() diff --git a/scripts/supybot b/scripts/supybot index 6c7688ecd..f5aa8829c 100644 --- a/scripts/supybot +++ b/scripts/supybot @@ -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() diff --git a/src/commands.py b/src/commands.py index 2a2b65edd..45531d322 100644 --- a/src/commands.py +++ b/src/commands.py @@ -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, diff --git a/src/utils/httpserver.py b/src/httpserver.py similarity index 98% rename from src/utils/httpserver.py rename to src/httpserver.py index e0b986b2d..7d700d346 100644 --- a/src/utils/httpserver.py +++ b/src/httpserver.py @@ -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)) diff --git a/src/registry.py b/src/registry.py index 2497b4390..9850ec9b0 100644 --- a/src/registry.py +++ b/src/registry.py @@ -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())