diff --git a/plugins/ChannelLogger/config.py b/plugins/ChannelLogger/config.py index eae2ac7a4..f9935e4f4 100644 --- a/plugins/ChannelLogger/config.py +++ b/plugins/ChannelLogger/config.py @@ -30,6 +30,8 @@ import supybot.conf as conf import supybot.registry as registry +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('ChannelLogger') def configure(advanced): # This will be called by supybot to configure this module. advanced is @@ -41,50 +43,50 @@ def configure(advanced): ChannelLogger = conf.registerPlugin('ChannelLogger') conf.registerChannelValue(ChannelLogger, 'enable', - registry.Boolean(True, """Determines whether logging is enabled.""")) + registry.Boolean(True, _("""Determines whether logging is enabled."""))) conf.registerGlobalValue(ChannelLogger, 'flushImmediately', - registry.Boolean(False, """Determines whether channel logfiles will be + registry.Boolean(False, _("""Determines whether channel logfiles will be flushed anytime they're written to, rather than being buffered by the - operating system.""")) + operating system."""))) conf.registerChannelValue(ChannelLogger, 'stripFormatting', - registry.Boolean(True, """Determines whether formatting characters (such - as bolding, color, etc.) are removed when writing the logs to disk.""")) + registry.Boolean(True, _("""Determines whether formatting characters (such + as bolding, color, etc.) are removed when writing the logs to disk."""))) conf.registerChannelValue(ChannelLogger, 'timestamp', - registry.Boolean(True, """Determines whether the logs for this channel are - timestamped with the timestamp in supybot.log.timestampFormat.""")) + registry.Boolean(True, _("""Determines whether the logs for this channel are + timestamped with the timestamp in supybot.log.timestampFormat."""))) conf.registerChannelValue(ChannelLogger, 'noLogPrefix', - registry.String('[nolog]', """Determines what string a message should be + registry.String('[nolog]', _("""Determines what string a message should be prefixed with in order not to be logged. If you don't want any such - prefix, just set it to the empty string.""")) + prefix, just set it to the empty string."""))) conf.registerChannelValue(ChannelLogger, 'rotateLogs', - registry.Boolean(False, """Determines whether the bot will automatically + registry.Boolean(False, _("""Determines whether the bot will automatically rotate the logs for this channel. The bot will rotate logs when the timestamp for the log changes. The timestamp is set according to - the 'filenameTimestamp' configuration variable.""")) + the 'filenameTimestamp' configuration variable."""))) conf.registerChannelValue(ChannelLogger, 'filenameTimestamp', - registry.String('%Y-%m-%d', """Determines how to represent the timestamp + registry.String('%Y-%m-%d', _("""Determines how to represent the timestamp used for the filename in rotated logs. When this timestamp changes, the old logfiles will be closed and a new one started. The format characters for the timestamp are in the time.strftime docs at python.org. In order for your logs to be rotated, you'll also have to enable - supybot.plugins.ChannelLogger.rotateLogs.""")) + supybot.plugins.ChannelLogger.rotateLogs."""))) conf.registerGlobalValue(ChannelLogger, 'directories', - registry.Boolean(True, """Determines whether the bot will partition its - channel logs into separate directories based on different criteria.""")) + registry.Boolean(True, _("""Determines whether the bot will partition its + channel logs into separate directories based on different criteria."""))) conf.registerGlobalValue(ChannelLogger.directories, 'network', - registry.Boolean(True, """Determines whether the bot will use a network - directory if using directories.""")) + registry.Boolean(True, _("""Determines whether the bot will use a network + directory if using directories."""))) conf.registerGlobalValue(ChannelLogger.directories, 'channel', - registry.Boolean(True, """Determines whether the bot will use a channel - directory if using directories.""")) + registry.Boolean(True, _("""Determines whether the bot will use a channel + directory if using directories."""))) conf.registerGlobalValue(ChannelLogger.directories, 'timestamp', - registry.Boolean(False, """Determines whether the bot will use a timestamp + registry.Boolean(False, _("""Determines whether the bot will use a timestamp (determined by supybot.plugins.ChannelLogger.directories.timestamp.format) - if using directories.""")) + if using directories."""))) conf.registerGlobalValue(ChannelLogger.directories.timestamp, 'format', - registry.String('%B', """Determines what timestamp format will be used in + registry.String('%B', _("""Determines what timestamp format will be used in the directory stucture for channel logs if - supybot.plugins.ChannelLogger.directories.timestamp is True.""")) + supybot.plugins.ChannelLogger.directories.timestamp is True."""))) # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: diff --git a/plugins/ChannelLogger/messages.pot b/plugins/ChannelLogger/messages.pot new file mode 100644 index 000000000..57b359a3c --- /dev/null +++ b/plugins/ChannelLogger/messages.pot @@ -0,0 +1,97 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2010-10-17 10:02+CEST\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: ENCODING\n" +"Generated-By: pygettext.py 1.5\n" + + +#: config.py:46 +msgid "Determines whether logging is enabled." +msgstr "" + +#: config.py:48 +msgid "" +"Determines whether channel logfiles will be\n" +" flushed anytime they're written to, rather than being buffered by the\n" +" operating system." +msgstr "" + +#: config.py:52 +msgid "" +"Determines whether formatting characters (such\n" +" as bolding, color, etc.) are removed when writing the logs to disk." +msgstr "" + +#: config.py:55 +msgid "" +"Determines whether the logs for this channel are\n" +" timestamped with the timestamp in supybot.log.timestampFormat." +msgstr "" + +#: config.py:58 +msgid "" +"Determines what string a message should be\n" +" prefixed with in order not to be logged. If you don't want any such\n" +" prefix, just set it to the empty string." +msgstr "" + +#: config.py:62 +msgid "" +"Determines whether the bot will automatically\n" +" rotate the logs for this channel. The bot will rotate logs when the\n" +" timestamp for the log changes. The timestamp is set according to\n" +" the 'filenameTimestamp' configuration variable." +msgstr "" + +#: config.py:67 +msgid "" +"Determines how to represent the timestamp\n" +" used for the filename in rotated logs. When this timestamp changes, the\n" +" old logfiles will be closed and a new one started. The format characters\n" +" for the timestamp are in the time.strftime docs at python.org. In order\n" +" for your logs to be rotated, you'll also have to enable\n" +" supybot.plugins.ChannelLogger.rotateLogs." +msgstr "" + +#: config.py:75 +msgid "" +"Determines whether the bot will partition its\n" +" channel logs into separate directories based on different criteria." +msgstr "" + +#: config.py:78 +msgid "" +"Determines whether the bot will use a network\n" +" directory if using directories." +msgstr "" + +#: config.py:81 +msgid "" +"Determines whether the bot will use a channel\n" +" directory if using directories." +msgstr "" + +#: config.py:84 +msgid "" +"Determines whether the bot will use a timestamp\n" +" (determined by supybot.plugins.ChannelLogger.directories.timestamp.format)\n" +" if using directories." +msgstr "" + +#: config.py:88 +msgid "" +"Determines what timestamp format will be used in\n" +" the directory stucture for channel logs if\n" +" supybot.plugins.ChannelLogger.directories.timestamp is True." +msgstr "" + diff --git a/plugins/ChannelLogger/plugin.py b/plugins/ChannelLogger/plugin.py index 93f9b3c06..6296cccbc 100644 --- a/plugins/ChannelLogger/plugin.py +++ b/plugins/ChannelLogger/plugin.py @@ -39,6 +39,8 @@ import supybot.ircmsgs as ircmsgs import supybot.ircutils as ircutils import supybot.registry as registry import supybot.callbacks as callbacks +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('ChannelLogger') class FakeLog(object): def flush(self): diff --git a/plugins/Ctcp/config.py b/plugins/Ctcp/config.py index 3f1f49dc0..8e19f3273 100644 --- a/plugins/Ctcp/config.py +++ b/plugins/Ctcp/config.py @@ -29,6 +29,8 @@ import supybot.conf as conf import supybot.registry as registry +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Ctcp') def configure(advanced): # This will be called by supybot to configure this module. advanced is diff --git a/plugins/Ctcp/messages.pot b/plugins/Ctcp/messages.pot new file mode 100644 index 000000000..82cf6a28c --- /dev/null +++ b/plugins/Ctcp/messages.pot @@ -0,0 +1,64 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2010-10-17 10:16+CEST\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: ENCODING\n" +"Generated-By: pygettext.py 1.5\n" + + +#: plugin.py:77 +#, docstring +msgid "\001PING ?(.*)\001" +msgstr "" + +#: plugin.py:86 +#, docstring +msgid "\001VERSION\001" +msgstr "" + +#: plugin.py:91 +#, docstring +msgid "\001USERINFO\001" +msgstr "" + +#: plugin.py:96 +#, docstring +msgid "\001TIME\001" +msgstr "" + +#: plugin.py:101 +#, docstring +msgid "\001FINGER\001" +msgstr "" + +#: plugin.py:104 +msgid "FINGER Supybot, the best Python IRC bot in existence!" +msgstr "" + +#: plugin.py:107 +#, docstring +msgid "\001SOURCE\001" +msgstr "" + +#: plugin.py:123 +#, docstring +msgid "" +"[] [--nicks]\n" +"\n" +" Sends a CTCP VERSION to , returning the various\n" +" version strings returned. It waits for 10 seconds before returning\n" +" the versions received at that point. If --nicks is given, nicks are\n" +" associated with the version strings; otherwise, only the version\n" +" strings are given.\n" +" " +msgstr "" + diff --git a/plugins/Ctcp/plugin.py b/plugins/Ctcp/plugin.py index e62404083..fb9b89b03 100644 --- a/plugins/Ctcp/plugin.py +++ b/plugins/Ctcp/plugin.py @@ -36,6 +36,8 @@ import supybot.ircmsgs as ircmsgs import supybot.ircutils as ircutils import supybot.schedule as schedule import supybot.callbacks as callbacks +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Ctcp') class Ctcp(callbacks.PluginRegexp): public = False @@ -99,7 +101,7 @@ class Ctcp(callbacks.PluginRegexp): "\x01FINGER\x01" self.log.info('Received CTCP FINGER from %s', msg.prefix) self._reply(irc, msg, - 'FINGER Supybot, the best Python IRC bot in existence!') + _('FINGER Supybot, the best Python IRC bot in existence!')) def ctcpSource(self, irc, msg, match): "\x01SOURCE\x01" @@ -116,6 +118,7 @@ class Ctcp(callbacks.PluginRegexp): if version == 'VERSION': self.versions.setdefault(payload, []).append(msg.nick) + @internationalizeDocstring def version(self, irc, msg, args, channel, optlist): """[] [--nicks] diff --git a/plugins/Dict/config.py b/plugins/Dict/config.py index d69bd0f28..4ac2452d3 100644 --- a/plugins/Dict/config.py +++ b/plugins/Dict/config.py @@ -29,22 +29,24 @@ import supybot.conf as conf import supybot.registry as registry +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Dict') def configure(advanced): from supybot.questions import output, expect, anything, something, yn conf.registerPlugin('Dict', True) - output('The default dictd server is dict.org.') - if yn('Would you like to specify a different dictd server?'): + output(_('The default dictd server is dict.org.')) + if yn(_('Would you like to specify a different dictd server?')): server = something('What server?') conf.supybot.plugins.Dict.server.set(server) Dict = conf.registerPlugin('Dict') conf.registerGlobalValue(Dict, 'server', - registry.String('dict.org', """Determines what server the bot will - retrieve definitions from.""")) + registry.String('dict.org', _("""Determines what server the bot will + retrieve definitions from."""))) conf.registerChannelValue(Dict, 'default', - registry.String('', """Determines the default dictionary the bot will + registry.String('', _("""Determines the default dictionary the bot will ask for definitions in. If this value is '*' (without the quotes) the bot - will use all dictionaries to define words.""")) + will use all dictionaries to define words."""))) # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: diff --git a/plugins/Dict/messages.pot b/plugins/Dict/messages.pot new file mode 100644 index 000000000..86e447f6f --- /dev/null +++ b/plugins/Dict/messages.pot @@ -0,0 +1,82 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2010-10-17 10:39+CEST\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: ENCODING\n" +"Generated-By: pygettext.py 1.5\n" + + +#: config.py:38 +msgid "The default dictd server is dict.org." +msgstr "" + +#: config.py:39 +msgid "Would you like to specify a different dictd server?" +msgstr "" + +#: config.py:45 +msgid "" +"Determines what server the bot will\n" +" retrieve definitions from." +msgstr "" + +#: config.py:48 +msgid "" +"Determines the default dictionary the bot will\n" +" ask for definitions in. If this value is '*' (without the quotes) the bot\n" +" will use all dictionaries to define words." +msgstr "" + +#: plugin.py:52 +#, docstring +msgid "" +"takes no arguments\n" +"\n" +" Returns the dictionaries valid for the dict command.\n" +" " +msgstr "" + +#: plugin.py:68 +#, docstring +msgid "" +"takes no arguments\n" +"\n" +" Returns a random valid dictionary.\n" +" " +msgstr "" + +#: plugin.py:83 +#, docstring +msgid "" +"[] \n" +"\n" +" Looks up the definition of on the dictd server specified by\n" +" the supybot.plugins.Dict.server config variable.\n" +" " +msgstr "" + +#: plugin.py:106 +msgid "You must give a word to define." +msgstr "" + +#: plugin.py:112 +msgid "No definition for %q could be found." +msgstr "" + +#: plugin.py:115 +msgid "No definition for %q could be found in %s" +msgstr "" + +#: plugin.py:127 +msgid "%L responded: %s" +msgstr "" + diff --git a/plugins/Dict/plugin.py b/plugins/Dict/plugin.py index 989ee687b..080edd2d5 100644 --- a/plugins/Dict/plugin.py +++ b/plugins/Dict/plugin.py @@ -35,6 +35,8 @@ import supybot.utils as utils from supybot.commands import * import supybot.ircutils as ircutils import supybot.callbacks as callbacks +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Dict') try: dictclient = utils.python.universalImport('dictclient', 'local.dictclient') @@ -45,6 +47,7 @@ except ImportError: class Dict(callbacks.Plugin): threaded = True + @internationalizeDocstring def dictionaries(self, irc, msg, args): """takes no arguments @@ -60,6 +63,7 @@ class Dict(callbacks.Plugin): irc.error(utils.web.strError(e)) dictionaries = wrap(dictionaries) + @internationalizeDocstring def random(self, irc, msg, args): """takes no arguments @@ -74,6 +78,7 @@ class Dict(callbacks.Plugin): irc.error(utils.web.strError(e)) random = wrap(random) + @internationalizeDocstring def dict(self, irc, msg, args, words): """[] @@ -98,16 +103,17 @@ class Dict(callbacks.Plugin): 'dictionary: %s.', msg.args[0], default) dictionary = '*' if not words: - irc.error('You must give a word to define.', Raise=True) + irc.error(_('You must give a word to define.'), Raise=True) word = ' '.join(words) definitions = conn.define(dictionary, word) dbs = set() if not definitions: if dictionary == '*': - irc.reply(format('No definition for %q could be found.', word)) + irc.reply(format(_('No definition for %q could be found.'), + word)) else: - irc.reply(format('No definition for %q could be found in %s', - word, ircutils.bold(dictionary))) + irc.reply(format(_('No definition for %q could be found in ' + '%s'), word, ircutils.bold(dictionary))) return L = [] for d in definitions: @@ -118,7 +124,7 @@ class Dict(callbacks.Plugin): L.append('%s: %s' % (db, s)) utils.sortBy(len, L) if dictionary == '*' and len(dbs) > 1: - s = format('%L responded: %s', list(dbs), '; '.join(L)) + s = format(_('%L responded: %s'), list(dbs), '; '.join(L)) else: s = '; '.join(L) irc.reply(s) diff --git a/plugins/Dunno/config.py b/plugins/Dunno/config.py index 8288c806b..819d888ce 100644 --- a/plugins/Dunno/config.py +++ b/plugins/Dunno/config.py @@ -29,6 +29,8 @@ import supybot.conf as conf import supybot.registry as registry +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Dunno') def configure(advanced): # This will be called by supybot to configure this module. advanced is @@ -41,8 +43,8 @@ def configure(advanced): Dunno = conf.registerPlugin('Dunno') conf.registerChannelValue(Dunno, 'prefixNick', - registry.Boolean(True, """Determines whether the bot will prefix the nick - of the user giving an invalid command to the "dunno" response.""")) + registry.Boolean(True, _("""Determines whether the bot will prefix the nick + of the user giving an invalid command to the "dunno" response."""))) # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: diff --git a/plugins/Dunno/messages.pot b/plugins/Dunno/messages.pot new file mode 100644 index 000000000..96ba98add --- /dev/null +++ b/plugins/Dunno/messages.pot @@ -0,0 +1,33 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2010-10-17 10:48+CEST\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: ENCODING\n" +"Generated-By: pygettext.py 1.5\n" + + +#: config.py:46 +msgid "" +"Determines whether the bot will prefix the nick\n" +" of the user giving an invalid command to the \"dunno\" response." +msgstr "" + +#: plugin.py:38 +#, docstring +msgid "" +"This plugin was written initially to work with MoobotFactoids, the two\n" +" of them to provide a similar-to-moobot-and-blootbot interface for factoids.\n" +" Basically, it replaces the standard 'Error: is not a valid command.'\n" +" messages with messages kept in a database, able to give more personable\n" +" responses." +msgstr "" + diff --git a/plugins/Dunno/plugin.py b/plugins/Dunno/plugin.py index 4f2f040de..189f14144 100644 --- a/plugins/Dunno/plugin.py +++ b/plugins/Dunno/plugin.py @@ -30,7 +30,10 @@ from supybot.commands import * import supybot.plugins as plugins import supybot.ircutils as ircutils +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Dunno') +@internationalizeDocstring class Dunno(plugins.ChannelIdDatabasePlugin): """This plugin was written initially to work with MoobotFactoids, the two of them to provide a similar-to-moobot-and-blootbot interface for factoids. diff --git a/plugins/Factoids/config.py b/plugins/Factoids/config.py index 79b43b654..6fdce802f 100644 --- a/plugins/Factoids/config.py +++ b/plugins/Factoids/config.py @@ -30,6 +30,8 @@ import supybot.conf as conf import supybot.registry as registry +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Factoids') def configure(advanced): # This will be called by supybot to configure this module. advanced is @@ -46,22 +48,22 @@ class FactoidFormat(registry.TemplatedString): Factoids = conf.registerPlugin('Factoids') conf.registerChannelValue(Factoids, 'learnSeparator', - registry.String('as', """Determines what separator must be used in the + registry.String('as', _("""Determines what separator must be used in the learn command. Defaults to 'as' -- learn as . Users might feel more comfortable with 'is' or something else, so it's - configurable.""")) + configurable."""))) conf.registerChannelValue(Factoids, 'showFactoidIfOnlyOneMatch', - registry.Boolean(True, """Determines whether the bot will reply with the + registry.Boolean(True, _("""Determines whether the bot will reply with the single matching factoid if only one factoid matches when using the search - command.""")) + command."""))) conf.registerChannelValue(Factoids, 'replyWhenInvalidCommand', - registry.Boolean(True, """Determines whether the bot will reply to invalid + registry.Boolean(True, _("""Determines whether the bot will reply to invalid commands by searching for a factoid; basically making the whatis - unnecessary when you want all factoids for a given key.""")) + unnecessary when you want all factoids for a given key."""))) conf.registerChannelValue(Factoids, 'format', - FactoidFormat('$key could be $value.', """Determines the format of + FactoidFormat('$key could be $value.', _("""Determines the format of the response given when a factoid's value is requested. All the standard substitutes apply, in addition to "$key" for the factoid's key and "$value" - for the factoid's value.""")) + for the factoid's value."""))) # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: diff --git a/plugins/Factoids/messages.pot b/plugins/Factoids/messages.pot new file mode 100644 index 000000000..2c40af2e8 --- /dev/null +++ b/plugins/Factoids/messages.pot @@ -0,0 +1,198 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2010-10-17 10:59+CEST\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: ENCODING\n" +"Generated-By: pygettext.py 1.5\n" + + +#: config.py:45 +#, docstring +msgid "" +"Value must include $value, otherwise the factoid's value would be left\n" +" out." +msgstr "" + +#: config.py:51 +msgid "" +"Determines what separator must be used in the\n" +" learn command. Defaults to 'as' -- learn as . Users might\n" +" feel more comfortable with 'is' or something else, so it's\n" +" configurable." +msgstr "" + +#: config.py:56 +msgid "" +"Determines whether the bot will reply with the\n" +" single matching factoid if only one factoid matches when using the search\n" +" command." +msgstr "" + +#: config.py:60 +msgid "" +"Determines whether the bot will reply to invalid\n" +" commands by searching for a factoid; basically making the whatis\n" +" unnecessary when you want all factoids for a given key." +msgstr "" + +#: config.py:64 +msgid "" +"Determines the format of\n" +" the response given when a factoid's value is requested. All the standard\n" +" substitutes apply, in addition to \"$key\" for the factoid's key and \"$value\"\n" +" for the factoid's value." +msgstr "" + +#: plugin.py:153 +msgid "" +"[] %s \n" +"\n" +" Associates with . is only\n" +" necessary if the message isn't sent on the channel\n" +" itself. The word '%s' is necessary to separate the\n" +" key from the value. It can be changed to another word\n" +" via the learnSeparator registry value.\n" +" " +msgstr "" + +#: plugin.py:179 +msgid "That's not a valid number for that key." +msgstr "" + +#: plugin.py:199 plugin.py:345 +msgid "No factoid matches that key." +msgstr "" + +#: plugin.py:211 +#, docstring +msgid "" +"[] []\n" +"\n" +" Looks up the value of in the factoid database. If given a\n" +" number, will return only that exact factoid. is only\n" +" necessary if the message isn't sent in the channel itself.\n" +" " +msgstr "" + +#: plugin.py:222 plugin.py:273 plugin.py:384 +msgid "key id" +msgstr "" + +#: plugin.py:230 +#, docstring +msgid "" +"[] \n" +"\n" +" Locks the factoid(s) associated with so that they cannot be\n" +" removed or added to. is only necessary if the message isn't\n" +" sent in the channel itself.\n" +" " +msgstr "" + +#: plugin.py:245 +#, docstring +msgid "" +"[] \n" +"\n" +" Unlocks the factoid(s) associated with so that they can be\n" +" removed or added to. is only necessary if the message isn't\n" +" sent in the channel itself.\n" +" " +msgstr "" + +#: plugin.py:260 +#, docstring +msgid "" +"[] [|*]\n" +"\n" +" Removes the factoid from the factoids database. If there are\n" +" more than one factoid with such a key, a number is necessary to\n" +" determine which one should be removed. A * can be used to remove all\n" +" factoids associated with a key. is only necessary if\n" +" the message isn't sent in the channel itself.\n" +" " +msgstr "" + +#: plugin.py:285 +msgid "There is no such factoid." +msgstr "" + +#: plugin.py:298 +msgid "Invalid factoid number." +msgstr "" + +#: plugin.py:304 +msgid "%s factoids have that key. Please specify which one to remove, or use * to designate all of them." +msgstr "" + +#: plugin.py:312 +#, docstring +msgid "" +"[]\n" +"\n" +" Returns a random factoid from the database for . \n" +" is only necessary if the message isn't sent in the channel itself.\n" +" " +msgstr "" + +#: plugin.py:330 +msgid "I couldn't find a factoid." +msgstr "" + +#: plugin.py:335 +#, docstring +msgid "" +"[] \n" +"\n" +" Gives information about the factoid(s) associated with .\n" +" is only necessary if the message isn't sent in the channel\n" +" itself.\n" +" " +msgstr "" + +#: plugin.py:358 +msgid "#%i was added by %s at %s" +msgstr "" + +#: plugin.py:369 +#, docstring +msgid "" +"[] \n" +"\n" +" Changes the factoid # associated with according to\n" +" .\n" +" " +msgstr "" + +#: plugin.py:381 +msgid "I couldn't find any key %q" +msgstr "" + +#: plugin.py:396 +#, docstring +msgid "" +"[] [--values] [--{regexp} ] [ ...]\n" +"\n" +" Searches the keyspace for keys matching . If --regexp is given,\n" +" it associated value is taken as a regexp and matched against the keys.\n" +" If --values is given, search the value space instead of the keyspace.\n" +" " +msgstr "" + +#: plugin.py:431 +msgid "No keys matched that query." +msgstr "" + +#: plugin.py:436 +msgid "More than 100 keys matched that query; please narrow your query." +msgstr "" + diff --git a/plugins/Factoids/plugin.py b/plugins/Factoids/plugin.py index c375d16c8..bb4c68452 100644 --- a/plugins/Factoids/plugin.py +++ b/plugins/Factoids/plugin.py @@ -39,6 +39,8 @@ from supybot.commands import * import supybot.plugins as plugins import supybot.ircutils as ircutils import supybot.callbacks as callbacks +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Factoids') try: import sqlite @@ -148,14 +150,14 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): else: irc.error('That factoid is locked.') learn = wrap(learn, ['factoid']) - learn._fake__doc__ = """[] %s + learn._fake__doc__ = _("""[] %s Associates with . is only necessary if the message isn't sent on the channel itself. The word '%s' is necessary to separate the key from the value. It can be changed to another word via the learnSeparator registry value. - """ + """) def _lookupFactoid(self, channel, key): @@ -174,7 +176,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): try: irc.reply(factoids[number-1]) except IndexError: - irc.error('That\'s not a valid number for that key.') + irc.error(_('That\'s not a valid number for that key.')) return else: env = {'key': key} @@ -194,7 +196,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): irc.replies(factoidsS, prefixer=prefixer, joiner=', or ', onlyPrefixFirst=True) elif error: - irc.error('No factoid matches that key.') + irc.error(_('No factoid matches that key.')) def invalidCommand(self, irc, msg, tokens): if irc.isChannel(msg.args[0]): @@ -204,6 +206,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): factoids = self._lookupFactoid(channel, key) self._replyFactoids(irc, msg, key, factoids, error=False) + @internationalizeDocstring def whatis(self, irc, msg, args, channel, words): """[] [] @@ -216,12 +219,13 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): if words[-1].isdigit(): number = int(words.pop()) if number <= 0: - irc.errorInvalid('key id') + irc.errorInvalid(_('key id')) key = ' '.join(words) factoids = self._lookupFactoid(channel, key) self._replyFactoids(irc, msg, key, factoids, number) whatis = wrap(whatis, ['channel', many('something')]) + @internationalizeDocstring def lock(self, irc, msg, args, channel, key): """[] @@ -236,6 +240,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): irc.replySuccess() lock = wrap(lock, ['channel', 'text']) + @internationalizeDocstring def unlock(self, irc, msg, args, channel, key): """[] @@ -250,6 +255,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): irc.replySuccess() unlock = wrap(unlock, ['channel', 'text']) + @internationalizeDocstring def forget(self, irc, msg, args, channel, words): """[] [|*] @@ -264,7 +270,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): if words[-1].isdigit(): number = int(words.pop()) if number <= 0: - irc.errorInvalid('key id') + irc.errorInvalid(_('key id')) elif words[-1] == '*': words.pop() number = True @@ -276,7 +282,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): WHERE key LIKE %s AND factoids.key_id=keys.id""", key) if cursor.rowcount == 0: - irc.error('There is no such factoid.') + irc.error(_('There is no such factoid.')) elif cursor.rowcount == 1 or number is True: (id, _) = cursor.fetchone() cursor.execute("""DELETE FROM factoids WHERE key_id=%s""", id) @@ -289,18 +295,19 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): try: (_, id) = results[number-1] except IndexError: - irc.error('Invalid factoid number.') + irc.error(_('Invalid factoid number.')) return cursor.execute("DELETE FROM factoids WHERE id=%s", id) db.commit() irc.replySuccess() else: - irc.error('%s factoids have that key. ' + irc.error(_('%s factoids have that key. ' 'Please specify which one to remove, ' - 'or use * to designate all of them.' % + 'or use * to designate all of them.') % cursor.rowcount) forget = wrap(forget, ['channel', many('something')]) + @internationalizeDocstring def random(self, irc, msg, args, channel): """[] @@ -320,9 +327,10 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): L.append('"%s": %s' % (ircutils.bold(key), factoid)) irc.reply('; '.join(L)) else: - irc.error('I couldn\'t find a factoid.') + irc.error(_('I couldn\'t find a factoid.')) random = wrap(random, ['channel']) + @internationalizeDocstring def info(self, irc, msg, args, channel, key): """[] @@ -334,7 +342,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): cursor = db.cursor() cursor.execute("SELECT id, locked FROM keys WHERE key LIKE %s", key) if cursor.rowcount == 0: - irc.error('No factoid matches that key.') + irc.error(_('No factoid matches that key.')) return (id, locked) = map(int, cursor.fetchone()) cursor.execute("""SELECT added_by, added_at FROM factoids @@ -347,7 +355,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): counter += 1 added_at = time.strftime(conf.supybot.reply.format.time(), time.localtime(int(added_at))) - L.append(format('#%i was added by %s at %s', + L.append(format(_('#%i was added by %s at %s'), counter, added_by, added_at)) factoids = '; '.join(L) s = format('Key %q is %s and has %n associated with it: %s', @@ -356,6 +364,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): irc.reply(s) info = wrap(info, ['channel', 'text']) + @internationalizeDocstring def change(self, irc, msg, args, channel, key, number, replacer): """[] @@ -369,10 +378,10 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): WHERE keys.key LIKE %s AND keys.id=factoids.key_id""", key) if cursor.rowcount == 0: - irc.error(format('I couldn\'t find any key %q', key)) + irc.error(format(_('I couldn\'t find any key %q'), key)) return elif cursor.rowcount < number: - irc.errorInvalid('key id') + irc.errorInvalid(_('key id')) (id, fact) = cursor.fetchall()[number-1] newfact = replacer(fact) cursor.execute("UPDATE factoids SET fact=%s WHERE id=%s", newfact, id) @@ -382,6 +391,7 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): 'factoidId', 'regexpReplacer']) _sqlTrans = string.maketrans('*?', '%_') + @internationalizeDocstring def search(self, irc, msg, args, channel, optlist, globs): """[] [--values] [--{regexp} ] [ ...] @@ -418,13 +428,13 @@ class Factoids(callbacks.Plugin, plugins.ChannelDBHandler): sql = sql.replace('TARGET', target) cursor.execute(sql, formats) if cursor.rowcount == 0: - irc.reply('No keys matched that query.') + irc.reply(_('No keys matched that query.')) elif cursor.rowcount == 1 and \ self.registryValue('showFactoidIfOnlyOneMatch', channel): self.whatis(irc, msg, [channel, cursor.fetchone()[0]]) elif cursor.rowcount > 100: - irc.reply('More than 100 keys matched that query; ' - 'please narrow your query.') + irc.reply(_('More than 100 keys matched that query; ' + 'please narrow your query.')) else: keys = [repr(t[0]) for t in cursor.fetchall()] s = format('%L', keys)