From 4e578da1b728c4c2560728291f0479862cbb77b2 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Thu, 28 Oct 2010 16:12:58 +0200 Subject: [PATCH 01/15] Later: internationalize a string --- plugins/Later/messages.pot | 30 +++++++++++++++++------------- plugins/Later/plugin.py | 2 +- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/plugins/Later/messages.pot b/plugins/Later/messages.pot index 719e65ef8..78dcfdfcf 100644 --- a/plugins/Later/messages.pot +++ b/plugins/Later/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2010-10-17 15:21+CEST\n" +"POT-Creation-Date: 2010-10-28 16:12+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -28,7 +28,7 @@ msgid "" " the first place in which they're seen, or in private." msgstr "" -#: plugin.py:47 +#: plugin.py:46 #, docstring msgid "" "Used to do things later; currently, it only allows the sending of\n" @@ -37,11 +37,15 @@ msgid "" " Note plugin." msgstr "" -#: plugin.py:87 +#: plugin.py:84 +msgid " ago" +msgstr "" + +#: plugin.py:86 msgid "just now" msgstr "" -#: plugin.py:108 +#: plugin.py:107 #, docstring msgid "" " \n" @@ -52,15 +56,15 @@ msgid "" " " msgstr "" -#: plugin.py:115 +#: plugin.py:114 msgid "I can't send notes to myself." msgstr "" -#: plugin.py:121 +#: plugin.py:120 msgid "That person's message queue is already full." msgstr "" -#: plugin.py:126 +#: plugin.py:125 #, docstring msgid "" "[]\n" @@ -70,19 +74,19 @@ msgid "" " " msgstr "" -#: plugin.py:137 +#: plugin.py:136 msgid "I have no notes for that nick." msgstr "" -#: plugin.py:142 +#: plugin.py:141 msgid "I currently have notes waiting for %L." msgstr "" -#: plugin.py:145 +#: plugin.py:144 msgid "I have no notes waiting to be delivered." msgstr "" -#: plugin.py:150 +#: plugin.py:149 #, docstring msgid "" "\n" @@ -91,11 +95,11 @@ msgid "" " " msgstr "" -#: plugin.py:159 +#: plugin.py:158 msgid "There were no notes for %r" msgstr "" -#: plugin.py:183 +#: plugin.py:182 msgid "Sent %s: <%s> %s" msgstr "" diff --git a/plugins/Later/plugin.py b/plugins/Later/plugin.py index 225ffef30..e0ce884e0 100644 --- a/plugins/Later/plugin.py +++ b/plugins/Later/plugin.py @@ -81,7 +81,7 @@ class Later(callbacks.Plugin): #format = conf.supybot.reply.format.time() diff = time.time() - when try: - return utils.timeElapsed(diff, seconds=False) + ' ago' + return utils.timeElapsed(diff, seconds=False) + _(' ago') except ValueError: return _('just now') From 4a2c78efb88aba585cc7ed3df891990310f43b29 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Thu, 28 Oct 2010 16:14:56 +0200 Subject: [PATCH 02/15] Later: fix internationalization problem --- plugins/Later/plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Later/plugin.py b/plugins/Later/plugin.py index e0ce884e0..b382559af 100644 --- a/plugins/Later/plugin.py +++ b/plugins/Later/plugin.py @@ -81,7 +81,7 @@ class Later(callbacks.Plugin): #format = conf.supybot.reply.format.time() diff = time.time() - when try: - return utils.timeElapsed(diff, seconds=False) + _(' ago') + return _('%s ago') % utils.timeElapsed(diff, seconds=False) except ValueError: return _('just now') From 172467fb1707b85db3a6236870569fcaad15e0ae Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Thu, 28 Oct 2010 16:15:50 +0200 Subject: [PATCH 03/15] Later: refresh messages.pot --- plugins/Later/messages.pot | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/Later/messages.pot b/plugins/Later/messages.pot index 78dcfdfcf..1e4023bc7 100644 --- a/plugins/Later/messages.pot +++ b/plugins/Later/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2010-10-28 16:12+CEST\n" +"POT-Creation-Date: 2010-10-28 16:15+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -38,7 +38,7 @@ msgid "" msgstr "" #: plugin.py:84 -msgid " ago" +msgid "%s ago" msgstr "" #: plugin.py:86 From 97f51ab08e1066f46820a68ab94fe7a5241219a9 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Thu, 28 Oct 2010 16:42:52 +0200 Subject: [PATCH 04/15] Fix i18n bug for global Supybot --- src/i18n.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/i18n.py b/src/i18n.py index b246908b7..60a6a3190 100644 --- a/src/i18n.py +++ b/src/i18n.py @@ -93,9 +93,13 @@ class PluginInternationalization: elif localeName is None: localeName = 'en' self.currentLocaleName = localeName - directory = get_plugin_dir(self.name) + 'locale' + if self.name != 'supybot': + directory = get_plugin_dir(self.name) + 'locale' + filename = '%s/%s.po' % (directory, localeName) + else: + filename = 'locale/%s.po' % localeName try: - translationFile = open('%s/%s.po' % (directory, localeName), 'ru') + translationFile = open(filename, 'ru') except IOError: # The translation is unavailable self.translations = {} return @@ -170,7 +174,7 @@ class PluginInternationalization: return self.translations[untranslated] % args except KeyError: return untranslated % args - + def internationalizeDocstring(obj): # FIXME: check if the plugin has an _ object From e8bc966827fbeecb082d39b7009c655e26c70641 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Thu, 28 Oct 2010 17:28:27 +0200 Subject: [PATCH 05/15] Add locale abitrary code Add the capability for Supybot to load code depending on the locale src/utils/str.py now imports pluralize and depluralize from this code --- src/i18n.py | 32 ++++++++++++++++++++++++++------ src/utils/str.py | 11 ++++++++--- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/i18n.py b/src/i18n.py index 60a6a3190..1236d2a74 100644 --- a/src/i18n.py +++ b/src/i18n.py @@ -67,6 +67,14 @@ def get_plugin_dir(plugin_name): return filename[0:-len(allowed_file)] return +def getLocalePath(name, localeName, extension): + if name != 'supybot': + directory = get_plugin_dir(name) + 'locale' + else: + import ansi # Any Supybot plugin could fit + directory = ansi.__file__[0:-len('ansi.pyc')] + 'locale' + return '%s/%s.%s' % (directory, localeName, extension) + i18nClasses = {} internationalizedCommands = {} @@ -93,13 +101,11 @@ class PluginInternationalization: elif localeName is None: localeName = 'en' self.currentLocaleName = localeName - if self.name != 'supybot': - directory = get_plugin_dir(self.name) + 'locale' - filename = '%s/%s.po' % (directory, localeName) - else: - filename = 'locale/%s.po' % localeName + try: - translationFile = open(filename, 'ru') + translationFile = open(getLocalePath(self.name, localeName, 'po'), + 'ru') # ru is the mode, not the beginning + # of 'russian' ;) except IOError: # The translation is unavailable self.translations = {} return @@ -175,6 +181,20 @@ class PluginInternationalization: except KeyError: return untranslated % args + def _getL10nCode(self): + return getLocalePath('supybot', self.currentLocaleName, 'py') + + def getPluralizers(self, current_pluralize, current_depluralize): + # This should be used only by src/utils/str.py + try: + execfile(self._getL10nCode()) + except IOError: + pass # Handled by the else v- + if locals().has_key('pluralize') and locals().has_key('depluralize'): + return (pluralize, depluralize) + else: + return (current_pluralize, current_depluralize) + def internationalizeDocstring(obj): # FIXME: check if the plugin has an _ object diff --git a/src/utils/str.py b/src/utils/str.py index 2c6fef345..73be108ba 100644 --- a/src/utils/str.py +++ b/src/utils/str.py @@ -42,6 +42,9 @@ import textwrap from iter import all, any from structures import TwoWayDictionary +from supybot.i18n import PluginInternationalization +_ = PluginInternationalization() + curry = new.instancemethod chars = string.maketrans('', '') @@ -253,12 +256,12 @@ def matchCase(s1, s2): L[i] = L[i].upper() return ''.join(L) -consonants = 'bcdfghjklmnpqrstvwxz' -_pluralizeRegex = re.compile('[%s]y$' % consonants) def pluralize(s): """Returns the plural of s. Put any exceptions to the general English rule of appending 's' in the plurals dictionary. """ + consonants = 'bcdfghjklmnpqrstvwxz' + _pluralizeRegex = re.compile('[%s]y$' % consonants) lowered = s.lower() # Exception dictionary if lowered in plurals: @@ -275,9 +278,9 @@ def pluralize(s): else: return matchCase(s, s+'s') -_depluralizeRegex = re.compile('[%s]ies' % consonants) def depluralize(s): """Returns the singular of s.""" + _depluralizeRegex = re.compile('[%s]ies' % consonants) lowered = s.lower() if lowered in plurals: return matchCase(s, plurals[lowered]) @@ -291,6 +294,8 @@ def depluralize(s): else: return s # Don't know what to do. +pluralize, depluralize = _.getPluralizers(pluralize, depluralize) + def nItems(n, item, between=None): """Works like this: From 520034d3dcbcefa00c5bedf8b85d83c02a446fe9 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Thu, 28 Oct 2010 19:33:27 +0200 Subject: [PATCH 06/15] Localize Later, Limiter, and Math into French --- plugins/Later/locale/fr.po | 108 ++++++++++++++++++++++++++ plugins/Limiter/locale/fr.po | 47 ++++++++++++ plugins/Math/locale/fr.po | 142 +++++++++++++++++++++++++++++++++++ 3 files changed, 297 insertions(+) create mode 100644 plugins/Later/locale/fr.po create mode 100644 plugins/Limiter/locale/fr.po create mode 100644 plugins/Math/locale/fr.po diff --git a/plugins/Later/locale/fr.po b/plugins/Later/locale/fr.po new file mode 100644 index 000000000..0ce99e82c --- /dev/null +++ b/plugins/Later/locale/fr.po @@ -0,0 +1,108 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-28 16:15+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: config.py:45 +msgid "" +"Determines the maximum number of\n" +" messages to be queued for a user. If this value is 0, there is no maximum.\n" +" " +msgstr "Détermine le nombre maximum de messages en attente d'un utilisateur. Si la valeur est 0, il n'y a pas de maximum" + +#: config.py:49 +msgid "" +"Determines whether users will be notified in\n" +" the first place in which they're seen, or in private." +msgstr "Détermine si les utilisateurs seront notifiés au premier endroit où ils sont vus, ou en privé." + +#: plugin.py:46 +msgid "" +"Used to do things later; currently, it only allows the sending of\n" +" nick-based notes. Do note (haha!) that these notes are *not* private\n" +" and don't even pretend to be; if you want such features, consider using the\n" +" Note plugin." +msgstr "Utilisé pour faire des choses plus tard ; actuellement, il n'autorise que les notes basées sur des nicks. Notez (haha !) que ces notes ne sont *pas* privées, et qu'elle ne sont pas conçues pour l'être ; si vous voulez une telle fonctionnalité, utilisez le plugin Note." + +#: plugin.py:84 +msgid "%s ago" +msgstr "il y a %s" + +#: plugin.py:86 +msgid "just now" +msgstr "à l'instant" + +#: plugin.py:107 +msgid "" +" \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" +"Dit le à la prochaine fois qu'il est vu. peut contenir des jokers, et le premier nick correspondant recevra la note." + +#: plugin.py:114 +msgid "I can't send notes to myself." +msgstr "Je ne peux m'envoyer de notes à moi-même." + +#: plugin.py:120 +msgid "That person's message queue is already full." +msgstr "La file d'attente des messages de cette personne est déjà pleine." + +#: plugin.py:125 +msgid "" +"[]\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" +"Si le est donné, répond avec les notes en attente pour ; sinon, répond avec les nicks ayant des notes en attente." + +#: plugin.py:136 +msgid "I have no notes for that nick." +msgstr "Je n'ai pas de note pour ce nick." + +#: plugin.py:141 +msgid "I currently have notes waiting for %L." +msgstr "J'ai actuellement des notes en attente pour %L." + +#: plugin.py:144 +msgid "I have no notes waiting to be delivered." +msgstr "Je n'ai pas de note à délivrer." + +#: plugin.py:149 +msgid "" +"\n" +"\n" +" Removes the notes waiting on .\n" +" " +msgstr "" +"\n" +"\n" +"Supprime les notes en attente pour ." + +#: plugin.py:158 +msgid "There were no notes for %r" +msgstr "Il n'y a pas de note pour %r" + +#: plugin.py:182 +msgid "Sent %s: <%s> %s" +msgstr "Envoyé le %s : " + diff --git a/plugins/Limiter/locale/fr.po b/plugins/Limiter/locale/fr.po new file mode 100644 index 000000000..317f2c157 --- /dev/null +++ b/plugins/Limiter/locale/fr.po @@ -0,0 +1,47 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-17 15:35+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: config.py:46 +msgid "" +"Determines whether the bot will maintain the\n" +" channel limit to be slightly above the current number of people in the\n" +" channel, in order to make clone/drone attacks harder." +msgstr "Détermine si le bot maintiendra la limite de canal pour être juste au-dessus du nombre actuel de personnes, pour rendre les attaques de clones plus difficiles" + +#: config.py:50 +msgid "" +"Determines the minimum number of free\n" +" spots that will be saved when limits are being enforced. This should\n" +" always be smaller than supybot.plugins.Limiter.limit.maximumExcess." +msgstr "Détermine le nombre minimum de 'places' libres à avoir, c'est à dire que la limite sera changées lorsque ce nombre sera atteint. Ce doit toujours être plus petit que supybot.plugins.Limiter.limit.maximumExcess." + +#: config.py:54 +msgid "" +"Determines the maximum number of free spots\n" +" that will be saved when limits are being enforced. This should always be\n" +" larger than supybot.plugins.Limiter.limit.minimumExcess." +msgstr "Détermine le nombre maximum de 'places' libre, c'est à dire le nombre de place qu'il y aura juste après chaque changement de limite. Ce doit toujours être plus grand que supybot.plugins.Limiter.limit.minimumExcess." + +#: plugin.py:40 +msgid "" +"In order to use this plugin, its config values need to be properly\n" +" setup. supybot.plugins.Limiter.enable needs to be set to True and\n" +" supybot.plugins.Limiter.{maximumExcess,minimumExcess} should be set to\n" +" values appropriate to your channel (if the defaults aren't satisfactory.\n" +" Once these are set, and someone enters/leaves the channel, Supybot will\n" +" start setting the proper +l modes.\n" +" " +msgstr "Pour utiliser ce plugin, ses variables de configuration doivent être configurées proprement. supybot.plugins.Limiter.enable doit être défini à True, et supybot.plugins.Limiter.{maximumExcess,minimumExcess} doivent être définis à la valeur appropriée piur votre canal (si les valeurs par défaut ne satisfont pas). Une fois qu'elles sont définies, et que quelqu'un entrera/partira du canal, Supybot commencera à définir les modes +l." + diff --git a/plugins/Math/locale/fr.po b/plugins/Math/locale/fr.po new file mode 100644 index 000000000..b1ccc0315 --- /dev/null +++ b/plugins/Math/locale/fr.po @@ -0,0 +1,142 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-17 15:35+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: plugin.py:52 +msgid "" +" [] \n" +"\n" +" Converts from base to base .\n" +" If is left out, it converts to decimal.\n" +" " +msgstr "" +" [] \n" +"\n" +"Converti le nombre d'une base à l'autre. La seconde base est la décimale par défaut." + +#: plugin.py:63 +msgid "Invalid for base %s: %s" +msgstr "Nombre invalide pour la base %s : %s" + +#: plugin.py:69 +msgid "Convert a decimal number to another base; returns a string." +msgstr "Converti un nombre décimal dans une autre base, retourne une chaîne." + +#: plugin.py:90 +msgid "" +"Convert a number from any base, 2 through 36, to any other\n" +" base, 2 through 36. Returns a string." +msgstr "Convertir un nombre de n'import quelle base, de 2 à 36, à n'importe quelle base, de 2 à 36." + +#: plugin.py:157 +msgid "" +"\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 "" +"\n" +"\n" +"Retourne la valeur de l' évaluée. La syntaxe est celle de Python ; le calcul est à virgule flottante. Les calculs à virgule flottante sont utilisés pour enmpêcher l'utilisateur de faire crasher le bot avec quelque chose du genre '10**10**10**10'. L'une des conséquences est que les grandes valeurs commandes '10**24' peuvent ne pas être exactes." + +#: plugin.py:166 +#: plugin.py:220 +msgid "There's really no reason why you should have underscores or brackets in your mathematical expression. Please remove them." +msgstr "Il n'y a aucune réelle raison que vous mettiez des underscores ou des crochets dans vos expressions mathématiques. Merci de les retirer." + +#: plugin.py:172 +#: plugin.py:228 +msgid "You can't use lambda in this command." +msgstr "Vous ne pouvez utiliser lambda dans cette commande." + +#: plugin.py:202 +#: plugin.py:236 +msgid "The answer exceeded %s or so." +msgstr "La réponse dépacer %s." + +#: plugin.py:204 +#: plugin.py:238 +msgid "Something in there wasn't a valid number." +msgstr "Quelque chose là-dedans n'est pas un nombre valide" + +#: plugin.py:206 +#: plugin.py:240 +msgid "%s is not a defined function." +msgstr "%s n'est pas une fonction définie" + +#: plugin.py:213 +msgid "" +"\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 "" +"\n" +"\n" +"Cette commande est la même que la commande 'calc', excepté qu'elle utilise des mathématiques entières, ce qui peut causer une surconsommation de CPU de la part du bot. C'est pourquoi elle requiert la capacité 'trusted'." + +#: plugin.py:250 +msgid "" +"\n" +"\n" +" Returns the value of an RPN expression.\n" +" " +msgstr "" +"\n" +"\n" +"Retourne la valeur de l'expression mathématique NPI." + +#: plugin.py:275 +msgid "Not enough arguments for %s" +msgstr "Pas assez d'arguments pour %s." + +#: plugin.py:288 +msgid "%q is not a defined function." +msgstr "%q n'est pas une fonction définie." + +#: plugin.py:295 +msgid "Stack: [%s]" +msgstr "Pile : [%s]" + +#: plugin.py:299 +msgid "" +"[] to \n" +"\n" +" Converts from to . If number isn't given, it\n" +" defaults to 1. For unit information, see 'units' command.\n" +" " +msgstr "" +"[] to \n" +"\n" +"Convertit de l' à l'. Si le nombre n'est pas donné, il vaut 1 par défaut. Pour plus d'informations sur les unités, utilisez la commande 'units'." + +#: plugin.py:314 +msgid "" +" []\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 "" +"[]\n" +"\n" +"Sans argument, retourne la liste des types de mesures, qui peuvent être passés en argument. Lors de l'appel avec un argument, retourne les unités de chaque type." + From 6c1b91c227a13fb3168d44b0731e49a622e0f973 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Fri, 29 Oct 2010 12:03:08 +0200 Subject: [PATCH 07/15] MoobotFactoid: Internationalize a string --- plugins/MoobotFactoids/messages.pot | 92 ++++++++++++++++------------- plugins/MoobotFactoids/plugin.py | 4 +- 2 files changed, 52 insertions(+), 44 deletions(-) diff --git a/plugins/MoobotFactoids/messages.pot b/plugins/MoobotFactoids/messages.pot index 0c51bc8d8..ce53fb9a3 100644 --- a/plugins/MoobotFactoids/messages.pot +++ b/plugins/MoobotFactoids/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2010-10-17 16:36+CEST\n" +"POT-Creation-Date: 2010-10-29 12:02+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -28,38 +28,38 @@ msgid "" " when the 'most' command is called." msgstr "" -#: plugin.py:293 +#: plugin.py:292 #, docstring msgid "" "Add the help for \"@help MoobotFactoids\" here (assuming you don't implement a MoobotFactoids\n" " command). This should describe *how* to use this plugin." msgstr "" -#: plugin.py:350 +#: plugin.py:349 msgid "%s is %s" msgstr "" -#: plugin.py:369 +#: plugin.py:368 msgid "Factoid %q is locked." msgstr "" -#: plugin.py:376 +#: plugin.py:375 msgid "Factoid %q not found." msgstr "" -#: plugin.py:386 +#: plugin.py:385 msgid "Missing an 'is' or '_is_'." msgstr "" -#: plugin.py:402 +#: plugin.py:401 msgid "Factoid %q already exists." msgstr "" -#: plugin.py:436 +#: plugin.py:435 msgid "%s, or %s" msgstr "" -#: plugin.py:457 +#: plugin.py:456 #, docstring msgid "" "[] \n" @@ -70,7 +70,7 @@ msgid "" " " msgstr "" -#: plugin.py:470 +#: plugin.py:469 #, docstring msgid "" "[] \n" @@ -81,39 +81,39 @@ msgid "" " " msgstr "" -#: plugin.py:481 plugin.py:521 +#: plugin.py:480 plugin.py:520 msgid "No such factoid: %q" msgstr "" -#: plugin.py:490 +#: plugin.py:489 msgid "Created by %s on %s." msgstr "" -#: plugin.py:496 +#: plugin.py:495 msgid " Last modified by %s on %s." msgstr "" -#: plugin.py:504 +#: plugin.py:503 msgid " Last requested by %s on %s, requested %n." msgstr "" -#: plugin.py:511 +#: plugin.py:510 msgid " Locked by %s on %s." msgstr "" -#: plugin.py:526 +#: plugin.py:525 msgid "Factoid %q is already locked." msgstr "" -#: plugin.py:529 +#: plugin.py:528 msgid "Factoid %q is not locked." msgstr "" -#: plugin.py:539 +#: plugin.py:538 msgid "Cannot %s someone else's factoid unless you are an admin." msgstr "" -#: plugin.py:551 +#: plugin.py:550 #, docstring msgid "" "[] \n" @@ -124,7 +124,7 @@ msgid "" " " msgstr "" -#: plugin.py:562 +#: plugin.py:561 #, docstring msgid "" "[] \n" @@ -135,7 +135,7 @@ msgid "" " " msgstr "" -#: plugin.py:573 +#: plugin.py:572 #, docstring msgid "" "[] {popular|authored|recent}\n" @@ -148,43 +148,51 @@ msgid "" " " msgstr "" -#: plugin.py:598 +#: plugin.py:594 +msgid "author" +msgstr "" + +#: plugin.py:596 +msgid "authors" +msgstr "" + +#: plugin.py:597 msgid "Most prolific %s: %L" msgstr "" -#: plugin.py:600 plugin.py:612 +#: plugin.py:599 plugin.py:611 msgid "There are no factoids in my database." msgstr "" -#: plugin.py:607 +#: plugin.py:606 msgid "latest factoid" msgstr "" -#: plugin.py:609 +#: plugin.py:608 msgid "latest factoids" msgstr "" -#: plugin.py:610 +#: plugin.py:609 msgid "%s: %L" msgstr "" -#: plugin.py:619 +#: plugin.py:618 msgid "requested factoid" msgstr "" -#: plugin.py:621 +#: plugin.py:620 msgid "requested factoids" msgstr "" -#: plugin.py:622 +#: plugin.py:621 msgid "Top %s: %L" msgstr "" -#: plugin.py:624 +#: plugin.py:623 msgid "No factoids have been requested from my database." msgstr "" -#: plugin.py:628 +#: plugin.py:627 #, docstring msgid "" "[] \n" @@ -196,15 +204,15 @@ msgid "" " " msgstr "" -#: plugin.py:641 +#: plugin.py:640 msgid "No factoids by %q found." msgstr "" -#: plugin.py:644 +#: plugin.py:643 msgid "Author search for %q (%i found): %L" msgstr "" -#: plugin.py:651 +#: plugin.py:650 #, docstring msgid "" "[] \n" @@ -215,15 +223,15 @@ msgid "" " " msgstr "" -#: plugin.py:659 +#: plugin.py:658 msgid "No keys matching %q found." msgstr "" -#: plugin.py:666 +#: plugin.py:665 msgid "Key search for %q (%i found): %L" msgstr "" -#: plugin.py:673 +#: plugin.py:672 #, docstring msgid "" "[] \n" @@ -234,15 +242,15 @@ msgid "" " " msgstr "" -#: plugin.py:681 +#: plugin.py:680 msgid "No values matching %q found." msgstr "" -#: plugin.py:684 +#: plugin.py:683 msgid "Value search for %q (%i found): %L" msgstr "" -#: plugin.py:691 +#: plugin.py:690 #, docstring msgid "" "[] \n" @@ -252,7 +260,7 @@ msgid "" " " msgstr "" -#: plugin.py:704 +#: plugin.py:703 #, docstring msgid "" "[]\n" @@ -263,7 +271,7 @@ msgid "" " " msgstr "" -#: plugin.py:712 +#: plugin.py:711 msgid "No factoids in the database." msgstr "" diff --git a/plugins/MoobotFactoids/plugin.py b/plugins/MoobotFactoids/plugin.py index b3f5a1bac..6576dadbd 100644 --- a/plugins/MoobotFactoids/plugin.py +++ b/plugins/MoobotFactoids/plugin.py @@ -591,9 +591,9 @@ class MoobotFactoids(callbacks.Plugin): L = ['%s (%s)' % (plugins.getUserName(t[0]), int(t[1])) for t in results] if L: - author = 'author' + author = _('author') if len(L) != 1: - author = 'authors' + author = _('authors') irc.reply(format(_('Most prolific %s: %L'), author, L)) else: irc.error(_('There are no factoids in my database.')) From 9ce8b4d59c1706fc124c96a61d1eb0ed69c7b8dc Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Fri, 29 Oct 2010 13:54:58 +0200 Subject: [PATCH 08/15] Note: Add the messages.pot --- plugins/Note/messages.pot | 88 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 plugins/Note/messages.pot diff --git a/plugins/Note/messages.pot b/plugins/Note/messages.pot new file mode 100644 index 000000000..51be4c044 --- /dev/null +++ b/plugins/Note/messages.pot @@ -0,0 +1,88 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2010-10-29 13:54+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:179 +#, docstring +msgid "" +",[,[...]] \n" +"\n" +" Sends a new note to the user specified. Multiple recipients may be\n" +" specified by separating their names by commas.\n" +" " +msgstr "" + +#: plugin.py:195 +#, docstring +msgid "" +" \n" +"\n" +" Sends a note in reply to .\n" +" " +msgstr "" + +#: plugin.py:219 +#, docstring +msgid "" +"\n" +"\n" +" Unsends the note with the id given. You must be the\n" +" author of the note, and it must be unread.\n" +" " +msgstr "" + +#: plugin.py:251 +#, docstring +msgid "" +"\n" +"\n" +" Retrieves a single note by its unique note id. Use the 'note list'\n" +" command to see what unread notes you have.\n" +" " +msgstr "" + +#: plugin.py:281 +#, docstring +msgid "" +"[--{regexp} ] [--sent] []\n" +"\n" +" Searches your received notes for ones matching . If --regexp is\n" +" given, its associated value is taken as a regexp and matched against\n" +" the notes. If --sent is specified, only search sent notes.\n" +" " +msgstr "" + +#: plugin.py:320 +#, docstring +msgid "" +"[--{old,sent}] [--{from,to} ]\n" +"\n" +" Retrieves the ids of all your unread notes. If --old is given, list\n" +" read notes. If --sent is given, list notes that you have sent. If\n" +" --from is specified, only lists notes sent to you from . If\n" +" --to is specified, only lists notes sent by you to .\n" +" " +msgstr "" + +#: plugin.py:361 +#, docstring +msgid "" +"takes no arguments\n" +"\n" +" Retrieves your next unread note, if any.\n" +" " +msgstr "" + From 53395162578bab3cff00566357392fc7dd8f1496 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Fri, 29 Oct 2010 14:47:47 +0200 Subject: [PATCH 09/15] Owner: Add the messages.pot --- plugins/Owner/messages.pot | 178 +++++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 plugins/Owner/messages.pot diff --git a/plugins/Owner/messages.pot b/plugins/Owner/messages.pot new file mode 100644 index 000000000..537cb4a05 --- /dev/null +++ b/plugins/Owner/messages.pot @@ -0,0 +1,178 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2010-10-29 14:47+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:270 +#, docstring +msgid "" +"\n" +"\n" +" Logs to the global Supybot log at critical priority. Useful for\n" +" marking logfiles for later searching.\n" +" " +msgstr "" + +#: plugin.py:280 +#, docstring +msgid "" +"\n" +"\n" +" Sends to all channels the bot is currently on and not\n" +" lobotomized in.\n" +" " +msgstr "" + +#: plugin.py:295 +#, docstring +msgid "" +"[--remove] []\n" +"\n" +" Sets the default plugin for to . If --remove is\n" +" given, removes the current default plugin for . If no plugin\n" +" is given, returns the current default plugin set for . See\n" +" also, supybot.commands.defaultPlugins.importantPlugins.\n" +" " +msgstr "" + +#: plugin.py:333 +#, docstring +msgid "" +"\n" +"\n" +" Sends the raw string given to the server.\n" +" " +msgstr "" + +#: plugin.py:347 +#, docstring +msgid "" +"[]\n" +"\n" +" Exits the bot with the QUIT message . If is not given,\n" +" the default quit message (supybot.plugins.Owner.quitMsg) will be used.\n" +" If there is no default quitMsg set, your nick will be used.\n" +" " +msgstr "" + +#: plugin.py:363 +#, docstring +msgid "" +"takes no arguments\n" +"\n" +" Runs all the periodic flushers in world.flushers. This includes\n" +" flushing all logs and all configuration changes to disk.\n" +" " +msgstr "" + +#: plugin.py:373 +#, docstring +msgid "" +"[]\n" +"\n" +" Runs the standard upkeep stuff (flushes and gc.collects()). If given\n" +" a level, runs that level of upkeep (currently, the only supported\n" +" level is \"high\", which causes the bot to flush a lot of caches as well\n" +" as do normal upkeep stuff.\n" +" " +msgstr "" + +#: plugin.py:412 +#, docstring +msgid "" +"[--deprecated] \n" +"\n" +" Loads the plugin from any of the directories in\n" +" conf.supybot.directories.plugins; usually this includes the main\n" +" installed directory and 'plugins' in the current directory.\n" +" --deprecated is necessary if you wish to load deprecated plugins.\n" +" " +msgstr "" + +#: plugin.py:447 +#, docstring +msgid "" +"\n" +"\n" +" Unloads and subsequently reloads the plugin by name; use the 'list'\n" +" command to see a list of the currently loaded plugins.\n" +" " +msgstr "" + +#: plugin.py:476 +#, docstring +msgid "" +"\n" +"\n" +" Unloads the callback by name; use the 'list' command to see a list\n" +" of the currently loaded callbacks. Obviously, the Owner plugin can't\n" +" be unloaded.\n" +" " +msgstr "" + +#: plugin.py:500 +#, docstring +msgid "" +"{add|remove} \n" +"\n" +" Adds or removes (according to the first argument) from the\n" +" default capabilities given to users (the configuration variable\n" +" supybot.capabilities stores these).\n" +" " +msgstr "" + +#: plugin.py:525 +#, docstring +msgid "" +"[] \n" +"\n" +" Disables the command for all users (including the owners).\n" +" If is given, only disables the from . If\n" +" you want to disable a command for most users but not for yourself, set\n" +" a default capability of -plugin.command or -command (if you want to\n" +" disable the command in all plugins).\n" +" " +msgstr "" + +#: plugin.py:552 +#, docstring +msgid "" +"[] \n" +"\n" +" Enables the command for all users. If \n" +" if given, only enables the from . This command is\n" +" the inverse of disable.\n" +" " +msgstr "" + +#: plugin.py:571 +#, docstring +msgid "" +" \n" +"\n" +" Renames in to the .\n" +" " +msgstr "" + +#: plugin.py:588 +#, docstring +msgid "" +"\n" +"\n" +" Removes all renames in . The plugin will be reloaded after\n" +" this command is run.\n" +" " +msgstr "" + From ec6a267c09e9c15c0610d28312906a74ae00fffe Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Fri, 29 Oct 2010 15:31:36 +0200 Subject: [PATCH 10/15] Internationalize more functions in src/utils/str.py --- src/i18n.py | 21 +++++++++++++++++++++ src/utils/str.py | 4 ++++ 2 files changed, 25 insertions(+) diff --git a/src/i18n.py b/src/i18n.py index 1236d2a74..6f80564b2 100644 --- a/src/i18n.py +++ b/src/i18n.py @@ -195,6 +195,27 @@ class PluginInternationalization: else: return (current_pluralize, current_depluralize) + def getOrdinal(self, current_ordinal): + # This should be used only by src/utils/str.py + try: + execfile(self._getL10nCode()) + except IOError: + pass # Handled by the else v- + if locals().has_key('ordinal'): + return ordinal + else: + return current_ordinal + + def getBeAndHave(self, current_be, current_have): + # This should be used only by src/utils/str.py + try: + execfile(self._getL10nCode()) + except IOError: + pass # Handled by the else v- + if locals().has_key('be') and locals().has_key('have'): + return (be, have) + else: + return (current_be, current_have) def internationalizeDocstring(obj): # FIXME: check if the plugin has an _ object diff --git a/src/utils/str.py b/src/utils/str.py index 73be108ba..741b870b2 100644 --- a/src/utils/str.py +++ b/src/utils/str.py @@ -350,6 +350,8 @@ def ordinal(i): ord = 'rd' return '%s%s' % (i, ord) +ordinal = _.getOrdinal(ordinal) + def be(i): """Returns the form of the verb 'to be' based on the number i.""" if i == 1: @@ -364,6 +366,8 @@ def has(i): else: return 'have' +be, have = _.getVerbs(be, have) + def toBool(s): s = s.strip().lower() if s in ('true', 'on', 'enable', 'enabled', '1'): From 6737424bc6fae02da68fbf0655ea1cd4ac1142e2 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Fri, 29 Oct 2010 15:33:36 +0200 Subject: [PATCH 11/15] Shorten PluginInternationalisation.get* in src/i18n.py --- src/i18n.py | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/src/i18n.py b/src/i18n.py index 6f80564b2..51db7ba3c 100644 --- a/src/i18n.py +++ b/src/i18n.py @@ -184,38 +184,29 @@ class PluginInternationalization: def _getL10nCode(self): return getLocalePath('supybot', self.currentLocaleName, 'py') - def getPluralizers(self, current_pluralize, current_depluralize): + def getPluralizers(self, pluralize, depluralize): # This should be used only by src/utils/str.py try: execfile(self._getL10nCode()) except IOError: - pass # Handled by the else v- - if locals().has_key('pluralize') and locals().has_key('depluralize'): - return (pluralize, depluralize) - else: - return (current_pluralize, current_depluralize) + pass + return (pluralize, depluralize) - def getOrdinal(self, current_ordinal): + def getOrdinal(self, ordinal): # This should be used only by src/utils/str.py try: execfile(self._getL10nCode()) except IOError: - pass # Handled by the else v- - if locals().has_key('ordinal'): - return ordinal - else: - return current_ordinal + pass + return ordinal - def getBeAndHave(self, current_be, current_have): + def getBeAndHave(self, be, have): # This should be used only by src/utils/str.py try: execfile(self._getL10nCode()) except IOError: - pass # Handled by the else v- - if locals().has_key('be') and locals().has_key('have'): - return (be, have) - else: - return (current_be, current_have) + pass + return (be, have) def internationalizeDocstring(obj): # FIXME: check if the plugin has an _ object From eb8b16f8fb6da8f87dc1655b8a9e64345dfb9087 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Fri, 29 Oct 2010 18:10:32 +0200 Subject: [PATCH 12/15] Localize Misc, MoobotFactoids, Network, News, NickCapture, Nikometer, Note, Owner, Plugin, Praise, Protector, Quote, QuoteGrabs, RSS, Relay, Reply, Scheduler, and Seen --- plugins/Misc/locale/fr.po | 250 +++++++++++++++++++++++ plugins/MoobotFactoids/locale/fr.po | 296 ++++++++++++++++++++++++++++ plugins/Network/locale/fr.po | 186 +++++++++++++++++ plugins/News/locale/fr.po | 117 +++++++++++ plugins/NickCapture/locale/fr.po | 38 ++++ plugins/Nickometer/locale/fr.po | 31 +++ plugins/Note/locale/fr.po | 100 ++++++++++ plugins/Owner/locale/fr.po | 206 +++++++++++++++++++ plugins/Plugin/locale/fr.po | 219 ++++++++++++++++++++ plugins/Praise/locale/fr.po | 59 ++++++ plugins/Protector/locale/fr.po | 29 +++ plugins/Quote/locale/fr.po | 31 +++ plugins/QuoteGrabs/locale/fr.po | 181 +++++++++++++++++ plugins/RSS/locale/fr.po | 173 ++++++++++++++++ plugins/Relay/locale/fr.po | 221 +++++++++++++++++++++ plugins/Reply/locale/fr.po | 70 +++++++ plugins/Scheduler/locale/fr.po | 87 ++++++++ plugins/Seen/locale/fr.po | 128 ++++++++++++ 18 files changed, 2422 insertions(+) create mode 100644 plugins/Misc/locale/fr.po create mode 100644 plugins/MoobotFactoids/locale/fr.po create mode 100644 plugins/Network/locale/fr.po create mode 100644 plugins/News/locale/fr.po create mode 100644 plugins/NickCapture/locale/fr.po create mode 100644 plugins/Nickometer/locale/fr.po create mode 100644 plugins/Note/locale/fr.po create mode 100644 plugins/Owner/locale/fr.po create mode 100644 plugins/Plugin/locale/fr.po create mode 100644 plugins/Praise/locale/fr.po create mode 100644 plugins/Protector/locale/fr.po create mode 100644 plugins/Quote/locale/fr.po create mode 100644 plugins/QuoteGrabs/locale/fr.po create mode 100644 plugins/RSS/locale/fr.po create mode 100644 plugins/Relay/locale/fr.po create mode 100644 plugins/Reply/locale/fr.po create mode 100644 plugins/Scheduler/locale/fr.po create mode 100644 plugins/Seen/locale/fr.po diff --git a/plugins/Misc/locale/fr.po b/plugins/Misc/locale/fr.po new file mode 100644 index 000000000..485bfaf78 --- /dev/null +++ b/plugins/Misc/locale/fr.po @@ -0,0 +1,250 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-17 15:35+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: config.py:45 +msgid "" +"Determines whether the bot will list private\n" +" plugins with the list command if given the --private switch. If this is\n" +" disabled, non-owner users should be unable to see what private plugins\n" +" are loaded." +msgstr "Détermine si le bot listera les plugins privés dans la commande 'list', si l'option --private est donné. Si cette variable est désactivée, les utilisateurs non-owner ne pourront pas voir quels plugins privés sont chargés." + +#: config.py:50 +msgid "" +"Determines the format string for\n" +" timestamps in the Misc.last command. Refer to the Python documentation\n" +" for the time module to see what formats are accepted. If you set this\n" +" variable to the empty string, the timestamp will not be shown." +msgstr "Détermine la chaîne de formattage pour les timestamps de la commande Misc.last. Référez-vous à la documentation de Python sur le module 'time' pour voir quels formats sont acceptés. Si vous définissez cette variable pour être une chaîne vide, le timestamp ne sera pas affiché." + +#: config.py:57 +msgid "" +"Determines whether or not\n" +" the timestamp will be included in the output of last when it is part of a\n" +" nested command" +msgstr "Détermine si le timestamp sera inclu dans la sortie de 'last' lorsqu'il est dans une commande imbriquée." + +#: config.py:61 +msgid "" +"Determines whether or not the\n" +" nick will be included in the output of last when it is part of a nested\n" +" command" +msgstr "Détermine si le nick est inclu dans la sortie de 'last' lorsqu'il est dans une commande imbriquée." + +#: plugin.py:81 +msgid "You've given me %s invalid commands within the last minute; I'm now ignoring you for %s." +msgstr "Vous m'avez donné %s commandes invalides dans la dernière minute, je vous ignore maitenant pendant %s." + +#: plugin.py:93 +msgid "The %q plugin is loaded, but there is no command named %q in it. Try \"list %s\" to see the commands in the %q plugin." +msgstr "Le plugin %q est chargé, mais il n'a pas de commande appelée %q. Essayez \"list %s\" pour voir les commandes dans le plugin %q." + +#: plugin.py:119 +msgid "" +"[--private] []\n" +"\n" +" Lists the commands available in the given plugin. If no plugin is\n" +" given, lists the public plugins available. If --private is given,\n" +" lists the private plugins.\n" +" " +msgstr "" +"[--private] []\n" +"\n" +"Liste les commandes disponibles dans le plugin donné. Si aucun plugin n'est donné, liste les plugins publics. Si --private est donné, il liste les plugins privés." + +#: plugin.py:144 +msgid "There are no private plugins." +msgstr "Il n'y a pas de plugin privé." + +#: plugin.py:146 +msgid "There are no public plugins." +msgstr "Il n'y a pas de plugin privé." + +#: plugin.py:153 +msgid "That plugin exists, but has no commands. This probably means that it has some configuration variables that can be changed in order to modify its behavior. Try \"config list supybot.plugins.%s\" to see what configuration variables it has." +msgstr "Ce plugin existe, mais n'a pas de commande. Cela signifit probablement qu'il a des variables de configuration qui peuvent être changés pour modifier son comportement. Essayez \"config list supybot.plugins.%s\" pour voir quelles variables de configuration il a." + +#: plugin.py:164 +msgid "" +"\n" +"\n" +" Searches for in the commands currently offered by the bot,\n" +" returning a list of the commands containing that string.\n" +" " +msgstr "" +"\n" +"\n" +"Recherche la dans les commandes actuellement fournies par le bot et retourne une list des commandes contenant cette chaîne." + +#: plugin.py:183 +msgid "No appropriate commands were found." +msgstr "Aucune commande appropriée n'a été trouvée." + +#: plugin.py:188 +msgid "" +"[] []\n" +"\n" +" This command gives a useful description of what does.\n" +" is only necessary if the command is in more than one plugin.\n" +" " +msgstr "" +"[] []\n" +"\n" +"Cette commande donne une description utilie de ce que fait la . n'est nécessaire que si la commande est présente dans plus d'un plugin." + +#: plugin.py:198 +msgid "That command exists in the %L plugins. Please specify exactly which plugin command you want help with." +msgstr "Cette commande existe dans les plugins %L. Veuillez spécifier dans quel plugin se trouve la commande pour laquelle vous cherchez de l'aide." + +#: plugin.py:205 +msgid "There is no command %q." +msgstr "Il n'y a pas de commande %q." + +#: plugin.py:211 +msgid "" +"takes no arguments\n" +"\n" +" Returns the version of the current bot.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +"\n" +"Retourne la version actuelle du bot" + +#: plugin.py:217 +msgid "The newest version available online is %s." +msgstr "La dernière version disponible en ligne est %s." + +#: plugin.py:221 +msgid "I couldn't fetch the newest version from the Supybot website." +msgstr "Je ne peux récupérer la dernière version sur le site de Supybot." + +#: plugin.py:223 +msgid "The current (running) version of this Supybot is %s. %s" +msgstr "La version de ce Supybot est %s. %s" + +#: plugin.py:230 +msgid "" +"takes no arguments\n" +"\n" +" Returns a URL saying where to get Supybot.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +"\n" +"Retourne une URL disant où trouver Supybot." + +#: plugin.py:234 +msgid "My source is at http://supybot.com/" +msgstr "Ma source est disponible sur http://supybot.com/" + +#: plugin.py:239 +msgid "" +"[]\n" +"\n" +" If the last command was truncated due to IRC message length\n" +" limitations, returns the next chunk of the result of the last command.\n" +" If is given, it takes the continuation of the last command from\n" +" instead of the person sending this message.\n" +" " +msgstr "" +"[]\n" +"\n" +"Si la dernière commande était tronquée par les limitations de taille des messages sur IRC, retourne le morceau suivant résultant de la dernière commande. Si le est donné, continue la dernière commande du plutôt que de la personne envoyant ce message." + +#: plugin.py:253 +msgid "%s has no public mores." +msgstr "%s n'a pas de 'more' public." + +#: plugin.py:256 +msgid "Sorry, I can't find any mores for %s" +msgstr "Désolé, je ne peux trouver de 'more' pour %s" + +#: plugin.py:265 +msgid "You haven't asked me a command; perhaps you want to see someone else's more. To do so, call this command with that person's nick." +msgstr "Vous ne m'avez donné aucune commande. Peut-être que vous voulez voir celle de quelqu'un d'autre. Pour cela, appelez cette commande en ajoutant le nick de cette personne." + +#: plugin.py:269 +msgid "That's all, there is no more." +msgstr "C'est tout, il n'y a plus de 'more'" + +#: plugin.py:279 +msgid "" +"[--{from,in,on,with,without,regexp} ] [--nolimit]\n" +"\n" +" Returns the last message matching the given criteria. --from requires\n" +" a nick from whom the message came; --in requires a channel the message\n" +" was sent to; --on requires a network the message was sent on; --with\n" +" requires some string that had to be in the message; --regexp requires\n" +" a regular expression the message must match; --nolimit returns all\n" +" the messages that can be found. By default, the channel this command is\n" +" given in is searched.\n" +" " +msgstr "" +"[--{from,in,on,with,without,regexp} ] [--nolimit]\n" +"\n" +"Retourne le dernier message correspondant aux critères donnés. --from requiert le nick de la personne qui a envoyé le message ; --in requiert le canal sur lequel a été envoyé le message ; --with requiert une chaîne qui doit être dans le message --regexp requiert une expression régulière à laquelle le message doit correspondre ; --nolimit retourne tous les messages qui peuvent être trouvés. Par défaut, recherche dans les logs du canal sur lequel est envoyée cette commande." + +#: plugin.py:373 +msgid "I couldn't find a message matching that criteria in my history of %s messages." +msgstr "Je ne peux trovuer de message correspondant à ce critère dans mon historique de %s messages." + +#: plugin.py:388 +msgid "" +" \n" +"\n" +" Tells the whatever is. Use nested commands to your\n" +" benefit here.\n" +" " +msgstr "" +" \n" +"\n" +"Dit le au . Utile si vous utilisez des commandes imbriquées." + +#: plugin.py:396 +#, fuzzy +msgid "Dude, just give the command. No need for the tell." +msgstr "Mec, contentes-toi de me donner la commande. Pas besoin d'utiliser 'tell'." + +#: plugin.py:401 +#, fuzzy +msgid "You just told me, why should I tell myself?" +msgstr "Vous venez de me le dire, pourquoi devrais-je me le dire moi-même ?" + +#: plugin.py:406 +#, fuzzy +msgid "I haven't seen %s, I'll let you do the telling." +msgstr "Je n'ai pas vu %s, je vous laisse lui dire." + +#: plugin.py:411 +#, fuzzy +msgid "%s wants me to tell you: %s" +msgstr "%s veut que je vous dise : %s" + +#: plugin.py:417 +msgid "" +"takes no arguments\n" +"\n" +" Checks to see if the bot is alive.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +"\n" +"Vérifie si le bot est encore en vie." + +#: plugin.py:421 +msgid "pong" +msgstr "pong" + diff --git a/plugins/MoobotFactoids/locale/fr.po b/plugins/MoobotFactoids/locale/fr.po new file mode 100644 index 000000000..e7f88ee7b --- /dev/null +++ b/plugins/MoobotFactoids/locale/fr.po @@ -0,0 +1,296 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-29 12:02+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: config.py:46 +msgid "" +"Determines whether\n" +" or not the factoid value will be shown when a listkeys search returns only\n" +" one factoid key." +msgstr "Détermine si la valeur de la factoid sera affichée lorsqu'une recherche de clef ne retournera qu'une seule clef." + +#: config.py:50 +msgid "" +"Determines how many items are shown\n" +" when the 'most' command is called." +msgstr "Détermine combien d'éléments sont affichés lorsque la commande 'most' est appelée." + +#: plugin.py:292 +msgid "" +"Add the help for \"@help MoobotFactoids\" here (assuming you don't implement a MoobotFactoids\n" +" command). This should describe *how* to use this plugin." +msgstr "" + +#: plugin.py:349 +msgid "%s is %s" +msgstr "%s est %s" + +#: plugin.py:368 +msgid "Factoid %q is locked." +msgstr "La factoid %q est verrouillée" + +#: plugin.py:375 +msgid "Factoid %q not found." +msgstr "Factoid %q non trouvée." + +#: plugin.py:385 +msgid "Missing an 'is' or '_is_'." +msgstr "Il manque un 'is' ou un '_is_'" + +#: plugin.py:401 +msgid "Factoid %q already exists." +msgstr "La factoid %q existe déjà." + +#: plugin.py:435 +msgid "%s, or %s" +msgstr "%s, ou %s" + +#: plugin.py:456 +msgid "" +"[] \n" +"\n" +" Returns the literal factoid for the given factoid key. No parsing of\n" +" the factoid value is done as it is with normal retrieval. \n" +" is only necessary if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Retourne la factoid littérale pour la clef donnée. Aucun parsage n'est effecté sur la valeur de la factoid. n'est nécesaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:469 +msgid "" +"[] \n" +"\n" +" Returns the various bits of info on the factoid for the given key.\n" +" is only necessary if the message isn't sent in the channel\n" +" itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Retourne différentes informations sur la factoid ayant la clef donnée. n'est nécesaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:480 +#: plugin.py:520 +msgid "No such factoid: %q" +msgstr "Cette factoid n'existe pas : %q" + +#: plugin.py:489 +msgid "Created by %s on %s." +msgstr "Créé par %s le %s" + +#: plugin.py:495 +msgid " Last modified by %s on %s." +msgstr "Dernière modification par %s le %s" + +#: plugin.py:503 +msgid " Last requested by %s on %s, requested %n." +msgstr "Dernière requete par %s le %s ; a demandé %n." + +#: plugin.py:510 +msgid " Locked by %s on %s." +msgstr "Verrouillé par %s le %s" + +#: plugin.py:525 +msgid "Factoid %q is already locked." +msgstr "La factoid %q est déjà bloquée." + +#: plugin.py:528 +msgid "Factoid %q is not locked." +msgstr "La factoid %q n'est pas bloquée." + +#: plugin.py:538 +msgid "Cannot %s someone else's factoid unless you are an admin." +msgstr "Impossible de %s la factoid de quelqu'un d'autre à moins d'être un admin." + +#: plugin.py:550 +msgid "" +"[] \n" +"\n" +" Locks the factoid with the given factoid key. Requires that the user\n" +" be registered and have created the factoid originally. is\n" +" only necessary if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Verrouille la factoid ayant la clef donnée. Requiert que l'utilisateur soit enregistré et ait créé la factoid. n'est nécesaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:561 +msgid "" +"[] \n" +"\n" +" Unlocks the factoid with the given factoid key. Requires that the\n" +" user be registered and have locked the factoid. is only\n" +" necessary if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Verrouille la factoid ayant la clef donnée. Requiert que l'utilisateur soit enregistré et ait verrouillé la factoid. n'est nécesaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:572 +msgid "" +"[] {popular|authored|recent}\n" +"\n" +" Lists the most {popular|authored|recent} factoids. \"popular\" lists the\n" +" most frequently requested factoids. \"authored\" lists the author with\n" +" the most factoids. \"recent\" lists the most recently created factoids.\n" +" is only necessary if the message isn't sent in the channel\n" +" itself.\n" +" " +msgstr "" +"[] {popular|authored|recent}\n" +"\n" +"Liste les factoids selon un classement. \"popular\" correspond aux plus affichées ; \"authored\" liste les auteurs qui envoient le plus de factoids \"recent\" liste les factoids les plus récentes. n'est nécesaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:594 +msgid "author" +msgstr "auteur" + +#: plugin.py:596 +msgid "authors" +msgstr "auteurs" + +#: plugin.py:597 +msgid "Most prolific %s: %L" +msgstr "%s ayant posté le plus de factoids : %L" + +#: plugin.py:599 +#: plugin.py:611 +msgid "There are no factoids in my database." +msgstr "Il n'y a pas de factoid dans ma base de données." + +#: plugin.py:606 +msgid "latest factoid" +msgstr "dernière factoid" + +#: plugin.py:608 +msgid "latest factoids" +msgstr "dernières factoids" + +#: plugin.py:609 +msgid "%s: %L" +msgstr "%s : %L" + +#: plugin.py:618 +msgid "requested factoid" +msgstr "factoid la plus demandée" + +#: plugin.py:620 +msgid "requested factoids" +msgstr "factoids les plus demandées" + +#: plugin.py:621 +msgid "Top %s: %L" +msgstr "%s : %L" + +#: plugin.py:623 +msgid "No factoids have been requested from my database." +msgstr "Aucune factoid n'a été demandée dans ma base de données." + +#: plugin.py:627 +msgid "" +"[] \n" +"\n" +" Lists the keys of the factoids with the given author. Note that if an\n" +" author has an integer name, you'll have to use that author's id to use\n" +" this function (so don't use integer usernames!). is only\n" +" necessary if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Liste les clefs de l'auteur donné. Notez que si l'auteur a un nom qui est un nombre entier, vous devrez donner l'ID de l'auteur pour utiliser cette fonction (donc, n'utilisez pas de nombres entiers comme noms d'utilisateur !) n'est nécesaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:640 +msgid "No factoids by %q found." +msgstr "Aucune factoid par %q ne peut être trouvée." + +#: plugin.py:643 +msgid "Author search for %q (%i found): %L" +msgstr "Recherche d'auteur pour %q (%i trouvé(s)) : %L" + +#: plugin.py:650 +msgid "" +"[] \n" +"\n" +" Lists the keys of the factoids whose key contains the provided text.\n" +" is only necessary if the message isn't sent in the channel\n" +" itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Liste les clefs des factoids dont la clef contient le texte fourni. n'est nécessaire que si la commande n'est pas envoyée sur le canal lui-même." + +#: plugin.py:658 +msgid "No keys matching %q found." +msgstr "Aucune factoid correspondant à %q trouvée." + +#: plugin.py:665 +msgid "Key search for %q (%i found): %L" +msgstr "Recherche de clef pour %q (%i trouvée(s)) : %L" + +#: plugin.py:672 +msgid "" +"[] \n" +"\n" +" Lists the keys of the factoids whose value contains the provided text.\n" +" is only necessary if the message isn't sent in the channel\n" +" itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Liste les clefs dont la valeur contient le texte recherché. n'est nécesaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:680 +msgid "No values matching %q found." +msgstr "Aucune valeur correspondant à %q trouvée." + +#: plugin.py:683 +msgid "Value search for %q (%i found): %L" +msgstr "Recherche de valeurs pour %q (%i trouvée(s)) : %L" + +#: plugin.py:690 +msgid "" +"[] \n" +"\n" +" Deletes the factoid with the given key. is only necessary\n" +" if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Supprime la factoid avec la clef donnée. n'est nécesaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:703 +msgid "" +"[]\n" +"\n" +" Displays a random factoid (along with its key) from the database.\n" +" is only necessary if the message isn't sent in the channel\n" +" itself.\n" +" " +msgstr "" +"[]\n" +"\n" +"Affiche une factoid aléatoire (avec sa clef) de la base de données. n'est nécesaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:711 +msgid "No factoids in the database." +msgstr "Aucune factoid dans la base de données." + diff --git a/plugins/Network/locale/fr.po b/plugins/Network/locale/fr.po new file mode 100644 index 000000000..30d554177 --- /dev/null +++ b/plugins/Network/locale/fr.po @@ -0,0 +1,186 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-16 12:52+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: plugin.py:57 +msgid "" +"[--ssl] [] []\n" +"\n" +" Connects to another network (which will be represented by the name\n" +" provided in ) at . If port is not provided, it\n" +" defaults to 6667, the default port for IRC. If password is\n" +" provided, it will be sent to the server in a PASS command. If --ssl is\n" +" provided, an SSL connection will be attempted.\n" +" " +msgstr "" +"[--ssl] [] []\n" +"\n" +"Se connecter à un autre réseau (représenté par le ) au . Si le port n'est pas fourni, il s'agit du 6667, celui par défaut pour IRC. Si le est fourni, l'envoie au serveur par la commande PASS. Si --ssl est fourni, une connexion SSL sera requise." + +#: plugin.py:67 +msgid "I'm already connected to %s." +msgstr "Je suis déjà connecté à %s." + +#: plugin.py:87 +msgid "A server must be provided if the network is not already registered." +msgstr "Un serveur doit être fourni si le réseau n'est pas déjà enregistré." + +#: plugin.py:95 +msgid "Connection to %s initiated." +msgstr "Connexion à %s initialisée." + +#: plugin.py:102 +msgid "" +"[] []\n" +"\n" +" Disconnects from the network represented by the network .\n" +" If is given, quits the network with the given quit\n" +" message. is only necessary if the network is different\n" +" from the network the command is sent on.\n" +" " +msgstr "" +"[] []\n" +"\n" +"Se déconnecte du . Si le est fourni, quitte le réseau avec ce message. Le n'est nécessaire que s'il ne s'agit pas du réseau sur lequel la commande est envoyée." + +#: plugin.py:114 +msgid "Disconnection to %s initiated." +msgstr "Déconnexion à %s initialisée." + +#: plugin.py:120 +msgid "" +"[] []\n" +"\n" +" Disconnects and then reconnects to . If no network is given,\n" +" disconnects and then reconnects to the network the command was given\n" +" on. If no quit message is given, uses the configured one\n" +" (supybot.plugins.Owner.quitMsg) or the nick of the person giving the\n" +" command.\n" +" " +msgstr "" +"[] []\n" +"\n" +"Se déconnecte du et s'y reconnecte. Si le est fourni, quitte le réseau avec ce message. Le n'est nécessaire que s'il ne s'agit pas du réseau sur lequel la commande est envoyée." + +#: plugin.py:137 +msgid "" +" [ ...]\n" +"\n" +" Gives the bot (with its associated s) on .\n" +" " +msgstr "" +" [ ...]\n" +"\n" +"Envoie la au bot (avez des arguments) sur le ." + +#: plugin.py:210 +msgid "is an op on %L" +msgstr "est op sur %L" + +#: plugin.py:212 +msgid "is a halfop on %L" +msgstr "est halfop sur %L" + +#: plugin.py:214 +msgid "is voiced on %L" +msgstr "est voicé sur %L" + +#: plugin.py:217 +msgid "is also on %L" +msgstr "est aussi sur %L" + +#: plugin.py:219 +msgid "is on %L" +msgstr "est sur %L" + +#: plugin.py:221 +msgid "isn't on any non-secret channels" +msgstr "n'est sur aucun canal non secret" + +#: plugin.py:228 +#: plugin.py:229 +#: plugin.py:233 +msgid "" +msgstr "" + +#: plugin.py:240 +msgid " identified" +msgstr " identifié" + +#: plugin.py:245 +msgid "%s (%s) has been%s on server %s since %s (idle for %s) and %s.%s" +msgstr "%s (%s) a été%s sur le serveur %s depuis %s (idle depuis %s) et %s.%s" + +#: plugin.py:258 +msgid "There is no %s on %s." +msgstr "Il n'y a pas de %s sur %s." + +#: plugin.py:264 +msgid "" +"[] \n" +"\n" +" Returns the WHOIS response gives for . is\n" +" only necessary if the network is different than the network the command\n" +" is sent on.\n" +" " +msgstr "" +"[] \n" +"\n" +"Retourne les réponses WHOIS du pour le . Le n'est nécessaire que s'il ne s'agit pas du réseau sur lequel la commande est envoyée." + +#: plugin.py:280 +msgid "" +"takes no arguments\n" +"\n" +" Returns the networks to which the bot is currently connected.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +" \n" +"Retourne la liste des réseaux auxquels le bot est actuellement connecté." + +#: plugin.py:293 +msgid "%.2f seconds." +msgstr "%.2f secondes" + +#: plugin.py:297 +msgid "" +"[]\n" +"\n" +" Returns the current latency to . is only necessary\n" +" if the message isn't sent on the network to which this command is to\n" +" apply.\n" +" " +msgstr "" +"[]\n" +"\n" +"Retourne la latence actuelle du . Le n'est nécessaire que s'il ne s'agit pas du réseau sur lequel la commande est envoyée." + +#: plugin.py:303 +msgid "Latency check (from %s)." +msgstr "Vérification de lance (de %s)." + +#: plugin.py:311 +msgid "" +"[]\n" +"\n" +" Returns the current network driver for . is only\n" +" necessary if the message isn't sent on the network to which this\n" +" command is to apply.\n" +" " +msgstr "" +"[]\n" +"\n" +"Retourne le 'driver' actuel pour le . Le n'est nécessaire que s'il ne s'agit pas du réseau sur lequel la commande est envoyée." + diff --git a/plugins/News/locale/fr.po b/plugins/News/locale/fr.po new file mode 100644 index 000000000..eaa196c33 --- /dev/null +++ b/plugins/News/locale/fr.po @@ -0,0 +1,117 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-17 16:53+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: plugin.py:57 +msgid "%s (Subject: %q, added by %s on %s)" +msgstr "%s (Sujet : %q, ajouté par %s le %s)" + +#: plugin.py:61 +msgid "%s (Subject: %q, added by %s on %s, expires at %s)" +msgstr "%s (Sujet : %q, ajouté par %s le %s, expire à %s)" + +#: plugin.py:120 +msgid "" +"[] : \n" +"\n" +" Adds a given news item of to a channel with the given .\n" +" If isn't 0, that news item will expire seconds from\n" +" now. is only necessary if the message isn't sent in the\n" +" channel itself.\n" +" " +msgstr "" +"[] : \n" +"\n" +"Ajoute la news donnée, contenant le à un , avec le donné. Si l' n'est pas 0, la news expirera dans le nombre donné de secondes. n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:132 +msgid "(News item #%i added)" +msgstr "(News #%i ajoutée)" + +#: plugin.py:137 +msgid "" +"[] []\n" +"\n" +" Display the news items for in the format of '(#id) subject'.\n" +" If is given, retrieve only that news item; otherwise retrieve all\n" +" news items. is only necessary if the message isn't sent in\n" +" the channel itself.\n" +" " +msgstr "" +"[] []\n" +"\n" +"Affiche une news sur le dans le format'(#id) sujet'. Si l' est donné, ne récupère que la news correspondante ; sinon, récupère toutes les news. n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:148 +msgid "News for %s: %s" +msgstr "News pour %s : %s" + +#: plugin.py:151 +msgid "No news for %s." +msgstr "Pas de news pour %s." + +#: plugin.py:157 +#: plugin.py:171 +#: plugin.py:187 +#: plugin.py:203 +msgid "news item id" +msgstr "id de news" + +#: plugin.py:162 +msgid "" +"[] \n" +"\n" +" Removes the news item with from . is only\n" +" necessary if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Retourne la news avec l' du . n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:176 +msgid "" +"[] \n" +"\n" +" Changes the news item with from according to the\n" +" regular expression . should be of the form\n" +" s/text/replacement/flags. is only necessary if the message\n" +" isn't sent on the channel itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Change la news ayant cet sur le , en accord avec l'expression régulière . La doit être de la forme s/text/replacement/flags. n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:192 +msgid "" +"[] []\n" +"\n" +" Returns the old news item for with . If no number is\n" +" given, returns all the old news items in reverse order. is\n" +" only necessary if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[] []\n" +"\n" +"Retourne l'ancienne news du avec l'. Si aucun nombre n'est donné, retourne toutes les anciennes news, dans l'ordre inverse. n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:208 +msgid "Old news for %s: %s" +msgstr "Anciennes news pour %s : %s" + +#: plugin.py:211 +msgid "No old news for %s." +msgstr "Pas d'ancienne news pour %s." + diff --git a/plugins/NickCapture/locale/fr.po b/plugins/NickCapture/locale/fr.po new file mode 100644 index 000000000..6d32b4312 --- /dev/null +++ b/plugins/NickCapture/locale/fr.po @@ -0,0 +1,38 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-17 16:58+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: config.py:47 +msgid "" +"Determines whether the bot will check\n" +" occasionally if its preferred nick is in use via the ISON command." +msgstr "Détermine si le bot vérifiera occasionnellement si son nick préféré est en cours d'utilisation grâce à la commande ISON." + +#: config.py:50 +msgid "" +"Determines how often (in seconds) the bot\n" +" will check whether its nick ISON." +msgstr "Détermine tous les combien de temps (en secondes) le bot vérifiera son nick via ISON" + +#: plugin.py:41 +msgid "" +"This module constantly tries to take whatever nick is configured as\n" +" supybot.nick. Just make sure that's set appropriately, and thus plugin\n" +" will do the rest." +msgstr "Ce module essaye constament de récupérer le nick configuré dans supybot.nick. Assurez-vous de le configurer correctement, et ce plugin fera le reste." + +#: plugin.py:90 +msgid "This is returned by the ISON command." +msgstr "Ceci est retourné par la commande ISON." + diff --git a/plugins/Nickometer/locale/fr.po b/plugins/Nickometer/locale/fr.po new file mode 100644 index 000000000..adba1f196 --- /dev/null +++ b/plugins/Nickometer/locale/fr.po @@ -0,0 +1,31 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-17 18:28+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: plugin.py:84 +msgid "" +"[]\n" +"\n" +" Tells you how lame said nick is. If is not given, uses the\n" +" nick of the person giving the command.\n" +" " +msgstr "" +"[]\n" +"\n" +"Mesure la décrédibilité du nick. Si le nick n'est pas donné, utilise le nick de la personne donnant la commande." + +#: plugin.py:226 +msgid "The \"lame nick-o-meter\" reading for \"%s\" is %s%%." +msgstr "Le \"décrédibilit-o-mètre\" pour \"%s\" donne %s%%." + diff --git a/plugins/Note/locale/fr.po b/plugins/Note/locale/fr.po new file mode 100644 index 000000000..e70fffa69 --- /dev/null +++ b/plugins/Note/locale/fr.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-29 13:54+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: plugin.py:179 +msgid "" +",[,[...]] \n" +"\n" +" Sends a new note to the user specified. Multiple recipients may be\n" +" specified by separating their names by commas.\n" +" " +msgstr "" +",[,...] \n" +"\n" +"Envoie la nouvelle note aux utilisateurs spécifiés. De multiples destainaires peuvent être spécifiés en séparant leur noms par des virgules." + +#: plugin.py:195 +msgid "" +" \n" +"\n" +" Sends a note in reply to .\n" +" " +msgstr "" +" \n" +"\n" +"envoie une note en réponse à celle ." + +#: plugin.py:219 +msgid "" +"\n" +"\n" +" Unsends the note with the id given. You must be the\n" +" author of the note, and it must be unread.\n" +" " +msgstr "" +"\n" +"\n" +"Désenvoie la note d' donné. Vous devez être l'auteur de la note, et elle ne doit pas être lue." + +#: plugin.py:251 +msgid "" +"\n" +"\n" +" Retrieves a single note by its unique note id. Use the 'note list'\n" +" command to see what unread notes you have.\n" +" " +msgstr "" +"\n" +"\n" +"Récupère une seule note par son unique. Utilisez la commande 'note list' pour voir combien de notes non lues vous avez." + +#: plugin.py:281 +msgid "" +"[--{regexp} ] [--sent] []\n" +"\n" +" Searches your received notes for ones matching . If --regexp is\n" +" given, its associated value is taken as a regexp and matched against\n" +" the notes. If --sent is specified, only search sent notes.\n" +" " +msgstr "" +"[--{regexp} ] [--sent] []\n" +"\n" +"Recherche les notes correspondant au dans vos notes reçues. Si --regexp est donné, sa valeur associée est utilisé comme expression régulière et est à nouveau recherchée dans les notes. Si --sent est donné, ne recherche que dans les notes envoyées." + +#: plugin.py:320 +msgid "" +"[--{old,sent}] [--{from,to} ]\n" +"\n" +" Retrieves the ids of all your unread notes. If --old is given, list\n" +" read notes. If --sent is given, list notes that you have sent. If\n" +" --from is specified, only lists notes sent to you from . If\n" +" --to is specified, only lists notes sent by you to .\n" +" " +msgstr "" +"[--{old,sent}] [--{from,to} ]\n" +"\n" +"Récupère les id de toutes vos news non lues. Si --old est donné, liste les news lues. Si --sent est donné, liste les news que vous avez envoyées. Si --from est spécifié, liste seulement les news envoyées par l'. Si --to est spécifié, liste seulement les news envoyées par l'." + +#: plugin.py:361 +msgid "" +"takes no arguments\n" +"\n" +" Retrieves your next unread note, if any.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +"\n" +"Récupère votre note non lue suivant, s'il y en a une." + diff --git a/plugins/Owner/locale/fr.po b/plugins/Owner/locale/fr.po new file mode 100644 index 000000000..c20805298 --- /dev/null +++ b/plugins/Owner/locale/fr.po @@ -0,0 +1,206 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-29 14:47+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: plugin.py:270 +msgid "" +"\n" +"\n" +" Logs to the global Supybot log at critical priority. Useful for\n" +" marking logfiles for later searching.\n" +" " +msgstr "" +"\n" +"\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 +msgid "" +"\n" +"\n" +" Sends to all channels the bot is currently on and not\n" +" lobotomized in.\n" +" " +msgstr "" +"\n" +"\n" +"Envoie le à tous les canaux sur lesquels le bot est sans être lobotomisé." + +#: plugin.py:295 +msgid "" +"[--remove] []\n" +"\n" +" Sets the default plugin for to . If --remove is\n" +" given, removes the current default plugin for . If no plugin\n" +" is given, returns the current default plugin set for . See\n" +" also, supybot.commands.defaultPlugins.importantPlugins.\n" +" " +msgstr "" +"[--remove] []\n" +"\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 +msgid "" +"\n" +"\n" +" Sends the raw string given to the server.\n" +" " +msgstr "" +"\n" +"\n" +"Envoie la chaîne directement au serveur." + +#: plugin.py:347 +msgid "" +"[]\n" +"\n" +" Exits the bot with the QUIT message . If is not given,\n" +" the default quit message (supybot.plugins.Owner.quitMsg) will be used.\n" +" If there is no default quitMsg set, your nick will be used.\n" +" " +msgstr "" +"[]\n" +"\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 +msgid "" +"takes no arguments\n" +"\n" +" Runs all the periodic flushers in world.flushers. This includes\n" +" flushing all logs and all configuration changes to disk.\n" +" " +msgstr "" +"ne prend pas d'argument.\n" +"\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 +msgid "" +"[]\n" +"\n" +" Runs the standard upkeep stuff (flushes and gc.collects()). If given\n" +" a level, runs that level of upkeep (currently, the only supported\n" +" level is \"high\", which causes the bot to flush a lot of caches as well\n" +" as do normal upkeep stuff.\n" +" " +msgstr "" +"[]\n" +"\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 +msgid "" +"[--deprecated] \n" +"\n" +" Loads the plugin from any of the directories in\n" +" conf.supybot.directories.plugins; usually this includes the main\n" +" installed directory and 'plugins' in the current directory.\n" +" --deprecated is necessary if you wish to load deprecated plugins.\n" +" " +msgstr "" +"[--deprecated] \n" +"\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 +msgid "" +"\n" +"\n" +" Unloads and subsequently reloads the plugin by name; use the 'list'\n" +" command to see a list of the currently loaded plugins.\n" +" " +msgstr "" +"\n" +"\n" +"Décharger et recharge immédiatement le ; utilisez la commande 'list' pour lister les plugins actuellement chargés." + +#: plugin.py:476 +msgid "" +"\n" +"\n" +" Unloads the callback by name; use the 'list' command to see a list\n" +" of the currently loaded callbacks. Obviously, the Owner plugin can't\n" +" be unloaded.\n" +" " +msgstr "" +"\n" +"\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 +msgid "" +"{add|remove} \n" +"\n" +" Adds or removes (according to the first argument) from the\n" +" default capabilities given to users (the configuration variable\n" +" supybot.capabilities stores these).\n" +" " +msgstr "" +"{add|remove} \n" +"\n" +"Ajoute ou supprime (en fonction du premier argument) la à la liste des permissions par défaut données aux utilisateurs (stockée dans la variable de configuration supybot.capabilities)." + +#: plugin.py:525 +msgid "" +"[] \n" +"\n" +" Disables the command for all users (including the owners).\n" +" If is given, only disables the from . If\n" +" you want to disable a command for most users but not for yourself, set\n" +" a default capability of -plugin.command or -command (if you want to\n" +" disable the command in all plugins).\n" +" " +msgstr "" +"[] \n" +"\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 permission par défaut -plugin.command ou -command." + +#: plugin.py:552 +msgid "" +"[] \n" +"\n" +" Enables the command for all users. If \n" +" if given, only enables the from . This command is\n" +" the inverse of disable.\n" +" " +msgstr "" +"[] \n" +"\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 +msgid "" +" \n" +"\n" +" Renames in to the .\n" +" " +msgstr "" +" \n" +"\n" +"Renomme la du par un ." + +#: plugin.py:588 +msgid "" +"\n" +"\n" +" Removes all renames in . The plugin will be reloaded after\n" +" this command is run.\n" +" " +msgstr "" +"\n" +"\n" +"Supprime tous les renommages du . Ce plugin sera rechargé après que cette commande ait été lancée." + diff --git a/plugins/Plugin/locale/fr.po b/plugins/Plugin/locale/fr.po new file mode 100644 index 000000000..0c5d61a53 --- /dev/null +++ b/plugins/Plugin/locale/fr.po @@ -0,0 +1,219 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-16 13:50+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: plugin.py:43 +msgid "" +"This plugin exists to help users manage their plugins. Use 'plugin\n" +" list' to list the loaded plugins; use 'plugin help' to get the description\n" +" of a plugin; use the 'plugin' command itself to determine what plugin a\n" +" command exists in." +msgstr "Ce plugin existe pour aider les utilisateurs à gérer leurs plugins. Utilisez 'list' pour liser les plugins chargés ; utilisez 'help' pour avoir de l'aide quant à d'autres plugins ; utilisez la commande 'plugin' elle-même pour déterminer dans quel plugin une commande existe." + +#: plugin.py:49 +msgid "" +"\n" +"\n" +" Returns a useful description of how to use , if the plugin has\n" +" one.\n" +" " +msgstr "" +"\n" +"\n" +"Retourne une description utile de comment utiliser le , si le plugin en a une." + +#: plugin.py:58 +msgid "That plugin is loaded, but has no plugin help." +msgstr "Ce plugin est chargé mais n'a pas d'aide." + +#: plugin.py:63 +msgid "" +"takes no arguments\n" +"\n" +" Returns a list of the currently loaded plugins.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +"\n" +"Retourne une liste des plugins actuellement chargés." + +#: plugin.py:74 +msgid "" +"\n" +"\n" +" Returns the plugin(s) that is in.\n" +" " +msgstr "" +"\n" +"\n" +"Retourne le(s) plugin(s) ayant la ." + +#: plugin.py:89 +msgid "plugins" +msgstr "plugins" + +#: plugin.py:91 +msgid "plugin" +msgstr "plugin" + +#: plugin.py:92 +msgid "The %q command is available in the %L %s." +msgstr "La commande %q est disponibles dans le(s) plugin %v." + +#: plugin.py:95 +msgid "There is no command %q." +msgstr "Il n'y a pas de commande q." + +#: plugin.py:100 +msgid "" +"\n" +"\n" +" Returns the author of . This is the person you should talk to\n" +" if you have ideas, suggestions, or other comments about a given plugin.\n" +" " +msgstr "" +"\n" +"\n" +"Retourne l'auteur du . C'est la personne à qui vous devriez parler si vous avez des idées, suggestions, ou d'autres commentaires à propos d'un plugin donné." + +#: plugin.py:106 +msgid "That plugin does not seem to be loaded." +msgstr "Ce plugin ne semble pas être chargé." + +#: plugin.py:112 +msgid "That plugin doesn't have an author that claims it." +msgstr "Ce plugin n'a pas d'auteur." + +#: plugin.py:117 +msgid "" +" []\n" +"\n" +" Replies with a list of people who made contributions to a given plugin.\n" +" If is specified, that person's specific contributions will\n" +" be listed. Note: The is the part inside of the parentheses\n" +" in the people listing.\n" +" " +msgstr "" +" []\n" +"\n" +"Renvoie une liste des personnes ayant contribué à un plugin donné. Si le est spécifié, les contributions de cette personne seront lisées. Note : est la partie entre parenthèses lors du listing des personnes." + +#: plugin.py:125 +msgid "" +"\n" +" Take an Authors object, and return only the name and nick values\n" +" in the format 'First Last (nick)'.\n" +" " +msgstr "" + +#: plugin.py:131 +msgid "" +"\n" +" Take a list of long names and turn it into :\n" +" shortname[, shortname and shortname].\n" +" " +msgstr "" + +#: plugin.py:138 +msgid "" +"\n" +" Sort the list of 'long names' based on the number of contributions\n" +" associated with each.\n" +" " +msgstr "" + +#: plugin.py:148 +msgid "" +"\n" +" Build the list of author + contributors (if any) for the requested\n" +" plugin.\n" +" " +msgstr "" + +#: plugin.py:152 +msgid "The %s plugin" +msgstr "Le plugin s" + +#: plugin.py:153 +msgid "has not been claimed by an author" +msgstr "n'a aucun auteur" + +#: plugin.py:154 +msgid "and" +msgstr "et" + +#: plugin.py:155 +msgid "has no contributors listed." +msgstr "n'a pas de contributeur listé." + +#: plugin.py:160 +msgid "was written by %s" +msgstr "a été écrit par %s" + +#: plugin.py:171 +msgid "%s %h contributed to it." +msgstr "%s y %h contribué." + +#: plugin.py:176 +msgid "has no additional contributors listed." +msgstr "n'a pas d'autre contributeur listé." + +#: plugin.py:178 +msgid "but" +msgstr "mais" + +#: plugin.py:181 +msgid "" +"\n" +" Build the list of contributions (if any) for the requested person\n" +" for the requested plugin\n" +" " +msgstr "" + +#: plugin.py:195 +msgid "The nick specified (%s) is not a registered contributor." +msgstr "Le nick spécifié(%s) n'est pas un contributeur enregistré." + +#: plugin.py:201 +msgid "The %s plugin does not have '%s' listed as a contributor." +msgstr "Le plugin %s n'a pas '%s' listé comme contributeur." + +#: plugin.py:209 +msgid "command" +msgstr "commande" + +#: plugin.py:212 +msgid "the %L %s" +msgstr "La/les commande(s) %L%v" + +#: plugin.py:214 +msgid "the %L" +msgstr "La/les %L" + +#: plugin.py:217 +msgid "%s wrote the %s plugin and also contributed %L." +msgstr "%s a écrit le plugin %s et a aussi contribué à %L" + +#: plugin.py:220 +msgid "%s contributed %L to the %s plugin." +msgstr "%s a contribué à %L et au plugin %s" + +#: plugin.py:223 +msgid "%s wrote the %s plugin" +msgstr "%s a écrit le plugin %s" + +#: plugin.py:226 +msgid "%s has no listed contributions for the %s plugin." +msgstr "%s n'a pas de contribution listée pour le plugin %s." + diff --git a/plugins/Praise/locale/fr.po b/plugins/Praise/locale/fr.po new file mode 100644 index 000000000..935fbef77 --- /dev/null +++ b/plugins/Praise/locale/fr.po @@ -0,0 +1,59 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-17 18:33+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: config.py:49 +msgid "" +"Determines whether the bot will show the ids of\n" +" a praise when the praise is given." +msgstr "Détermine si le bot affichera les ids des louanges lorsqu'une louange est donnée." + +#: plugin.py:40 +msgid "" +"Praise is a plugin for ... well, praising things. Feel free to add\n" +" your own flavor to it by customizing what praises it gives. Use \"praise\n" +" add \" to add new ones, making sure to include \"$who\" in where\n" +" you want to insert the thing being praised.\n" +" " +msgstr "Praise est un plugin pour... mmh... louer des gens et des choses. Sentez-vous libre de personnaliser à votre goût pourquoi vous louez ceci. Utilisez \"praise add\" pour ajouter les vôtres, et assurez-vous d'ajouter \"$who\" dans le là où vous voulez insérer le nom de la chose à louer." + +#: plugin.py:54 +msgid "Praises must contain $who." +msgstr "Les louanges doivent contenir $who" + +#: plugin.py:58 +msgid "" +"[] [] [for ]\n" +"\n" +" Praises (for , if given). If is given, uses\n" +" that specific praise. is only necessary if the message isn't\n" +" sent in the channel itself.\n" +" " +msgstr "" +"[] [] [for ]\n" +"\n" +"Loue (pour la , si elle est donnée). Si l' est donné, utilise une louange spécifique. n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:74 +msgid "There is no praise with id #%i." +msgstr "Il n'y a pas de louange d'id #%i" + +#: plugin.py:79 +msgid "There are no praises in my database for %s." +msgstr "Il n'y a pas de louange dans ma base de données pour %s." + +#: plugin.py:87 +msgid " for " +msgstr " pour " + diff --git a/plugins/Protector/locale/fr.po b/plugins/Protector/locale/fr.po new file mode 100644 index 000000000..0b4058dac --- /dev/null +++ b/plugins/Protector/locale/fr.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-17 18:34+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: config.py:47 +msgid "" +"Determines whether this plugin is enabled in a\n" +" given channel." +msgstr "Détermine si le plugin est activé sur un canal donné." + +#: config.py:54 +msgid "" +"Determines what nicks the bot will consider to\n" +" be immune from enforcement. These nicks will not even have their actions\n" +" watched by this plugin. In general, only the ChanServ for this network\n" +" will be in this list." +msgstr "Détermine quels nicks le bot considérera comme imunisés. Les actions de ces nicks ne seront pas surveillés par ce plugin. En général, seul le ChanServ de ce réseau doit être dans cette liste." + diff --git a/plugins/Quote/locale/fr.po b/plugins/Quote/locale/fr.po new file mode 100644 index 000000000..81a453816 --- /dev/null +++ b/plugins/Quote/locale/fr.po @@ -0,0 +1,31 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-17 18:34+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: plugin.py:38 +msgid "" +"[]\n" +"\n" +" Returns a random quote from . is only necessary if\n" +" the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[]\n" +"\n" +"Retourne une citation aléatoire du . n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:47 +msgid "I have no quotes in my database for %s." +msgstr "Je n'ai pas de citation dans ma base de données pour %s." + diff --git a/plugins/QuoteGrabs/locale/fr.po b/plugins/QuoteGrabs/locale/fr.po new file mode 100644 index 000000000..40fe2091f --- /dev/null +++ b/plugins/QuoteGrabs/locale/fr.po @@ -0,0 +1,181 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-17 18:36+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: config.py:49 +msgid "" +"Determines whether the bot will randomly grab\n" +" possibly-suitable quotes on occasion. The suitability of a given message\n" +" is determined by ..." +msgstr "Détermine si le bot récupèrera automatiquement des quotes éligible à une quote. L'éligibilté est déterminée par..." + +#: config.py:54 +msgid "" +"Determines about how many seconds, on\n" +" average, should elapse between random grabs. This is only an average\n" +" value; grabs can happen from any time after half this time until never,\n" +" although that's unlikely to occur." +msgstr "Détermine le nombre de secondes, en moyenne, entre deux récupération de citations. Il s'agit seulement d'une moyenne, et les prises de citation peuvent être faites n'importe quand après la moitié de ce temps, voire jamais, même si c'est improbable." + +#: config.py:59 +msgid "" +"Determines the minimum\n" +" number of words in a message for it to be considered for random\n" +" grabbing." +msgstr "Détermine le nombre minimum de mots dans un message pour être éligible à la quotation aléatoire." + +#: config.py:63 +msgid "" +"Determines the\n" +" minimum number of characters in a message for it to be considered for\n" +" random grabbing." +msgstr "Détermine le nombre minimum de caractères dans un message pour être éligible à la quotation aléatoire." + +#: plugin.py:57 +msgid "%s (Said by: %s; grabbed by %s at %t)" +msgstr "%s (Dit par %s ; récupéré par %s à %t)" + +#: plugin.py:210 +msgid "Add the help for \"@help QuoteGrabs\" here." +msgstr "" + +#: plugin.py:249 +msgid "" +"[] \n" +"\n" +" Grabs a quote from by for the quotegrabs table.\n" +" is only necessary if the message isn't sent in the channel\n" +" itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Récupère une quote du par le dans la table des citations. n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:262 +msgid "You can't quote grab yourself." +msgstr "Vous ne pouvez récupérer des citations de vous-même." + +#: plugin.py:269 +msgid "I couldn't find a proper message to grab." +msgstr "Je ne peux trouver de message à quoter." + +#: plugin.py:274 +msgid "" +"[] \n" +"\n" +" Removes the grab (the last by default) on .\n" +" is only necessary if the message isn't sent in the channel\n" +" itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Supprime la quote désignée par le (la dernière par défaut) sur le . n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:285 +msgid "Nothing to ungrab." +msgstr "Rien à dé-quoter" + +#: plugin.py:287 +msgid "Invalid grab number." +msgstr "Numéro de quote invalide." + +#: plugin.py:292 +msgid "" +"[] \n" +"\n" +" Returns 's latest quote grab in . is only\n" +" necessary if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Retourne le nick de la dernière personne citée sur le . n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:300 +msgid "I couldn't find a matching quotegrab for %s." +msgstr "Je ne peux trouver de quote coresspondant à %s." + +#: plugin.py:306 +msgid "" +"[] \n" +"\n" +" Returns a list of shortened quotes that have been grabbed for \n" +" as well as the id of each quote. These ids can be used to get the\n" +" full quote. is only necessary if the message isn't sent in\n" +" the channel itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Retourne une liste de quotes raccourcies que ont été récupérées pour le , ainsi que l'id de chaque quote. Les ids peuvent être utilisés pour récupérer les quotes entières. n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:323 +msgid "I couldn't find any quotegrabs for %s." +msgstr "Je ne peux trouver de citation pour %s" + +#: plugin.py:329 +msgid "" +"[] []\n" +"\n" +" Returns a randomly grabbed quote, optionally choosing only from those\n" +" quotes grabbed for . is only necessary if the message\n" +" isn't sent in the channel itself.\n" +" " +msgstr "" +"[] []\n" +"\n" +"Retourne une citation aléatoire, éventuellement parmis les citations récupérées de . n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:339 +msgid "Couldn't get a random quote for that nick." +msgstr "Je ne peux récupérer une quote aléatoire pour ce nick." + +#: plugin.py:341 +msgid "Couldn't get a random quote. Are there any grabbed quotes in the database?" +msgstr "Je ne peux récupérer de quote aléatoire. Y a-t-il des quotes dans la base de données ?" + +#: plugin.py:347 +msgid "" +"[] \n" +"\n" +" Return the quotegrab with the given . is only necessary\n" +" if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Retourne la quote d' donné. n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:355 +msgid "No quotegrab for id %s" +msgstr "Pas de quote d'id %s" + +#: plugin.py:361 +msgid "" +"[] \n" +"\n" +" Searches for in a quote. is only necessary if the\n" +" message isn't sent in the channel itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Recherche le dans les citations. n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:376 +msgid "No quotegrabs matching %s" +msgstr "Aucune quote ne correspond à %s" + diff --git a/plugins/RSS/locale/fr.po b/plugins/RSS/locale/fr.po new file mode 100644 index 000000000..8c8cbecd3 --- /dev/null +++ b/plugins/RSS/locale/fr.po @@ -0,0 +1,173 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-19 19:27+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: config.py:50 +msgid "" +"Determines whether the bot will bold the title of the feed when it\n" +" announces new news." +msgstr "Détermine si le bot mettera en gras le titre des flux lorsqu'il annoncera des news." + +#: config.py:53 +msgid "" +"Determines what string is used\n" +" to separate headlines in new feeds." +msgstr "Détermine quelle chaîne est utilisé pour séparer les titres dans les nouveaux flux." + +#: config.py:56 +msgid "" +"Determines what prefix\n" +" is prepended (if any) to the new news item announcements made in the\n" +" channel." +msgstr "Détermine quel préfixe (s'il y en a un) est utilisé pour annoncer les news sur le canal." + +#: config.py:60 +msgid "" +"Determines which RSS feeds\n" +" should be announced in the channel; valid input is a list of strings\n" +" (either registered RSS feeds or RSS feed URLs) separated by spaces." +msgstr "Détermine quels flux RSS seront annoncés sur le canal ; une entrée valide est une liste de chaînes (des flux enregistrés ou des URLs de flux RSS), séparées par des espaces." + +#: config.py:64 +msgid "" +"Indicates how many seconds the bot will\n" +" wait between retrieving RSS feeds; requests made within this period will\n" +" return cached results." +msgstr "Détermine le temps (en secondes) entre deux rafraichissement des flux RSS. Durant cette période, les flux seront mis en cache." + +#: config.py:68 +msgid "" +"Determines what feeds should be accessible as\n" +" commands." +msgstr "Détermine quels flux sont accessibles en tant que commande." + +#: config.py:71 +msgid "" +"Determines whether the bot will list the link\n" +" along with the title of the feed when the rss command is called.\n" +" supybot.plugins.RSS.announce.showLinks affects whether links will be\n" +" listed when a feed is automatically announced." +msgstr "Détermine si le bot listera le lien de chaque flus avec son titre, lorsque la commande rss est appelée. supybot.plugins.RSS.announce.showLinks affecte si les liens sont affichés lorsqu'un flux est annoncé automatiquement." + +#: config.py:78 +msgid "" +"Determines whether the bot will list the link\n" +" along with the title of the feed when a feed is automatically\n" +" announced." +msgstr "Détermine si le bot listera le lien de chaque flux avec le titre lorsqu'un flux est automatiquement annoncé." + +#: plugin.py:63 +msgid "" +"This plugin is useful both for announcing updates to RSS feeds in a\n" +" channel, and for retrieving the headlines of RSS feeds via command. Use\n" +" the \"add\" command to add feeds to this plugin, and use the \"announce\"\n" +" command to determine what feeds should be announced in a given channel." +msgstr "Ce plugin est utile pour annoncer des flux RSS sur un canal, et pour récupérer les en-tête des flux RSS via une commande. Utilisez la commande \"add\" pour ajouter des flux au plugin, et utilisez la commande \"annonce\" pour détermine quels flux pourront être annoncés sur un canal donné." + +#: plugin.py:311 +msgid "" +" \n" +"\n" +" Adds a command to this plugin that will look up the RSS feed at the\n" +" given URL.\n" +" " +msgstr "" +" \n" +"\n" +"Ajoute un commande à ce plugin qui permet de regarder le flux situé à l'." + +#: plugin.py:322 +msgid "" +"\n" +"\n" +" Removes the command for looking up RSS feeds at from\n" +" this plugin.\n" +" " +msgstr "" +"\n" +"\n" +"Supprime le flux des flux qui peuvent être lus grâce à une commande." + +#: plugin.py:328 +msgid "That's not a valid RSS feed command name." +msgstr "Ce n'est pas une commande de flux RSS valide" + +#: plugin.py:346 +msgid "I am currently not announcing any feeds." +msgstr "Je n'annonce actuellement aucun flux." + +#: plugin.py:351 +msgid "" +"[] [ ...]\n" +"\n" +" Adds the list of feeds to the current list of announced feeds in\n" +" . Valid feeds include the names of registered feeds as\n" +" well as URLs for RSS feeds. is only necessary if the\n" +" message isn't sent in the channel itself.\n" +" " +msgstr "" +"[] [ ...]\n" +"\n" +"Ajoute la liste de flux à la liste actuelle des flux annoncés sur le . Vous devez indiquer le du flux si il est déjà enregistré, ou l' dans le cas contraire. n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:369 +msgid "" +"[] [ ...]\n" +"\n" +" Removes the list of feeds from the current list of announced feeds\n" +" in . Valid feeds include the names of registered feeds as\n" +" well as URLs for RSS feeds. is only necessary if the\n" +" message isn't sent in the channel itself.\n" +" " +msgstr "" +"[] [ ...]\n" +"\n" +"Supprime la liste de flux de la liste actuelle des flux annoncés sur le . Vous devez indiquer le du flux si il est déjà enregistré, ou l' dans le cas contraire. n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:387 +msgid "" +" []\n" +"\n" +" Gets the title components of the given RSS feed.\n" +" If is given, return only that many headlines.\n" +" " +msgstr "" +" []\n" +"\n" +"Récupère le titre des éléments du flux RSS donné. si le est donné, ne retourne que ce nombre de lignes d'en-tête." + +#: plugin.py:400 +msgid "Couldn't get RSS feed." +msgstr "Ne peut récupérer le flux RSS." + +#: plugin.py:413 +msgid "" +"\n" +"\n" +" Returns information from the given RSS feed, namely the title,\n" +" URL, description, and last update date, if available.\n" +" " +msgstr "" +"\n" +"\n" +"Retourne des informations sur le flux RSS donné : le titre, l'URL, la description, et la dernière mise à jour." + +#: plugin.py:426 +msgid "I couldn't retrieve that RSS feed." +msgstr "Je ne peux récupérer ce flux RSS." + +#: plugin.py:439 +msgid "Title: %s; URL: %u; Description: %s; Last updated: %s." +msgstr "Titre : %s , URL : %u ; description : %s ; dernière mise à jour : %s." + diff --git a/plugins/Relay/locale/fr.po b/plugins/Relay/locale/fr.po new file mode 100644 index 000000000..227dc7079 --- /dev/null +++ b/plugins/Relay/locale/fr.po @@ -0,0 +1,221 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-19 19:27+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: config.py:39 +msgid "Would you like to relay between any channels?" +msgstr "Voulez-vous relayer entre des canaux ?" + +#: config.py:40 +msgid "What channels? Separated them by spaces." +msgstr "Quels canaux ? Séparez-les par des espaces." + +#: config.py:42 +msgid "Would you like to use color to distinguish between nicks?" +msgstr "Voulez-vous utiliser de la couleur pour distinguer les nicks ?" + +#: config.py:59 +msgid "" +"Determines whether the bot will color relayed\n" +" PRIVMSGs so as to make the messages easier to read." +msgstr "Détermine si le bot colorera les PRIVMSGs relayez, pour rendre les messages plus faciles à lire." + +#: config.py:62 +msgid "" +"Determines whether the bot will synchronize\n" +" topics between networks in the channels it relays." +msgstr "Détermine si le bot synchronisera les topics entre les réseaux sur les canaux qu'il relaye." + +#: config.py:65 +msgid "" +"Determines whether the bot will relay the\n" +" hostmask of the person joining or parting the channel when he or she joins\n" +" or parts." +msgstr "Détermine si le bot relayera le masque d'hôte d'une personne joignant ou partant d'un canal." + +#: config.py:69 +msgid "" +"Determines whether the bot will include the\n" +" network in relayed PRIVMSGs; if you're only relaying between two networks,\n" +" it's somewhat redundant, and you may wish to save the space." +msgstr "Détermine si le bot inclurera le réseau dans les PRIVMSG relayés ; si vous ne relayez qu'entre deux réseaux, ce sera quelque chose de redondant que vous pouvez supprimer pour gagner de la place." + +#: config.py:73 +msgid "" +"Determines whether the bot will detect other\n" +" bots relaying and respond by kickbanning them." +msgstr "Détermine si le bot détectera d'autres bots relayant et y répondra en les kickbannissant." + +#: config.py:76 +msgid "" +"Determines which channels the bot\n" +" will relay in." +msgstr "Détermine sur quels canaux le bot relayera." + +#: config.py:79 +msgid "" +"Determines whether the bot\n" +" will always join the channel(s) it relays for on all networks the bot is\n" +" connected to." +msgstr "Détermine si le bot rejoindra toujours le(s) canal(aux) qu'il relaye sur tous les réseaux auxquels il est connecté." + +#: config.py:83 +msgid "" +"Determines what hostmasks will not be relayed on a\n" +" channel." +msgstr "Détermine quels masques d'hôte ne seront pas relayés sur un canal." + +#: config.py:86 +msgid "" +"Determines whether the bot will used NOTICEs\n" +" rather than PRIVMSGs for non-PRIVMSG relay messages (i.e., joins, parts,\n" +" nicks, quits, modes, etc.)" +msgstr "Détermine si le bot utilisera des NOTICEs plutôt que des PRIVMSG pour les messages relayés qui ne concernent pas un PRIVMSG (arrivée, départ, changement de nick, quits, modes, etc.)" + +#: plugin.py:99 +msgid "" +"[]\n" +"\n" +" Starts relaying between the channel on all networks. If on a\n" +" network the bot isn't in , he'll join. This commands is\n" +" required even if the bot is in the channel on both networks; he won't\n" +" relay between those channels unless he's told to join both\n" +" channels. If is not given, starts relaying on the channel\n" +" the message was sent in.\n" +" " +msgstr "" +"[]\n" +"\n" +"Commence à relayer le canal sur tous les réseaux. Si il y a un réseau sur lequel le bot n'est pas sur , il y entrera. Cette commande est requise même si le bot est sur le canal sur tous les réseaux ; il ne relayera pas tant qu'on ne lui a pas dit de rejoindre les canaux sur tous les réseaux. Si n'est pas donné, il commencera à relayer sur le canal où a été envoyé le message." + +#: plugin.py:118 +msgid "" +"\n" +"\n" +" Ceases relaying between the channel on all networks. The bot\n" +" will part from the channel on all networks in which it is on the\n" +" channel.\n" +" " +msgstr "" +"\n" +"\n" +"Cesse de relayer entre les canaux sur tous les réseaux. Le bot partira de ces canaux sur tous les réseaux si il y est." + +#: plugin.py:133 +msgid "" +"[]\n" +"\n" +" Returns the nicks of the people in the channel on the various networks\n" +" the bot is connected to. is only necessary if the message\n" +" isn't sent on the channel itself.\n" +" " +msgstr "" +"[]\n" +"\n" +"Retourne les nicks des personnes sur le canal sur les différents réseaux sur lesquels est connecté le bot. n'est nécessaire que si l'on n'est pas sur le canal lui-même." + +#: plugin.py:223 +msgid "is an op on %L" +msgstr "est op sur %L" + +#: plugin.py:225 +msgid "is a halfop on %L" +msgstr "est halfop sur %L" + +#: plugin.py:227 +msgid "is voiced on %L" +msgstr "est voice sur %L" + +#: plugin.py:230 +msgid "is also on %L" +msgstr "est aussi sur %L" + +#: plugin.py:232 +msgid "is on %L" +msgstr "est sur %L" + +#: plugin.py:234 +msgid "isn't on any non-secret channels" +msgstr "n'est sur aucun canal non-secret" + +#: plugin.py:241 +#: plugin.py:242 +#: plugin.py:246 +msgid "" +msgstr "" + +#: plugin.py:248 +msgid " %s is away: %s." +msgstr "%s est away : %s" + +#: plugin.py:253 +msgid " identified" +msgstr "identifié" + +#: plugin.py:258 +msgid "%s (%s) has been%s on server %s since %s (idle for %s) and %s.%s" +msgstr "%s (%s) a été vu%s sur le serveur %s depuis %s (idle depuis %s) et %s.%s" + +#: plugin.py:273 +msgid "There is no %s on %s." +msgstr "Il n'y a pas de %s sur %s." + +#: plugin.py:342 +msgid "You seem to be relaying, punk." +msgstr "Tu sembles relayer, enfoiré" + +#: plugin.py:395 +msgid "%s%s has joined on %s" +msgstr "%s%s est arrivé sur %s" + +#: plugin.py:410 +msgid "%s%s has left on %s (%s)" +msgstr "%s%s est parti de %s (%s)" + +#: plugin.py:413 +msgid "%s%s has left on %s" +msgstr "%s%s est parti de %s" + +#: plugin.py:423 +msgid "mode change by %s on %s: %s" +msgstr "changement de mode par %s sur %s : %s" + +#: plugin.py:435 +msgid "%s was kicked by %s on %s (%s)" +msgstr "%s a été kické par %s sur %s (%s)" + +#: plugin.py:438 +msgid "%s was kicked by %s on %s" +msgstr "%s a été kické par %s sur %s" + +#: plugin.py:447 +msgid "nick change by %s to %s on %s" +msgstr "changement de nick : %s -> %s sur %s" + +#: plugin.py:477 +msgid "topic change by %s on %s: %s" +msgstr "changement de topic par %s sur %s : %s" + +#: plugin.py:486 +msgid "%s has quit %s (%s)" +msgstr "%s a quitté %s (%s)" + +#: plugin.py:488 +msgid "%s has quit %s." +msgstr "%s a quitté %s." + +#: plugin.py:498 +msgid "disconnected from %s: %s" +msgstr "déconnecté de %s : %s" + diff --git a/plugins/Reply/locale/fr.po b/plugins/Reply/locale/fr.po new file mode 100644 index 000000000..8acefbde3 --- /dev/null +++ b/plugins/Reply/locale/fr.po @@ -0,0 +1,70 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-19 19:27+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: plugin.py:38 +msgid "" +"This plugins contains a few commands that construct various types of\n" +" replies. Some bot owners would be wise to not load this plugin because it\n" +" can be easily abused.\n" +" " +msgstr "Ce plugin contient quelques commandes pour construire différents types de réponses. Certains propriétaires de bots pourraient ne pas vouloir le charger, car on peut facilement en abuser." + +#: plugin.py:44 +msgid "" +"\n" +"\n" +" Replies with in private. Use nested commands to your benefit\n" +" here.\n" +" " +msgstr "" +"\n" +"\n" +"Répond avec le en privé. Utile pour les commandes imbriquées." + +#: plugin.py:54 +msgid "" +"\n" +"\n" +" Replies with as an action. use nested commands to your benefit\n" +" here.\n" +" " +msgstr "" +"\n" +"\n" +"Répond avec le comme une action. Utile pour les commandes imbriquées." + +#: plugin.py:67 +msgid "" +"\n" +"\n" +" Replies with in a notice. Use nested commands to your benefit\n" +" here. If you want a private notice, nest the private command.\n" +" " +msgstr "" +"\n" +"\n" +"Répond avec le en notice. Utile pour les commandes imbriquées." + +#: plugin.py:77 +msgid "" +"\n" +"\n" +" Replies with . Equivalent to the alias, 'echo $nick: $1'.\n" +" " +msgstr "" +"\n" +"\n" +"Répond avec le . Équivalent à l'alias 'echo $nick: $i'." + diff --git a/plugins/Scheduler/locale/fr.po b/plugins/Scheduler/locale/fr.po new file mode 100644 index 000000000..07914c6d9 --- /dev/null +++ b/plugins/Scheduler/locale/fr.po @@ -0,0 +1,87 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-19 19:28+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: plugin.py:47 +msgid "Makes a function suitable for scheduling from command." +msgstr "Crée une fonction utilisable pour la programmation à partir d'une commande." + +#: plugin.py:57 +msgid "" +" \n" +"\n" +" Schedules the command string to run seconds in the\n" +" future. For example, 'scheduler add [seconds 30m] \"echo [cpu]\"' will\n" +" schedule the command \"cpu\" to be sent to the channel the schedule add\n" +" command was given in (with no prefixed nick, a consequence of using\n" +" echo). Do pay attention to the quotes in that example.\n" +" " +msgstr "" +" \n" +"\n" +"Exécute la dans un certain nombre de . Par exemple, 'scheduler add [seconds 30m] \"echo [cpu]\"' programmera la commande 'cpu' pour être envoyée sur le canal. Faites attention à l'utilisateur des guillemets dans cet exemple." + +#: plugin.py:69 +msgid "Event #%i added." +msgstr "Évènement #%i ajotué." + +#: plugin.py:74 +msgid "" +"\n" +"\n" +" Removes the event scheduled with id from the schedule.\n" +" " +msgstr "" +"\n" +"\n" +"Déprogramme l'évènement programmé d' donné." + +#: plugin.py:88 +#: plugin.py:90 +msgid "Invalid event id." +msgstr "Id d'évènement invalide." + +#: plugin.py:95 +msgid "" +" \n" +"\n" +" Schedules the command to run every seconds,\n" +" starting now (i.e., the command runs now, and every seconds\n" +" thereafter). is a name by which the command can be\n" +" unscheduled.\n" +" " +msgstr "" +" \n" +"\n" +"Programme la pour être lancée toutes les , à partir de maintenant (c'est à dire que la commande est lancée maintenant, dans un certain nombres de , puis dans deux fois ce temps, etc). Le est utilisé pour déprogrammer la commande." + +#: plugin.py:104 +msgid "There is already an event with that name, please choose another name." +msgstr "Il y a déjà un évènement avec ce nom, veuillez en choisir un autre." + +#: plugin.py:117 +msgid "" +"takes no arguments\n" +"\n" +" Lists the currently scheduled events.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +"\n" +"Liste tous les évènement actuellement programmés" + +#: plugin.py:128 +msgid "There are currently no scheduled commands." +msgstr "Il n'y a actuellement aucune commande programmée." + diff --git a/plugins/Seen/locale/fr.po b/plugins/Seen/locale/fr.po new file mode 100644 index 000000000..899041f15 --- /dev/null +++ b/plugins/Seen/locale/fr.po @@ -0,0 +1,128 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-20 08:52+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: plugin.py:203 +#: plugin.py:284 +msgid "%s was last seen in %s %s ago: %s" +msgstr "%s a été vu pour la dernière fois sur %i il y a %s : %s" + +#: plugin.py:210 +msgid "%s (%s ago)" +msgstr "%s (il y a %s)" + +#: plugin.py:212 +msgid "%s could be %L" +msgstr "%s doit être %L" + +#: plugin.py:212 +msgid "or" +msgstr "ou" + +#: plugin.py:214 +msgid "I haven't seen anyone matching %s." +msgstr "Je n'ai vu personne correspondant à %s." + +#: plugin.py:216 +#: plugin.py:288 +msgid "I have not seen %s." +msgstr "Je n'ai pas vu %s." + +#: plugin.py:220 +msgid "" +"[] \n" +"\n" +" Returns the last time was seen and what was last seen\n" +" saying. is only necessary if the message isn't sent on the\n" +" channel itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Retourne la dernière fois que le a été vu et la dernière fois que a parlé. n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:231 +msgid "" +"[] [--user ] []\n" +"\n" +" Returns the last time was seen and what was last seen\n" +" doing. This includes any form of activity, instead of just PRIVMSGs.\n" +" If isn't specified, returns the last activity seen in\n" +" . If --user is specified, looks up name in the user database\n" +" and returns the last time user was active in . is\n" +" only necessary if the message isn't sent on the channel itself.\n" +" " +msgstr "" +"[] [--user ] []\n" +"\n" +"Retourne la dernière fois que le a été vu et ce quand il a fait quelque chose pour la première fois. Cela inclue toute forme d'activité, et pas uniquement envoyer des messages. Si le n'est pas donné, retourne la dernière activité vue sur le . Si --user est spécifié, recherche le nom dans la base de données des utilisateurs la dernière fois que celui en question a été vu actif sur le n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:261 +msgid "Someone was last seen in %s %s ago: %s" +msgstr "Quelqu'un a été vu pour la dernière fois sur %s il y a %s : %s" + +#: plugin.py:265 +msgid "I have never seen anyone." +msgstr "Je n'ai jamais vu personne." + +#: plugin.py:269 +msgid "" +"[]\n" +"\n" +" Returns the last thing said in . is only necessary\n" +" if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[]\n" +"\n" +"Retourne la dernière chose dite sur le . n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:292 +msgid "" +"[] \n" +"\n" +" Returns the last time was seen and what was last seen\n" +" saying. This looks up in the user seen database, which means\n" +" that it could be any nick recognized as user that was seen.\n" +" is only necessary if the message isn't sent in the channel\n" +" itself.\n" +" " +msgstr "" +"[] \n" +"\n" +"Retourne la dernière fois que a été vu et la dernière fois que a été vu parler. Cela recherche dans la base de données des utilisateurs vus, ce qui signifit que si le nick n'était pas reconnu comme l'utilisateur , il n'est pas considéré comme vu. n'est nécessaire que si le message n'est pas envoyé sur le canal lui-même." + +#: plugin.py:305 +msgid "" +"[] \n" +"\n" +" Returns the messages since last left the channel.\n" +" " +msgstr "" +"[] \n" +"\n" +"Retourne les messages depuis que est parti du canal." + +#: plugin.py:312 +msgid "You must be in %s to use this command." +msgstr "Vous devez être sur %s pour utiliser cette commande." + +#: plugin.py:333 +msgid "I couldn't find in my history of %s messages where %r last left the %s" +msgstr "Je ne peux pas trouver dans mon historique de %s messages, où %r a quitté il y a %s" + +#: plugin.py:342 +msgid "Either %s didn't leave, or no messages were sent while %s was gone." +msgstr "Soit %s n'est jamais parti, soit aucun message n'a été envoyé depuis qu'il est parti." + From 05389a98ef1d127fa31b8e8a1c1a7717744deb37 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Fri, 29 Oct 2010 20:19:24 +0200 Subject: [PATCH 13/15] Localize Services, ShrinkUrl, Status, and String into French --- plugins/Services/locale/fr.po | 248 +++++++++++++++++++++++++++++++++ plugins/ShrinkUrl/locale/fr.po | 125 +++++++++++++++++ plugins/Status/locale/fr.po | 169 ++++++++++++++++++++++ plugins/String/locale/fr.po | 189 +++++++++++++++++++++++++ 4 files changed, 731 insertions(+) create mode 100644 plugins/Services/locale/fr.po create mode 100644 plugins/ShrinkUrl/locale/fr.po create mode 100644 plugins/Status/locale/fr.po create mode 100644 plugins/String/locale/fr.po diff --git a/plugins/Services/locale/fr.po b/plugins/Services/locale/fr.po new file mode 100644 index 000000000..148fa38f7 --- /dev/null +++ b/plugins/Services/locale/fr.po @@ -0,0 +1,248 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-20 08:55+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: config.py:39 +msgid "Determines what password the bot will use with NickServ when identifying as %s." +msgstr "Détermine quel mot de passe le bot utilisera pour s'identifier à NickServ lors de l'identification à %s." + +#: config.py:49 +msgid "What is your registered nick?" +msgstr "Quel est votre nick enregistré ?" + +#: config.py:50 +msgid "What is your password for that nick?" +msgstr "Quel est votre mot de passe pour ce nick ?" + +#: config.py:51 +msgid "What is your ChanServ named?" +msgstr "Comment est nommé ChanServ ?" + +#: config.py:52 +msgid "What is your NickServ named?" +msgstr "Comment est nommé NickServ ?" + +#: config.py:70 +msgid "" +"Determines what nicks the bot will use with\n" +" services." +msgstr "Détermine quels nicks le bot utilisera avec les services." + +#: config.py:77 +msgid "" +"Determines what networks this plugin\n" +" will be disabled on." +msgstr "Détermine sur quels réseaux ce plugin sera désactivé." + +#: config.py:77 +msgid "QuakeNet" +msgstr "QuakeNet" + +#: config.py:81 +msgid "" +"Determines whether the bot will not join any\n" +" channels until it is identified. This may be useful, for instances, if\n" +" you have a vhost that isn't set until you're identified, or if you're\n" +" joining +r channels that won't allow you to join unless you identify." +msgstr "Détermine si le bot peut rejoindre un ou des canal(aux) avant d'être identifié. Ce peut être utilise, par exemple si vous utilisez une vhost qui n'est activée qu'une fois que vous êtes identifié, ou encore si vous devez rejoindre des canaux en +r (=des canaux que l'on ne peut joindre sans être identifié)" + +#: config.py:86 +msgid "" +"Determines how many seconds the bot will\n" +" wait between successive GHOST attempts." +msgstr "Détermine le nombre de secondes entre deux tentatives successives de GHOST." + +#: config.py:89 +msgid "" +"Determines what nick the 'NickServ' service\n" +" has." +msgstr "Détermine quel nick NickServ a." + +#: config.py:93 +msgid "" +"Determines what nick the 'ChanServ' service\n" +" has." +msgstr "Détermine quel nick ChanServ a." + +#: config.py:96 +msgid "" +"Determines what password the bot will use with\n" +" ChanServ." +msgstr "Détermine quel mot de passe le bot utilisera avec ChanServ." + +#: config.py:99 +msgid "" +"Determines whether the bot will request to get\n" +" opped by the ChanServ when it joins the channel." +msgstr "Détermine si le bot demandera à être oppé par ChanServ lorsqu'il rejoint le canal." + +#: config.py:102 +msgid "" +"Determines whether the bot will request to get\n" +" half-opped by the ChanServ when it joins the channel." +msgstr "Détermine si le bot demandera à être oppé par NickServ lorsqu'il rejoint le canal." + +#: config.py:105 +msgid "" +"Determines whether the bot will request to get\n" +" voiced by the ChanServ when it joins the channel." +msgstr "Détermine si le bot demandera à être voicé par ChanServ lorsqu'il rejoint le canal." + +#: plugin.py:48 +msgid "" +"This plugin handles dealing with Services on networks that provide them.\n" +" Basically, you should use the \"password\" command to tell the bot a nick to\n" +" identify with and what password to use to identify with that nick. You can\n" +" use the password command multiple times if your bot has multiple nicks\n" +" registered. Also, be sure to configure the NickServ and ChanServ\n" +" configuration variables to match the NickServ and ChanServ nicks on your\n" +" network. Other commands such as identify, op, etc. should not be\n" +" necessary if the bot is properly configured." +msgstr "Ce plugin gère les services sur les réseaux qui en fournissent. En général, vous pouvez utiliser la commande 'password' pour dire au bot de prendre un nick et de s'identifier avec le mot de passe. Vous pouvez utiliser la commande 'password' autant de fois que le bot a de nicks enregistrés. Aussi, assurez-vous de configurer les variables NickServ et ChanServ pour correspondre à leurs nicks respectifs sur le réseau en question. D'autres commandes, comme 'identify', 'op', ... ne sont pas nécessaires quand le bot est configuré correctement." + +#: plugin.py:396 +msgid "You must set supybot.plugins.Services.ChanServ before I'm able to send the %s command." +msgstr "vous devez définir supybot.plugins.Services.ChanServ avant que je ne puisse envoyer la commande %s" + +#: plugin.py:402 +msgid "" +"[]\n" +"\n" +" Attempts to get opped by ChanServ in . is only\n" +" necessary if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[]\n" +"\n" +"Demande à être opé par ChanServ sur le . n'est nécessaire que si la commande n'est pas envoyée sur le canal lui-même." + +#: plugin.py:408 +msgid "I'm already opped in %s." +msgstr "Je suis déjà opé sur %s." + +#: plugin.py:415 +msgid "" +"[]\n" +"\n" +" Attempts to get voiced by ChanServ in . is only\n" +" necessary if the message isn't sent in the channel itself.\n" +" " +msgstr "" +"[]\n" +"\n" +" Demande à être voicé par ChanServ sur le . n'est nécessaire que si la commande n'est pas envoyée sur le canal lui-même." + +#: plugin.py:421 +msgid "I'm already voiced in %s." +msgstr "Je suis déjà voicé sur %s." + +#: plugin.py:438 +msgid "" +"[]\n" +"\n" +" Attempts to get unbanned by ChanServ in . is only\n" +" necessary if the message isn't sent in the channel itself, but chances\n" +" are, if you need this command, you're not sending it in the channel\n" +" itself.\n" +" " +msgstr "" +"[]\n" +"\n" +"Cherche à être débanni par ChanServ sur le . n'est nécessaire que si la commande n'est pas envoyée sur le canal lui-même, mais, vous n'avez probablement pas besoin d'utiliser cette commande sur le canal en question." + +#: plugin.py:459 +msgid "" +"[]\n" +"\n" +" Attempts to get invited by ChanServ to . is only\n" +" necessary if the message isn't sent in the channel itself, but chances\n" +" are, if you need this command, you're not sending it in the channel\n" +" itself.\n" +" " +msgstr "" +"[]\n" +"\n" +"Cherche à être invité par ChanServ sur le . n'est nécessaire que si la commande n'est pas envoyée sur le canal lui-même, mais, vous n'avez probablement pas besoin d'utiliser cette commande sur le canal en question." + +#: plugin.py:480 +msgid "" +"takes no arguments\n" +"\n" +" Identifies with NickServ using the current nick.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +"\n" +"S'identifie auprès de NickServ, en utilisant le nick actuel." + +#: plugin.py:489 +msgid "I don't have a configured password for my current nick." +msgstr "Je n'ai pas de mot de passe configuré pour mon nick actuel." + +#: plugin.py:492 +msgid "You must set supybot.plugins.Services.NickServ before I'm able to do identify." +msgstr "Vous devez définir supybot.plugins.Services.NickServ avant que je ne puisse m'identifier" + +#: plugin.py:498 +msgid "" +"[]\n" +"\n" +" Ghosts the bot's given nick and takes it. If no nick is given,\n" +" ghosts the bot's configured nick and takes it.\n" +" " +msgstr "" +"[]\n" +"\n" +"Ghost le nick donné du bot et le prend. Si aucun nick n'est donné, utilise celui configuré." + +#: plugin.py:507 +msgid "I cowardly refuse to ghost myself." +msgstr "Je suis trop couard pour me ghoster moi-même." + +#: plugin.py:512 +msgid "You must set supybot.plugins.Services.NickServ before I'm able to ghost a nick." +msgstr "Vous devez définir supybot.plugins.Services.NickServ avant que je ne puisse ghoster un nick." + +#: plugin.py:518 +msgid "" +" []\n" +"\n" +" Sets the NickServ password for to . If is\n" +" not given, removes from the configured nicks.\n" +" " +msgstr "" +" []\n" +"\n" +"Défini le NickServ pour le . Si le n'est pas donné, supprime de la liste des nis, configurés." + +#: plugin.py:528 +msgid "That nick was not configured with a password." +msgstr "Ce nick n'est pas configuré avec un mot de passe." + +#: plugin.py:539 +msgid "" +"takes no arguments\n" +"\n" +" Returns the nicks that this plugin is configured to identify and ghost\n" +" with.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +"\n" +"Retourne les nicks pour lesquels ce plugin est configuré pour s'identifier et ghoster." + +#: plugin.py:549 +msgid "I'm not currently configured for any nicks." +msgstr "Je ne suis actuellement configuré pour aucun nick." + diff --git a/plugins/ShrinkUrl/locale/fr.po b/plugins/ShrinkUrl/locale/fr.po new file mode 100644 index 000000000..0a276eb7f --- /dev/null +++ b/plugins/ShrinkUrl/locale/fr.po @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-20 08:55+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: config.py:39 +msgid "" +"This plugin offers a snarfer that will go retrieve a shorter\n" +" version of long URLs that are sent to the channel. Would you\n" +" like this snarfer to be enabled?" +msgstr "Ce plugin offre un snarfer qui récupère de longues URLs envoyées sur un canal pour en envoyer une version plus courte. Voulez-vous activer ce snarfer ?" + +#: config.py:45 +#: config.py:49 +msgid "Valid values include 'ln', 'tiny', 'xrl', and 'x0'." +msgstr "Les valeurs valides incluent 'ln', 'tiny', 'xrl', et 'x0'." + +#: config.py:71 +msgid "" +"Determines whether the\n" +" shrink snarfer is enabled. This snarfer will watch for URLs in the\n" +" channel, and if they're sufficiently long (as determined by\n" +" supybot.plugins.ShrinkUrl.minimumLength) it will post a\n" +" smaller URL from either ln-s.net or tinyurl.com, as denoted in\n" +" supybot.plugins.ShrinkUrl.default." +msgstr "Détermine si le snarfer d'URL est activé. Ce remplaceur sera à l'écoute de toutes les URLs sur lle canal, et, si elle sont suffisamment longues (déterminé par supybot.plugins.ShrinkUrl.minimumLength) le bot postera une URL raccourcie avec ln-s.net ou tinyurl.com, comme défini par supybot.plugins.ShrinkUrl.default." + +#: config.py:78 +msgid "" +"Determines whether the snarfer will show the\n" +" domain of the URL being snarfed along with the shrunken URL." +msgstr "Détermine si le snarfer affichera le domaine de l'URL snarfée avec l'URL raccourcie." + +#: config.py:81 +msgid "" +"The minimum length a URL must be before\n" +" the bot will shrink it." +msgstr "La taille minimum d'une URL pour que le bot la raccourcice." + +#: config.py:84 +msgid "" +"Determines what URLs are to be snarfed; URLs\n" +" matching the regexp given will not be snarfed. Give the empty string if\n" +" you have no URLs that you'd like to exclude from being snarfed." +msgstr "Détermine quelles URLs seront snarfées ; les URLs correspondant à l'expression régulière ne seront par snarfées. Donnez une chaîne vide si il n'y a pas d'URL que vous voulez exclure." + +#: config.py:88 +msgid "" +"Determines whether the bot will shrink the\n" +" URLs of outgoing messages if those URLs are longer than\n" +" supybot.plugins.ShrinkUrl.minimumLength." +msgstr "Détermine si le bot raccourcira les URLs des messages sortant si ces URLs sont plus longues que supybot.plugins.ShrinkUrl.minimumLength." + +#: config.py:92 +msgid "" +"Determines what website the bot will use when\n" +" shrinking a URL." +msgstr "Détermine quel site web le bot utilisera pour raccourcir une URL" + +#: config.py:95 +msgid "" +"Determines whether this plugin will bold\n" +" certain portions of its replies." +msgstr "Détermine si ce plugin mettra en gras certaines portions de ses réponses." + +#: config.py:98 +msgid "" +"If set to a non-empty value, specifies the list of\n" +" services to rotate through for the shrinkSnarfer and outFilter." +msgstr "Si définit à une valeur non vide, définit la liste des services à faire tourner pour shrinkSnarfer et outFilter." + +#: plugin.py:169 +msgid "" +"\n" +"\n" +" Returns an ln-s.net version of .\n" +" " +msgstr "" +"\n" +"\n" +"Retourne une version de ln-s.net de l'." + +#: plugin.py:194 +msgid "" +"\n" +"\n" +" Returns a TinyURL.com version of \n" +" " +msgstr "" +"\n" +"\n" +"Retourne une version de TinyURL.com de l'." + +#: plugin.py:222 +msgid "" +"\n" +"\n" +" Returns an xrl.us version of .\n" +" " +msgstr "" +"\n" +"\n" +"Retourne une version de xrl.us de l'." + +#: plugin.py:248 +msgid "" +"\n" +"\n" +" Returns an x0.no version of .\n" +" " +msgstr "" +"\n" +"\n" +"Retourne une version de x0.no de l'." + diff --git a/plugins/Status/locale/fr.po b/plugins/Status/locale/fr.po new file mode 100644 index 000000000..4d1d797cc --- /dev/null +++ b/plugins/Status/locale/fr.po @@ -0,0 +1,169 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-20 09:05+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: config.py:46 +msgid "" +"Determines whether the cpu command will list\n" +" the time taken by children as well as the bot's process." +msgstr "Détermine si la commande cpu listera le temps pris par les enfants aussi bien que celui du processus du bot." + +#: config.py:49 +msgid "" +"Determines whether the cpu command will\n" +" provide the number of threads spawned and active." +msgstr "Détermine si la commande cpu donnera le nombre de threads lancés et actifs." + +#: config.py:52 +msgid "" +"Determines whether the cpu command will report\n" +" the amount of memory being used by the bot." +msgstr "Détermine si la commande cpu donnera la quantité de mémoire utilisée par le bot." + +#: plugin.py:71 +msgid "" +"takes no arguments\n" +"\n" +" Returns the status of the bot.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +"\n" +"Retourne le status du bot." + +#: plugin.py:80 +msgid "%s as %L" +msgstr "%s en tant que %L" + +#: plugin.py:81 +msgid "I am connected to %L." +msgstr "Je suis connecté à %L" + +#: plugin.py:83 +msgid "I am currently in code profiling mode." +msgstr "Je suis actuellement en mode de profiling du code." + +#: plugin.py:89 +msgid "" +"takes no arguments\n" +"\n" +" Returns the current threads that are active.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +"\n" +"Retourne les threads actifs." + +#: plugin.py:95 +msgid "I have spawned %n; %n %b still currently active: %L." +msgstr "J'ai lancé %n ; %n %b sont encore actuellement actifs : %L." + +#: plugin.py:103 +msgid "" +"takes no arguments\n" +"\n" +" Returns some interesting network-related statistics.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +"\n" +"Retourne quelques statistiques intéressantes liées au réseau." + +#: plugin.py:111 +msgid "an indeterminate amount of time" +msgstr "une durée indéterminée" + +#: plugin.py:112 +msgid "I have received %s messages for a total of %s bytes. I have sent %s messages for a total of %s bytes. I have been connected to %s for %s." +msgstr "J'ai reçu %s message pour un total de %s octets. J'ai envoyé %s messages pour un total de %s octets. J'ai été connecté à %s pendant %s." + +#: plugin.py:121 +msgid "" +"takes no arguments\n" +"\n" +" Returns some interesting CPU-related statistics on the bot.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +"\n" +"Retourne quelques statistiques intéressantes reliées au CPU." + +#: plugin.py:131 +msgid "My children have taken %.2f seconds of user time and %.2f seconds of system time for a total of %.2f seconds of CPU time. " +msgstr "Mes enfants ont pris %.2f secondes du temps utilisateur et %.2f secondes du temps système, pour un total de %.2f secondes de temps CPU." + +#: plugin.py:138 +msgid "I have taken %.2f seconds of user time and %.2f seconds of system time, for a total of %.2f seconds of CPU time. %s" +msgstr "J'ai pris %.2f secondes du temps utilisateur et %.2f secondes du temps système, pour un total de %.2f secondes de temps CPU." + +#: plugin.py:160 +msgid "Unable to run ps command." +msgstr "Impossible de lancer la commande ps." + +#: plugin.py:166 +msgid " I'm taking up %s kB of memory." +msgstr " Je prend plus de %s kO de mémoire." + +#: plugin.py:174 +msgid "" +"takes no arguments\n" +"\n" +" Returns some interesting command-related statistics.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +"\n" +"Retourne quelques statistiques intéressantes liées aux commandes." + +#: plugin.py:184 +msgid "I offer a total of %n in %n. I have processed %n." +msgstr "J'offre un total de %n dans %n plugins. J'ai géré %n." + +#: plugin.py:193 +msgid "" +"takes no arguments\n" +"\n" +" Returns a list of the commands offered by the bot.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +"\n" +"Retourne une liste des commandes offertes par le bot." + +#: plugin.py:207 +msgid "" +"takes no arguments\n" +"\n" +" Returns the amount of time the bot has been running.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +"\n" +"Retourne la durée durant laquelle le bot est lancée." + +#: plugin.py:211 +msgid "I have been running for %s." +msgstr "Je suis lancé depuis %s." + +#: plugin.py:218 +msgid "" +"takes no arguments\n" +"\n" +" Returns the server the bot is on.\n" +" " +msgstr "" +"ne prend pas d'argument\n" +"\n" +"Retourne le(s) serveur(s) sur le(s)quel(s) le bot est." + diff --git a/plugins/String/locale/fr.po b/plugins/String/locale/fr.po new file mode 100644 index 000000000..6dc911991 --- /dev/null +++ b/plugins/String/locale/fr.po @@ -0,0 +1,189 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-20 09:08+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: config.py:47 +msgid "" +"Determines the maximum size of a string\n" +" given to the levenshtein command. The levenshtein command uses an O(m*n)\n" +" algorithm, which means that with strings of length 256, it can take 1.5\n" +" seconds to finish; with strings of length 384, though, it can take 4\n" +" seconds to finish, and with strings of much larger lengths, it takes more\n" +" and more time. Using nested commands, strings can get quite large, hence\n" +" this variable, to limit the size of arguments passed to the levenshtein\n" +" command." +msgstr "Détermine la taille maximum d'une chaîne donnée à la commande 'levenshtein'. Cette commande utiliser un algorithme O(m*n), ce qui signifit que pour une chaîne de taille 256, il peut prendre 1,5 seconde à se finir ; pour les chaînes de taille 384, il peut en prendre 4, et ainsi de suite. En utilisant des commandes inmbriquées, les chaînes peuvent devenir très grandes, donc, utilisez cette variable pour limiter la taille des arguments passés à la commande 'levenshtein'." + +#: plugin.py:46 +msgid "" +"\n" +"\n" +" Returns the 8-bit value of .\n" +" " +msgstr "" +"\n" +"\n" +"Retourne la valeur 8 bits de la ." + +#: plugin.py:55 +msgid "" +"\n" +"\n" +" Returns the character associated with the 8-bit value \n" +" " +msgstr "" +"\n" +"\n" +"Retourne le caractère associé à la valeur 8-bits du " + +#: plugin.py:62 +msgid "That number doesn't map to an 8-bit character." +msgstr "Ce nombre ne correspond pas à un caractère 8 bits." + +#: plugin.py:67 +msgid "" +" \n" +"\n" +" Returns an encoded form of the given text; the valid encodings are\n" +" available in the documentation of the Python codecs module:\n" +" .\n" +" " +msgstr "" +" \n" +"\n" +"Retourne la forme encodée du texte donnée ; les encodages valides sont disponibles dans la documentation du module codec de Python : http://docs.python.org/library/codecs.html#standard-encodings" + +#: plugin.py:76 +#: plugin.py:90 +msgid "encoding" +msgstr "encodage" + +#: plugin.py:81 +msgid "" +" \n" +"\n" +" Returns an un-encoded form of the given text; the valid encodings are\n" +" available in the documentation of the Python codecs module:\n" +" .\n" +" " +msgstr "" +" \n" +"\n" +"Retourne la forme désencodée du texte donnée ; les encodages valides sont disponibles dans la documentation du module codec de Python : http://docs.python.org/library/codecs.html#standard-encodings" + +#: plugin.py:92 +msgid "base64 string" +msgstr "chaîne base64" + +#: plugin.py:93 +msgid "Base64 strings must be a multiple of 4 in length, padded with '=' if necessary." +msgstr "Les chaînes base64 doivent avoir une longueur multiple de 4, entourées de '=' si nécessaire." + +#: plugin.py:99 +msgid "" +" \n" +"\n" +" Returns the levenshtein distance (also known as the \"edit distance\"\n" +" between and )\n" +" " +msgstr "" +" \n" +"\n" +"Retourne la distance leveshtein (aussi connue sous le nom de \"distance d'édition) entre les deux chaînes." + +#: plugin.py:106 +msgid "Levenshtein distance is a complicated algorithm, try it with some smaller inputs." +msgstr "La distance levenshtein est un algorithme compliqué ; essayez avec des données plus petites." + +#: plugin.py:114 +msgid "" +" []\n" +"\n" +" Returns the Soundex hash to a given length. The length defaults to\n" +" 4, since that's the standard length for a soundex hash. For unlimited\n" +" length, use 0.\n" +" " +msgstr "" +" []\n" +"\n" +"Retourne un hash Soundex de la longueur donnée. La longueur par défaut est de 4, c'est le standard pour un hash soundex. Pour une longueur illimitée, utilisez 0." + +#: plugin.py:125 +msgid "" +"\n" +"\n" +" Returns the length of .\n" +" " +msgstr "" +"\n" +"\n" +"Retourne la longueur du \n" + +#: plugin.py:134 +msgid "" +" \n" +"\n" +" If is of the form m/regexp/flags, returns the portion of\n" +" that matches the regexp. If is of the form\n" +" s/regexp/replacement/flags, returns the result of applying such a\n" +" regexp to .\n" +" " +msgstr "" +" \n" +"\n" +"Si l' est de la forme de m/regexp/flags, retourne la portion du correspondant à l'expression régulière. Si l' est de la forme de s/regexp/remplacement/flags, retourne le résultat de l'application de l'expression régulière sur le ." + +#: plugin.py:146 +msgid "You probably don't want to match the empty string." +msgstr "Vous ne voulez probablement appliquer une expression régulière sur une chaîne vide." + +#: plugin.py:156 +msgid "" +" \n" +"\n" +" Returns XOR-encrypted with . See\n" +" http://www.yoe.org/developer/xor.html for information about XOR\n" +" encryption.\n" +" " +msgstr "" +" \n" +"\n" +"Retourne le , encrypté par la méthode XOR avec le . Lisez http://www.yoe.org/developer/xor.html pour plus d'informations sur le cryptage XOR." + +#: plugin.py:169 +msgid "" +"\n" +"\n" +" Returns the md5 hash of a given string. Read\n" +" http://www.rsasecurity.com/rsalabs/faq/3-6-6.html for more information\n" +" about md5.\n" +" " +msgstr "" +"\n" +"\n" +"Retourne le hash md5 de la chaîne donnée. Lisez http://www.rsasecurity.com/rsalabs/faq/3-6-6.html pour plus d'informations à propos de md5." + +#: plugin.py:180 +msgid "" +"\n" +"\n" +" Returns the SHA hash of a given string. Read\n" +" http://www.secure-hash-algorithm-md5-sha-1.co.uk/ for more information\n" +" about SHA.\n" +" " +msgstr "" +"\n" +"\n" +"Retourne le hash SDA de la chaîne donnée. Lisez http://www.secure-hash-algorithm-md5-sha-1.co.uk/ pour plus d'informations à propos de SHA." + From 52094ec9101623e3e135823d5dbe520d7250dfdd Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sat, 30 Oct 2010 11:23:56 +0200 Subject: [PATCH 14/15] User: internationalize a string --- plugins/User/messages.pot | 6 +++++- plugins/User/plugin.py | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/User/messages.pot b/plugins/User/messages.pot index faaf3ad96..6ddaeff76 100644 --- a/plugins/User/messages.pot +++ b/plugins/User/messages.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2010-10-16 13:50+CEST\n" +"POT-Creation-Date: 2010-10-30 11:23+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -260,6 +260,10 @@ msgid "" " " msgstr "" +#: plugin.py:438 +msgid "If you remain recognized after giving this command, you're being recognized by hostmask, rather than by password. You must remove whatever hostmask is causing you to be recognized in order not to be recognized." +msgstr "" + #: plugin.py:447 #, docstring msgid "" diff --git a/plugins/User/plugin.py b/plugins/User/plugin.py index f949ac14a..562c143ab 100644 --- a/plugins/User/plugin.py +++ b/plugins/User/plugin.py @@ -435,11 +435,11 @@ class User(callbacks.Plugin): """ user.clearAuth() ircdb.users.setUser(user) - irc.replySuccess('If you remain recognized after giving this command, ' + irc.replySuccess(_('If you remain recognized after giving this command, ' 'you\'re being recognized by hostmask, rather than ' 'by password. You must remove whatever hostmask is ' 'causing you to be recognized in order not to be ' - 'recognized.') + 'recognized.')) unidentify = wrap(unidentify, ['user']) @internationalizeDocstring From df3459dc3b351bfecc8b61e5a2904fb0cbb7a8e6 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sat, 30 Oct 2010 12:10:31 +0200 Subject: [PATCH 15/15] Localize Sucess, Time, Todo, Topic, Url, Unix, User, Utilities, and Web into French --- plugins/Success/locale/fr.po | 30 +++ plugins/Time/locale/fr.po | 108 +++++++++ plugins/Todo/locale/fr.po | 141 ++++++++++++ plugins/Topic/locale/fr.po | 391 +++++++++++++++++++++++++++++++++ plugins/URL/locale/fr.po | 60 +++++ plugins/Unix/locale/fr.po | 210 ++++++++++++++++++ plugins/User/locale/fr.po | 323 +++++++++++++++++++++++++++ plugins/Utilities/locale/fr.po | 91 ++++++++ plugins/Web/locale/fr.po | 167 ++++++++++++++ 9 files changed, 1521 insertions(+) create mode 100644 plugins/Success/locale/fr.po create mode 100644 plugins/Time/locale/fr.po create mode 100644 plugins/Todo/locale/fr.po create mode 100644 plugins/Topic/locale/fr.po create mode 100644 plugins/URL/locale/fr.po create mode 100644 plugins/Unix/locale/fr.po create mode 100644 plugins/User/locale/fr.po create mode 100644 plugins/Utilities/locale/fr.po create mode 100644 plugins/Web/locale/fr.po diff --git a/plugins/Success/locale/fr.po b/plugins/Success/locale/fr.po new file mode 100644 index 000000000..94218851c --- /dev/null +++ b/plugins/Success/locale/fr.po @@ -0,0 +1,30 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-20 09:09+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: config.py:49 +msgid "" +"Determines whether the bot will prefix the nick\n" +" of the user giving an invalid command to the success response." +msgstr "Détermine si le bot utilisera le nick de l'utilisateur donnant une commande invalide comme préfixe pour la réponse de Success." + +#: plugin.py:39 +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 'The operation succeeded.' messages\n" +" with messages kept in a database, able to give more personable\n" +" responses." +msgstr "Ce plugin était à l'origine écrit pour fonctionner avec MoobotFactoids, qui fournit une interface similaire à celle de moobot et blootbot pour les factoids. Il remplacement le message 'the operation succeeded.' par un message stoché dans la base de données, ce qui vous permet d'en avoir un plus personnalisable." + diff --git a/plugins/Time/locale/fr.po b/plugins/Time/locale/fr.po new file mode 100644 index 000000000..40929781a --- /dev/null +++ b/plugins/Time/locale/fr.po @@ -0,0 +1,108 @@ +msgid "" +msgstr "" +"Project-Id-Version: Supybot-fr\n" +"POT-Creation-Date: 2010-10-20 09:38+CEST\n" +"PO-Revision-Date: \n" +"Last-Translator: Valentin Lorentz \n" +"Language-Team: Supybot-fr \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Français\n" +"X-Poedit-Country: France\n" +"X-Poedit-SourceCharset: ASCII\n" + +#: config.py:45 +msgid "" +"Determines the\n" +" format string for timestamps. Refer to the Python documentation for the\n" +" time module to see what formats are accepted. If you set this variable to\n" +" the empty string, the timestamp will not be shown." +msgstr "Détermine la chaîne de format pour les timestamps. Référez-vous à la documentation du module Python time pour voir quels formats sont acceptés. Si vous définissez cette variable à une chaîne vide, le timestamp ne sera pas affiché." + +#: plugin.py:60 +msgid "" +"[y] [w] [d] [h] [m] [s]\n" +"\n" +" Returns the number of seconds in the number of , ,\n" +" , , , and given. An example usage is\n" +" \"seconds 2h 30m\", which would return 9000, which is '3600*2 + 30*60'.\n" +" Useful for scheduling events at a given number of seconds in the\n" +" future.\n" +" " +msgstr "" +"[y] [w] [d] [h] [m] [s]\n" +"\n" +"Retourne le nombre de secondes de la date donnée. Un exemple d'utilisation est \"seconds 2h 30m\", ce qui retournera 9000. Utile pour planifier des évènement à un certain nombre de secondes dans le futur." + +#: plugin.py:95 +msgid "" +"