diff --git a/plugins/Herald/config.py b/plugins/Herald/config.py index 1f96464f8..7c5cbac1d 100644 --- a/plugins/Herald/config.py +++ b/plugins/Herald/config.py @@ -29,6 +29,8 @@ import supybot.conf as conf import supybot.registry as registry +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Heral') def configure(advanced): # This will be called by supybot to configure this module. advanced is @@ -41,31 +43,31 @@ def configure(advanced): Herald = conf.registerPlugin('Herald') conf.registerChannelValue(Herald, 'heralding', - registry.Boolean(True, """Determines whether messages will be sent to the + registry.Boolean(True, _("""Determines whether messages will be sent to the channel when a recognized user joins; basically enables or disables the - plugin.""")) + plugin."""))) conf.registerGlobalValue(Herald, 'requireCapability', - registry.String('', """Determines what capability (if any) is required to - add/change/remove the herald of another user.""")) + registry.String('', _("""Determines what capability (if any) is required to + add/change/remove the herald of another user."""))) conf.registerChannelValue(Herald, 'throttle', - registry.PositiveInteger(600, """Determines the minimum number of seconds - between heralds.""")) + registry.PositiveInteger(600, _("""Determines the minimum number of seconds + between heralds."""))) conf.registerChannelValue(Herald.throttle, 'afterPart', - registry.NonNegativeInteger(0, """Determines the minimum number of seconds + registry.NonNegativeInteger(0, _("""Determines the minimum number of seconds after parting that the bot will not herald the person when he or she - rejoins.""")) + rejoins."""))) conf.registerChannelValue(Herald.throttle, 'afterSplit', - registry.NonNegativeInteger(60, """Determines the minimum number of seconds - after a netsplit that the bot will not herald the users that split.""")) + registry.NonNegativeInteger(60, _("""Determines the minimum number of seconds + after a netsplit that the bot will not herald the users that split."""))) conf.registerChannelValue(Herald, 'default', - registry.String('', """Sets the default herald to use. If a user has a + registry.String('', _("""Sets the default herald to use. If a user has a personal herald specified, that will be used instead. If set to the empty - string, the default herald will be disabled.""")) + string, the default herald will be disabled."""))) conf.registerChannelValue(Herald.default, 'notice', - registry.Boolean(True, """Determines whether the default herald will be - sent as a NOTICE instead of a PRIVMSG.""")) + registry.Boolean(True, _("""Determines whether the default herald will be + sent as a NOTICE instead of a PRIVMSG."""))) conf.registerChannelValue(Herald.default, 'public', - registry.Boolean(False, """Determines whether the default herald will be - sent publicly.""")) + registry.Boolean(False, _("""Determines whether the default herald will be + sent publicly."""))) # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: diff --git a/plugins/Herald/messages.pot b/plugins/Herald/messages.pot new file mode 100644 index 000000000..61aec5e7d --- /dev/null +++ b/plugins/Herald/messages.pot @@ -0,0 +1,140 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2010-10-17 15:21+CEST\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \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 messages will be sent to the\n" +" channel when a recognized user joins; basically enables or disables the\n" +" plugin." +msgstr "" + +#: config.py:50 +msgid "" +"Determines what capability (if any) is required to\n" +" add/change/remove the herald of another user." +msgstr "" + +#: config.py:53 +msgid "" +"Determines the minimum number of seconds\n" +" between heralds." +msgstr "" + +#: config.py:56 +msgid "" +"Determines the minimum number of seconds\n" +" after parting that the bot will not herald the person when he or she\n" +" rejoins." +msgstr "" + +#: config.py:60 +msgid "" +"Determines the minimum number of seconds\n" +" after a netsplit that the bot will not herald the users that split." +msgstr "" + +#: config.py:63 +msgid "" +"Sets the default herald to use. If a user has a\n" +" personal herald specified, that will be used instead. If set to the empty\n" +" string, the default herald will be disabled." +msgstr "" + +#: config.py:67 +msgid "" +"Determines whether the default herald will be\n" +" sent as a NOTICE instead of a PRIVMSG." +msgstr "" + +#: config.py:70 +msgid "" +"Determines whether the default herald will be\n" +" sent publicly." +msgstr "" + +#: plugin.py:143 +#, docstring +msgid "" +"[] [--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 "" + +#: plugin.py:162 +msgid "I do not have a default herald set for %s." +msgstr "" + +#: 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 "" + +#: plugin.py:181 +msgid "I have no herald for %s." +msgstr "" + +#: 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 "" + +#: 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 "" + +#: plugin.py:227 +msgid "I have no herald for that user." +msgstr "" + +#: 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 "" + diff --git a/plugins/Herald/plugin.py b/plugins/Herald/plugin.py index 5069c51e3..e4b99bd40 100644 --- a/plugins/Herald/plugin.py +++ b/plugins/Herald/plugin.py @@ -40,6 +40,8 @@ import supybot.plugins as plugins import supybot.ircutils as ircutils import supybot.callbacks as callbacks from supybot.utils.structures import TimeoutQueue +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Heral') filename = conf.supybot.directories.data.dirize('Herald.db') @@ -136,6 +138,7 @@ class Herald(callbacks.Plugin): raise KeyError return id + @internationalizeDocstring def default(self, irc, msg, args, channel, optlist, text): """[] [--remove|] @@ -156,12 +159,13 @@ class Herald(callbacks.Plugin): irc.replySuccess() else: resp = self.registryValue('default', channel) or \ - 'I do not have a default herald set for %s.' % channel + _('I do not have a default herald set for %s.') % channel irc.reply(resp) default = wrap(default, ['channel', getopts({'remove': ''}), additional('text')]) + @internationalizeDocstring def get(self, irc, msg, args, channel, user): """[] [] @@ -174,7 +178,7 @@ class Herald(callbacks.Plugin): herald = self.db[channel, user.id] irc.reply(herald) except KeyError: - irc.error('I have no herald for %s.' % user.name) + irc.error(_('I have no herald for %s.') % user.name) get = wrap(get, ['channel', first('otherUser', 'user')]) def _preCheck(self, irc, msg, user): @@ -192,6 +196,7 @@ class Herald(callbacks.Plugin): # I chose not to make optional in this command because # if it's not a valid username (e.g., if the user tyops and misspells a # username), it may be nice not to clobber the user's herald. + @internationalizeDocstring def add(self, irc, msg, args, channel, user, herald): """[] @@ -204,6 +209,7 @@ class Herald(callbacks.Plugin): irc.replySuccess() add = wrap(add, ['channel', 'otherUser', 'text']) + @internationalizeDocstring def remove(self, irc, msg, args, channel, user): """[] [] @@ -218,9 +224,10 @@ class Herald(callbacks.Plugin): del self.db[channel, user.id] irc.replySuccess() except KeyError: - irc.error('I have no herald for that user.') + irc.error(_('I have no herald for that user.')) remove = wrap(remove, ['channel', first('otherUser', 'user')]) + @internationalizeDocstring def change(self, irc, msg, args, channel, user, changer): """[] [] diff --git a/plugins/Internet/config.py b/plugins/Internet/config.py index 118f805a2..cf7ff92c6 100644 --- a/plugins/Internet/config.py +++ b/plugins/Internet/config.py @@ -29,6 +29,8 @@ import supybot.conf as conf import supybot.registry as registry +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Internet') def configure(advanced): # This will be called by supybot to configure this module. advanced is @@ -42,7 +44,7 @@ def configure(advanced): Internet = conf.registerPlugin('Internet') # This is where your configuration variables (if any) should go. For example: # conf.registerGlobalValue(Internet, 'someConfigVariableName', -# registry.Boolean(False, """Help for someConfigVariableName.""")) +# registry.Boolean(False, _("""Help for someConfigVariableName."""))) # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: diff --git a/plugins/Internet/messages.pot b/plugins/Internet/messages.pot new file mode 100644 index 000000000..5f6f82699 --- /dev/null +++ b/plugins/Internet/messages.pot @@ -0,0 +1,85 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2010-10-17 15:20+CEST\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \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:43 +#, docstring +msgid "Add the help for \"@help Internet\" here." +msgstr "" + +#: plugin.py:47 +#, docstring +msgid "" +"\n" +"\n" +" Returns the ip of or the reverse DNS hostname of .\n" +" " +msgstr "" + +#: plugin.py:54 plugin.py:61 plugin.py:65 +msgid "Host not found." +msgstr "" + +#: plugin.py:77 +#, docstring +msgid "" +"\n" +"\n" +" Returns WHOIS information on the registration of .\n" +" " +msgstr "" + +#: plugin.py:83 +msgid "domain" +msgstr "" + +#: plugin.py:112 +msgid "updated %s" +msgstr "" + +#: plugin.py:115 +msgid "registered %s" +msgstr "" + +#: plugin.py:118 +msgid "expires %s" +msgstr "" + +#: plugin.py:138 +msgid " " +msgstr "" + +#: plugin.py:140 +msgid " " +msgstr "" + +#: plugin.py:145 +msgid "%s%s is %L." +msgstr "" + +#: plugin.py:148 +msgid "I couldn't find such a domain." +msgstr "" + +#: plugin.py:153 +#, docstring +msgid "" +"\n" +"\n" +" Returns the hexadecimal IP for that IP.\n" +" " +msgstr "" + diff --git a/plugins/Internet/plugin.py b/plugins/Internet/plugin.py index 490c9165c..4c33dcf3b 100644 --- a/plugins/Internet/plugin.py +++ b/plugins/Internet/plugin.py @@ -35,11 +35,14 @@ import supybot.utils as utils from supybot.commands import * from supybot.utils.iter import any import supybot.callbacks as callbacks +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Internet') - +@internationalizeDocstring class Internet(callbacks.Plugin): """Add the help for "@help Internet" here.""" threaded = True + @internationalizeDocstring def dns(self, irc, msg, args, host): """ @@ -48,18 +51,18 @@ class Internet(callbacks.Plugin): if utils.net.isIP(host): hostname = socket.getfqdn(host) if hostname == host: - irc.reply('Host not found.') + irc.reply(_('Host not found.')) else: irc.reply(hostname) else: try: ip = socket.gethostbyname(host) if ip == '64.94.110.11': # Verisign sucks! - irc.reply('Host not found.') + irc.reply(_('Host not found.')) else: irc.reply(ip) except socket.error: - irc.reply('Host not found.') + irc.reply(_('Host not found.')) dns = wrap(dns, ['something']) _domain = ['Domain Name', 'Server Name', 'domain'] @@ -69,6 +72,7 @@ class Internet(callbacks.Plugin): _created = ['Created On', 'Domain Registration Date', 'Creation Date'] _expires = ['Expiration Date', 'Domain Expiration Date'] _status = ['Status', 'Domain Status', 'status'] + @internationalizeDocstring def whois(self, irc, msg, args, domain): """ @@ -76,7 +80,7 @@ class Internet(callbacks.Plugin): """ usertld = domain.split('.')[-1] if '.' not in domain: - irc.errorInvalid('domain') + irc.errorInvalid(_('domain')) return try: t = telnetlib.Telnet('%s.whois-servers.net' % usertld, 43) @@ -105,13 +109,13 @@ class Internet(callbacks.Plugin): registrar = ':'.join(line.split(':')[1:]).strip() elif not updated and any(line.startswith, self._updated): s = ':'.join(line.split(':')[1:]).strip() - updated = 'updated %s' % s + updated = _('updated %s') % s elif not created and any(line.startswith, self._created): s = ':'.join(line.split(':')[1:]).strip() - created = 'registered %s' % s + created = _('registered %s') % s elif not expires and any(line.startswith, self._expires): s = ':'.join(line.split(':')[1:]).strip() - expires = 'expires %s' % s + expires = _('expires %s') % s elif not status and any(line.startswith, self._status): status = ':'.join(line.split(':')[1:]).strip().lower() if not status: @@ -131,19 +135,20 @@ class Internet(callbacks.Plugin): if not line: continue if line.startswith('Email'): - url = ' ' % line.split('@')[-1] + url = _(' ') % line.split('@')[-1] elif line.startswith('Registrar Organization:'): - url = ' ' % line.split(':')[1].strip() + url = _(' ') % line.split(':')[1].strip() elif line == 'Not a valid ID pattern': url = '' if server and status: info = filter(None, [status, created, updated, expires]) - s = format('%s%s is %L.', server, url, info) + s = format(_('%s%s is %L.'), server, url, info) irc.reply(s) else: - irc.error('I couldn\'t find such a domain.') + irc.error(_('I couldn\'t find such a domain.')) whois = wrap(whois, ['lowered']) + @internationalizeDocstring def hexip(self, irc, msg, args, ip): """ diff --git a/plugins/Karma/config.py b/plugins/Karma/config.py index f2ae97196..b43dd011c 100644 --- a/plugins/Karma/config.py +++ b/plugins/Karma/config.py @@ -29,6 +29,8 @@ import supybot.conf as conf import supybot.registry as registry +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Karma') def configure(advanced): # This will be called by supybot to configure this module. advanced is @@ -41,22 +43,22 @@ def configure(advanced): conf.registerPlugin('Karma') conf.registerChannelValue(conf.supybot.plugins.Karma, 'simpleOutput', - registry.Boolean(False, """Determines whether the bot will output shorter - versions of the karma output when requesting a single thing's karma.""")) + registry.Boolean(False, _("""Determines whether the bot will output shorter + versions of the karma output when requesting a single thing's karma."""))) conf.registerChannelValue(conf.supybot.plugins.Karma, 'response', - registry.Boolean(False, """Determines whether the bot will reply with a - success message when something's karma is increased or decreased.""")) + registry.Boolean(False, _("""Determines whether the bot will reply with a + success message when something's karma is increased or decreased."""))) conf.registerChannelValue(conf.supybot.plugins.Karma, 'rankingDisplay', - registry.Integer(3, """Determines how many highest/lowest karma things are - shown when karma is called with no arguments.""")) + registry.Integer(3, _("""Determines how many highest/lowest karma things + are shown when karma is called with no arguments."""))) conf.registerChannelValue(conf.supybot.plugins.Karma, 'mostDisplay', - registry.Integer(25, """Determines how many karma things are shown when - the most command is called.'""")) + registry.Integer(25, _("""Determines how many karma things are shown when + the most command is called.'"""))) conf.registerChannelValue(conf.supybot.plugins.Karma, 'allowSelfRating', - registry.Boolean(False, """Determines whether users can adjust the karma - of their nick.""")) + registry.Boolean(False, _("""Determines whether users can adjust the karma + of their nick."""))) conf.registerChannelValue(conf.supybot.plugins.Karma, 'allowUnaddressedKarma', - registry.Boolean(False, """Determines whether the bot will - increase/decrease karma without being addressed.""")) + registry.Boolean(False, _("""Determines whether the bot will + increase/decrease karma without being addressed."""))) # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: diff --git a/plugins/Karma/messages.pot b/plugins/Karma/messages.pot new file mode 100644 index 000000000..8fd166f04 --- /dev/null +++ b/plugins/Karma/messages.pot @@ -0,0 +1,137 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2010-10-17 15:21+CEST\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \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 output shorter\n" +" versions of the karma output when requesting a single thing's karma." +msgstr "" + +#: config.py:49 +msgid "" +"Determines whether the bot will reply with a\n" +" success message when something's karma is increased or decreased." +msgstr "" + +#: config.py:52 +msgid "" +"Determines how many highest/lowest karma things\n" +" are shown when karma is called with no arguments." +msgstr "" + +#: config.py:55 +msgid "" +"Determines how many karma things are shown when\n" +" the most command is called.'" +msgstr "" + +#: config.py:58 +msgid "" +"Determines whether users can adjust the karma\n" +" of their nick." +msgstr "" + +#: config.py:61 +msgid "" +"Determines whether the bot will\n" +" increase/decrease karma without being addressed." +msgstr "" + +#: plugin.py:243 plugin.py:251 +msgid "You're not allowed to adjust your own karma." +msgstr "" + +#: plugin.py:280 +#, docstring +msgid "" +"[] [ ...]\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 the things. is only necessary\n" +" if the message isn't sent on the channel itself.\n" +" " +msgstr "" + +#: plugin.py:293 +msgid "%s has neutral karma." +msgstr "" + +#: plugin.py:300 +msgid "Karma for %q has been increased %n and decreased %n for a total karma of %s." +msgstr "" + +#: plugin.py:315 +msgid "I didn't know the karma for any of those things." +msgstr "" + +#: plugin.py:325 plugin.py:354 +msgid "I have no karma for this channel." +msgstr "" + +#: plugin.py:330 +msgid " You (%s) are ranked %i out of %i." +msgstr "" + +#: plugin.py:334 +msgid "Highest karma: %L. Lowest karma: %L.%s" +msgstr "" + +#: plugin.py:342 +#, 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 "" + +#: plugin.py:360 +#, docstring +msgid "" +"[] \n" +"\n" +" Resets the karma of to 0.\n" +" " +msgstr "" + +#: plugin.py:370 +#, 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 "" + +#: plugin.py:382 +#, 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 "" + diff --git a/plugins/Karma/plugin.py b/plugins/Karma/plugin.py index 02570b5af..af2191619 100644 --- a/plugins/Karma/plugin.py +++ b/plugins/Karma/plugin.py @@ -38,6 +38,8 @@ import supybot.plugins as plugins import supybot.ircmsgs as ircmsgs import supybot.ircutils as ircutils import supybot.callbacks as callbacks +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Karma') class SqliteKarmaDB(object): def __init__(self, filename): @@ -238,7 +240,7 @@ class Karma(callbacks.Plugin): thing = thing[:-2] if ircutils.strEqual(thing, irc.msg.nick) and \ not self.registryValue('allowSelfRating', channel): - irc.error('You\'re not allowed to adjust your own karma.') + irc.error(_('You\'re not allowed to adjust your own karma.')) elif thing: self.db.increment(channel, self._normalizeThing(thing)) self._respond(irc, channel) @@ -246,7 +248,7 @@ class Karma(callbacks.Plugin): thing = thing[:-2] if ircutils.strEqual(thing, irc.msg.nick) and \ not self.registryValue('allowSelfRating', channel): - irc.error('You\'re not allowed to adjust your own karma.') + irc.error(_('You\'re not allowed to adjust your own karma.')) elif thing: self.db.decrement(channel, self._normalizeThing(thing)) self._respond(irc, channel) @@ -273,6 +275,7 @@ class Karma(callbacks.Plugin): if thing[-2:] in ('++', '--'): self._doKarma(irc, channel, thing) + @internationalizeDocstring def karma(self, irc, msg, args, channel, things): """[] [ ...] @@ -287,15 +290,15 @@ class Karma(callbacks.Plugin): name = things[0] t = self.db.get(channel, name) if t is None: - irc.reply(format('%s has neutral karma.', name)) + irc.reply(format(_('%s has neutral karma.'), name)) else: (added, subtracted) = t total = added - subtracted if self.registryValue('simpleOutput', channel): s = format('%s: %i', name, total) else: - s = format('Karma for %q has been increased %n and ' - 'decreased %n for a total karma of %s.', + s = format(_('Karma for %q has been increased %n and ' + 'decreased %n for a total karma of %s.'), name, (added, 'time'), (subtracted, 'time'), total) irc.reply(s) @@ -309,7 +312,8 @@ class Karma(callbacks.Plugin): s += neutral irc.reply(s + '.') else: - irc.reply('I didn\'t know the karma for any of those things.') + irc.reply(_('I didn\'t know the karma for any of those ' + 'things.')) else: # No name was given. Return the top/bottom N karmas. limit = self.registryValue('rankingDisplay', channel) top = self.db.top(channel, limit) @@ -318,21 +322,22 @@ class Karma(callbacks.Plugin): lowest = [format('%q (%s)', s, t) for (s, t) in self.db.bottom(channel, limit)] if not (highest and lowest): - irc.error('I have no karma for this channel.') + irc.error(_('I have no karma for this channel.')) return rank = self.db.rank(channel, msg.nick) if rank is not None: total = self.db.size(channel) - rankS = format(' You (%s) are ranked %i out of %i.', + rankS = format(_(' You (%s) are ranked %i out of %i.'), msg.nick, rank, total) else: rankS = '' - s = format('Highest karma: %L. Lowest karma: %L.%s', + s = format(_('Highest karma: %L. Lowest karma: %L.%s'), highest, lowest, rankS) irc.reply(s) karma = wrap(karma, ['channel', any('something')]) _mostAbbrev = utils.abbrev(['increased', 'decreased', 'active']) + @internationalizeDocstring def most(self, irc, msg, args, channel, kind): """[] {increased,decreased,active} @@ -346,10 +351,11 @@ class Karma(callbacks.Plugin): L = [format('%q: %i', name, i) for (name, i) in L] irc.reply(format('%L', L)) else: - irc.error('I have no karma for this channel.') + irc.error(_('I have no karma for this channel.')) most = wrap(most, ['channel', ('literal', ['increased', 'decreased', 'active'])]) + @internationalizeDocstring def clear(self, irc, msg, args, channel, name): """[] @@ -359,6 +365,7 @@ class Karma(callbacks.Plugin): irc.replySuccess() clear = wrap(clear, [('checkChannelCapability', 'op'), 'text']) + @internationalizeDocstring def dump(self, irc, msg, args, channel, filename): """[] @@ -370,6 +377,7 @@ class Karma(callbacks.Plugin): irc.replySuccess() dump = wrap(dump, [('checkCapability', 'owner'), 'channeldb', 'filename']) + @internationalizeDocstring def load(self, irc, msg, args, channel, filename): """[] diff --git a/plugins/Lart/config.py b/plugins/Lart/config.py index f3c83e7a7..3ad4aab1f 100644 --- a/plugins/Lart/config.py +++ b/plugins/Lart/config.py @@ -29,6 +29,8 @@ import supybot.conf as conf import supybot.registry as registry +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Lart') def configure(advanced): # This will be called by supybot to configure this module. advanced is @@ -42,10 +44,10 @@ def configure(advanced): Lart = conf.registerPlugin('Lart') # This is where your configuration variables (if any) should go. For example: # conf.registerGlobalValue(Lart, 'someConfigVariableName', -# registry.Boolean(False, """Help for someConfigVariableName.""")) +# registry.Boolean(False, _("""Help for someConfigVariableName."""))) conf.registerChannelValue(Lart, 'showIds', - registry.Boolean(False, """Determines whether the bot will show the ids of - a lart when the lart is given.""")) + registry.Boolean(False, _("""Determines whether the bot will show the ids + of a lart when the lart is given."""))) # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: diff --git a/plugins/Lart/messages.pot b/plugins/Lart/messages.pot new file mode 100644 index 000000000..a290a2605 --- /dev/null +++ b/plugins/Lart/messages.pot @@ -0,0 +1,54 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2010-10-17 15:21+CEST\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \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:49 +msgid "" +"Determines whether the bot will show the ids\n" +" of a lart when the lart is given." +msgstr "" + +#: plugin.py:48 +msgid "Larts must contain $who." +msgstr "" + +#: plugin.py:52 +#, docstring +msgid "" +"[] [] [for ]\n" +"\n" +" Uses the Luser Attitude Readjustment Tool on (for ,\n" +" if given). If is given, uses that specific lart. is\n" +" only necessary if the message isn't sent in the channel itself.\n" +" " +msgstr "" + +#: plugin.py:66 +msgid "There is no lart with id #%i." +msgstr "" + +#: plugin.py:71 +msgid "There are no larts in my database for %s." +msgstr "" + +#: plugin.py:77 +msgid "trying to dis me" +msgstr "" + +#: plugin.py:85 +msgid " for " +msgstr "" + diff --git a/plugins/Lart/plugin.py b/plugins/Lart/plugin.py index 1d1c5c6a6..aed197614 100644 --- a/plugins/Lart/plugin.py +++ b/plugins/Lart/plugin.py @@ -32,6 +32,8 @@ import re from supybot.commands import * import supybot.plugins as plugins import supybot.ircutils as ircutils +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Lart') class Lart(plugins.ChannelIdDatabasePlugin): _meRe = re.compile(r'\bme\b', re.I) @@ -43,8 +45,9 @@ class Lart(plugins.ChannelIdDatabasePlugin): def addValidator(self, irc, text): if '$who' not in text: - irc.error('Larts must contain $who.', Raise=True) + irc.error(_('Larts must contain $who.'), Raise=True) + @internationalizeDocstring def lart(self, irc, msg, args, channel, id, text): """[] [] [for ] @@ -60,18 +63,18 @@ class Lart(plugins.ChannelIdDatabasePlugin): try: lart = self.db.get(channel, id) except KeyError: - irc.error(format('There is no lart with id #%i.', id)) + irc.error(format(_('There is no lart with id #%i.'), id)) return else: lart = self.db.random(channel) if not lart: - irc.error(format('There are no larts in my database ' - 'for %s.', channel)) + irc.error(format(_('There are no larts in my database ' + 'for %s.'), channel)) return text = lart.text if ircutils.strEqual(target, irc.nick): target = msg.nick - reason = self._replaceFirstPerson('trying to dis me', irc.nick) + reason = self._replaceFirstPerson(_('trying to dis me'), irc.nick) else: target = self._replaceFirstPerson(target, msg.nick) reason = self._replaceFirstPerson(reason, msg.nick) @@ -79,7 +82,7 @@ class Lart(plugins.ChannelIdDatabasePlugin): target = target.rstrip('.') text = text.replace('$who', target) if reason: - text += ' for ' + reason + text += _(' for ') + reason if self.registryValue('showIds', channel): text += format(' (#%i)', lart.id) irc.reply(text, action=True) diff --git a/plugins/Later/config.py b/plugins/Later/config.py index 97ddde7ca..fd1e96a92 100644 --- a/plugins/Later/config.py +++ b/plugins/Later/config.py @@ -29,6 +29,8 @@ import supybot.conf as conf import supybot.registry as registry +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Later') def configure(advanced): # This will be called by setup.py to configure this module. Advanced is @@ -40,10 +42,11 @@ def configure(advanced): Later = conf.registerPlugin('Later') conf.registerGlobalValue(Later, 'maximum', - registry.NonNegativeInteger(0, """Determines the maximum number of messages - to be queued for a user. If this value is 0, there is no maximum.""")) + registry.NonNegativeInteger(0, _("""Determines the maximum number of + messages to be queued for a user. If this value is 0, there is no maximum. + """))) conf.registerGlobalValue(Later, 'private', - registry.Boolean(True, """Determines whether users will be notified in the - first place in which they're seen, or in private.""")) + registry.Boolean(True, _("""Determines whether users will be notified in + the first place in which they're seen, or in private."""))) # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: diff --git a/plugins/Later/messages.pot b/plugins/Later/messages.pot new file mode 100644 index 000000000..719e65ef8 --- /dev/null +++ b/plugins/Later/messages.pot @@ -0,0 +1,101 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2010-10-17 15:21+CEST\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \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 +msgid "" +"Determines the maximum number of\n" +" messages to be queued for a user. If this value is 0, there is no maximum.\n" +" " +msgstr "" + +#: config.py:49 +msgid "" +"Determines whether users will be notified in\n" +" the first place in which they're seen, or in private." +msgstr "" + +#: plugin.py:47 +#, docstring +msgid "" +"Used to do things later; currently, it only allows the sending of\n" +" nick-based notes. Do note (haha!) that these notes are *not* private\n" +" and don't even pretend to be; if you want such features, consider using the\n" +" Note plugin." +msgstr "" + +#: plugin.py:87 +msgid "just now" +msgstr "" + +#: plugin.py:108 +#, 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 "" + +#: plugin.py:115 +msgid "I can't send notes to myself." +msgstr "" + +#: plugin.py:121 +msgid "That person's message queue is already full." +msgstr "" + +#: plugin.py:126 +#, 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 "" + +#: plugin.py:137 +msgid "I have no notes for that nick." +msgstr "" + +#: plugin.py:142 +msgid "I currently have notes waiting for %L." +msgstr "" + +#: plugin.py:145 +msgid "I have no notes waiting to be delivered." +msgstr "" + +#: plugin.py:150 +#, docstring +msgid "" +"\n" +"\n" +" Removes the notes waiting on .\n" +" " +msgstr "" + +#: plugin.py:159 +msgid "There were no notes for %r" +msgstr "" + +#: plugin.py:183 +msgid "Sent %s: <%s> %s" +msgstr "" + diff --git a/plugins/Later/plugin.py b/plugins/Later/plugin.py index 3babf6365..3601a47e2 100644 --- a/plugins/Later/plugin.py +++ b/plugins/Later/plugin.py @@ -38,8 +38,11 @@ from supybot.commands import * import supybot.ircmsgs as ircmsgs import supybot.ircutils as ircutils import supybot.callbacks as callbacks +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Later') +@internationalizeDocstring class Later(callbacks.Plugin): """Used to do things later; currently, it only allows the sending of nick-based notes. Do note (haha!) that these notes are *not* private @@ -81,7 +84,7 @@ class Later(callbacks.Plugin): try: return utils.timeElapsed(diff, seconds=False) + ' ago' except ValueError: - return 'just now' + return _('just now') def _addNote(self, nick, whence, text, at=None, maximum=None): if at is None: @@ -100,6 +103,7 @@ class Later(callbacks.Plugin): self.wildcards.append(nick) self._flushNotes() + @internationalizeDocstring def tell(self, irc, msg, args, nick, text): """ @@ -108,15 +112,16 @@ class Later(callbacks.Plugin): given the note. """ if ircutils.strEqual(nick, irc.nick): - irc.error('I can\'t send notes to myself.') + irc.error(_('I can\'t send notes to myself.')) return try: self._addNote(nick, msg.nick, text) irc.replySuccess() except ValueError: - irc.error('That person\'s message queue is already full.') + irc.error(_('That person\'s message queue is already full.')) tell = wrap(tell, ['something', 'text']) + @internationalizeDocstring def notes(self, irc, msg, args, nick): """[] @@ -129,17 +134,18 @@ class Later(callbacks.Plugin): for (when, whence, note) in self._notes[nick]] irc.reply(format('%L', notes)) else: - irc.error('I have no notes for that nick.') + irc.error(_('I have no notes for that nick.')) else: nicks = self._notes.keys() if nicks: utils.sortBy(ircutils.toLower, nicks) - irc.reply(format('I currently have notes waiting for %L.', + irc.reply(format(_('I currently have notes waiting for %L.'), nicks)) else: - irc.error('I have no notes waiting to be delivered.') + irc.error(_('I have no notes waiting to be delivered.')) notes = wrap(notes, [additional('something')]) + @internationalizeDocstring def remove(self, irc, msg, args, nick): """ @@ -150,7 +156,7 @@ class Later(callbacks.Plugin): self._flushNotes() irc.replySuccess() except KeyError: - irc.error('There were no notes for %r' % nick) + irc.error(_('There were no notes for %r') % nick) remove = wrap(remove, [('checkCapability', 'admin'), 'something']) def doPrivmsg(self, irc, msg): @@ -174,7 +180,7 @@ class Later(callbacks.Plugin): self._flushNotes() def _formatNote(self, when, whence, note): - return 'Sent %s: <%s> %s' % (self._timestamp(when), whence, note) + return _('Sent %s: <%s> %s') % (self._timestamp(when), whence, note) diff --git a/plugins/Limiter/config.py b/plugins/Limiter/config.py index a28f8a5b4..64905d240 100644 --- a/plugins/Limiter/config.py +++ b/plugins/Limiter/config.py @@ -29,6 +29,8 @@ import supybot.conf as conf import supybot.registry as registry +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Limiter') def configure(advanced): # This will be called by supybot to configure this module. advanced is @@ -41,17 +43,17 @@ def configure(advanced): Limiter = conf.registerPlugin('Limiter') conf.registerChannelValue(Limiter, 'enable', - registry.Boolean(False, """Determines whether the bot will maintain the + registry.Boolean(False, _("""Determines whether the bot will maintain the channel limit to be slightly above the current number of people in the - channel, in order to make clone/drone attacks harder.""")) + channel, in order to make clone/drone attacks harder."""))) conf.registerChannelValue(Limiter, 'minimumExcess', - registry.PositiveInteger(5, """Determines the minimum number of free + registry.PositiveInteger(5, _("""Determines the minimum number of free spots that will be saved when limits are being enforced. This should - always be smaller than supybot.plugins.Limiter.limit.maximumExcess.""")) + always be smaller than supybot.plugins.Limiter.limit.maximumExcess."""))) conf.registerChannelValue(Limiter, 'maximumExcess', - registry.PositiveInteger(10, """Determines the maximum number of free spots + registry.PositiveInteger(10, _("""Determines the maximum number of free spots that will be saved when limits are being enforced. This should always be - larger than supybot.plugins.Limiter.limit.minimumExcess.""")) + larger than supybot.plugins.Limiter.limit.minimumExcess."""))) # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: diff --git a/plugins/Limiter/messages.pot b/plugins/Limiter/messages.pot new file mode 100644 index 000000000..4ec916ea3 --- /dev/null +++ b/plugins/Limiter/messages.pot @@ -0,0 +1,50 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2010-10-17 15:35+CEST\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \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 maintain the\n" +" channel limit to be slightly above the current number of people in the\n" +" channel, in order to make clone/drone attacks harder." +msgstr "" + +#: config.py:50 +msgid "" +"Determines the minimum number of free\n" +" spots that will be saved when limits are being enforced. This should\n" +" always be smaller than supybot.plugins.Limiter.limit.maximumExcess." +msgstr "" + +#: config.py:54 +msgid "" +"Determines the maximum number of free spots\n" +" that will be saved when limits are being enforced. This should always be\n" +" larger than supybot.plugins.Limiter.limit.minimumExcess." +msgstr "" + +#: plugin.py:40 +#, docstring +msgid "" +"In order to use this plugin, its config values need to be properly\n" +" setup. supybot.plugins.Limiter.enable needs to be set to True and\n" +" supybot.plugins.Limiter.{maximumExcess,minimumExcess} should be set to\n" +" values appropriate to your channel (if the defaults aren't satisfactory.\n" +" Once these are set, and someone enters/leaves the channel, Supybot will\n" +" start setting the proper +l modes.\n" +" " +msgstr "" + diff --git a/plugins/Limiter/plugin.py b/plugins/Limiter/plugin.py index c3e02cc11..6388c4327 100644 --- a/plugins/Limiter/plugin.py +++ b/plugins/Limiter/plugin.py @@ -32,8 +32,10 @@ from supybot.commands import * import supybot.ircmsgs as ircmsgs import supybot.ircutils as ircutils import supybot.callbacks as callbacks +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Limiter') - +@internationalizeDocstring class Limiter(callbacks.Plugin): """In order to use this plugin, its config values need to be properly setup. supybot.plugins.Limiter.enable needs to be set to True and diff --git a/plugins/Math/config.py b/plugins/Math/config.py index 73e68ffeb..db6474c78 100644 --- a/plugins/Math/config.py +++ b/plugins/Math/config.py @@ -29,6 +29,8 @@ import supybot.conf as conf import supybot.registry as registry +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Math') def configure(advanced): # This will be called by supybot to configure this module. advanced is @@ -42,7 +44,7 @@ def configure(advanced): Math = conf.registerPlugin('Math') # This is where your configuration variables (if any) should go. For example: # conf.registerGlobalValue(Math, 'someConfigVariableName', -# registry.Boolean(False, """Help for someConfigVariableName.""")) +# registry.Boolean(False, _("""Help for someConfigVariableName."""))) # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: diff --git a/plugins/Math/messages.pot b/plugins/Math/messages.pot new file mode 100644 index 000000000..9f2932cc0 --- /dev/null +++ b/plugins/Math/messages.pot @@ -0,0 +1,129 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2010-10-17 15:35+CEST\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \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:52 +#, docstring +msgid "" +" [] \n" +"\n" +" Converts from base to base .\n" +" If is left out, it converts to decimal.\n" +" " +msgstr "" + +#: plugin.py:63 +msgid "Invalid for base %s: %s" +msgstr "" + +#: plugin.py:69 +#, docstring +msgid "Convert a decimal number to another base; returns a string." +msgstr "" + +#: plugin.py:90 +#, docstring +msgid "" +"Convert a number from any base, 2 through 36, to any other\n" +" base, 2 through 36. Returns a string." +msgstr "" + +#: plugin.py:157 +#, docstring +msgid "" +"\n" +"\n" +" Returns the value of the evaluated . The syntax is\n" +" Python syntax; the type of arithmetic is floating point. Floating\n" +" point arithmetic is used in order to prevent a user from being able to\n" +" crash to the bot with something like '10**10**10**10'. One consequence\n" +" is that large values such as '10**24' might not be exact.\n" +" " +msgstr "" + +#: plugin.py:166 plugin.py:220 +msgid "There's really no reason why you should have underscores or brackets in your mathematical expression. Please remove them." +msgstr "" + +#: plugin.py:172 plugin.py:228 +msgid "You can't use lambda in this command." +msgstr "" + +#: plugin.py:202 plugin.py:236 +msgid "The answer exceeded %s or so." +msgstr "" + +#: plugin.py:204 plugin.py:238 +msgid "Something in there wasn't a valid number." +msgstr "" + +#: plugin.py:206 plugin.py:240 +msgid "%s is not a defined function." +msgstr "" + +#: plugin.py:213 +#, docstring +msgid "" +"\n" +"\n" +" This is the same as the calc command except that it allows integer\n" +" math, and can thus cause the bot to suck up CPU. Hence it requires\n" +" the 'trusted' capability to use.\n" +" " +msgstr "" + +#: plugin.py:250 +#, docstring +msgid "" +"\n" +"\n" +" Returns the value of an RPN expression.\n" +" " +msgstr "" + +#: plugin.py:275 +msgid "Not enough arguments for %s" +msgstr "" + +#: plugin.py:288 +msgid "%q is not a defined function." +msgstr "" + +#: plugin.py:295 +msgid "Stack: [%s]" +msgstr "" + +#: plugin.py:299 +#, docstring +msgid "" +"[] to \n" +"\n" +" Converts from to . If number isn't given, it\n" +" defaults to 1. For unit information, see 'units' command.\n" +" " +msgstr "" + +#: plugin.py:314 +#, docstring +msgid "" +" []\n" +"\n" +" With no arguments, returns a list of measurement types, which can be\n" +" passed as arguments. When called with a type as an argument, returns\n" +" the units of that type.\n" +" " +msgstr "" + diff --git a/plugins/Math/plugin.py b/plugins/Math/plugin.py index d3bb5aeb0..683b9c709 100644 --- a/plugins/Math/plugin.py +++ b/plugins/Math/plugin.py @@ -39,12 +39,15 @@ import string import supybot.utils as utils from supybot.commands import * import supybot.callbacks as callbacks +from supybot.i18n import PluginInternationalization, internationalizeDocstring +_ = PluginInternationalization('Math') convertcore = utils.python.universalImport('local.convertcore') baseArg = ('int', 'base', lambda i: i <= 36) class Math(callbacks.Plugin): + @internationalizeDocstring def base(self, irc, msg, args, frm, to, number): """ [] @@ -57,7 +60,7 @@ class Math(callbacks.Plugin): try: irc.reply(self._convertBaseToBase(number, to, frm)) except ValueError: - irc.error('Invalid for base %s: %s' % (frm, number)) + irc.error(_('Invalid for base %s: %s') % (frm, number)) base = wrap(base, [('int', 'base', lambda i: 2 <= i <= 36), optional(('int', 'base', lambda i: 2 <= i <= 36), 10), additional('something')]) @@ -149,6 +152,7 @@ class Math(callbacks.Plugin): # Then we delete all square brackets, underscores, and whitespace, so no # one can do list comprehensions or call __...__ functions. ### + @internationalizeDocstring def calc(self, irc, msg, args, text): """ @@ -159,13 +163,13 @@ class Math(callbacks.Plugin): is that large values such as '10**24' might not be exact. """ if text != text.translate(utils.str.chars, '_[]'): - irc.error('There\'s really no reason why you should have ' + irc.error(_('There\'s really no reason why you should have ' 'underscores or brackets in your mathematical ' - 'expression. Please remove them.') + 'expression. Please remove them.')) return #text = text.translate(utils.str.chars, '_[] \t') if 'lambda' in text: - irc.error('You can\'t use lambda in this command.') + irc.error(_('You can\'t use lambda in this command.')) return text = text.lower() def handleMatch(m): @@ -195,15 +199,16 @@ class Math(callbacks.Plugin): irc.reply(self._complexToString(x)) except OverflowError: maxFloat = math.ldexp(0.9999999999999999, 1024) - irc.error('The answer exceeded %s or so.' % maxFloat) + irc.error(_('The answer exceeded %s or so.') % maxFloat) except TypeError: - irc.error('Something in there wasn\'t a valid number.') + irc.error(_('Something in there wasn\'t a valid number.')) except NameError, e: - irc.error('%s is not a defined function.' % str(e).split()[1]) + irc.error(_('%s is not a defined function.') % str(e).split()[1]) except Exception, e: irc.error(str(e)) calc = wrap(calc, ['text']) + @internationalizeDocstring def icalc(self, irc, msg, args, text): """ @@ -212,15 +217,15 @@ class Math(callbacks.Plugin): the 'trusted' capability to use. """ if text != text.translate(utils.str.chars, '_[]'): - irc.error('There\'s really no reason why you should have ' + irc.error(_('There\'s really no reason why you should have ' 'underscores or brackets in your mathematical ' - 'expression. Please remove them.') + 'expression. Please remove them.')) return # This removes spaces, too, but we'll leave the removal of _[] for # safety's sake. text = text.translate(utils.str.chars, '_[] \t') if 'lambda' in text: - irc.error('You can\'t use lambda in this command.') + irc.error(_('You can\'t use lambda in this command.')) return text = text.replace('lambda', '') try: @@ -228,11 +233,11 @@ class Math(callbacks.Plugin): irc.reply(str(eval(text, self._mathEnv, self._mathEnv))) except OverflowError: maxFloat = math.ldexp(0.9999999999999999, 1024) - irc.error('The answer exceeded %s or so.' % maxFloat) + irc.error(_('The answer exceeded %s or so.') % maxFloat) except TypeError: - irc.error('Something in there wasn\'t a valid number.') + irc.error(_('Something in there wasn\'t a valid number.')) except NameError, e: - irc.error('%s is not a defined function.' % str(e).split()[1]) + irc.error(_('%s is not a defined function.') % str(e).split()[1]) except Exception, e: irc.error(utils.exnToString(e)) icalc = wrap(icalc, [('checkCapability', 'trusted'), 'text']) @@ -267,7 +272,7 @@ class Math(callbacks.Plugin): except TypeError: pass if not called: - irc.error('Not enough arguments for %s' % arg) + irc.error(_('Not enough arguments for %s') % arg) return else: stack.append(f) @@ -280,14 +285,16 @@ class Math(callbacks.Plugin): try: stack.append(eval(s, self._mathEnv, self._mathEnv)) except SyntaxError: - irc.error(format('%q is not a defined function.', arg)) + irc.error(format(_('%q is not a defined function.'), + arg)) return if len(stack) == 1: irc.reply(str(self._complexToString(complex(stack[0])))) else: s = ', '.join(map(self._complexToString, map(complex, stack))) - irc.reply('Stack: [%s]' % s) + irc.reply(_('Stack: [%s]') % s) + @internationalizeDocstring def convert(self, irc, msg, args, number, unit1, unit2): """[] to @@ -302,6 +309,7 @@ class Math(callbacks.Plugin): irc.error(str(ude)) convert = wrap(convert, [optional('float', 1.0),'something','to','text']) + @internationalizeDocstring def units(self, irc, msg, args, type): """ []