mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-11-27 13:19:24 +01:00
Merge branch 'i18n' into l18n-fr
This commit is contained in:
commit
ddb3dd5a50
@ -199,7 +199,7 @@ class Misc(callbacks.Plugin):
|
|||||||
'you want help with.'), names))
|
'you want help with.'), names))
|
||||||
else:
|
else:
|
||||||
assert cbs, 'Odd, maxL == command, but no cbs.'
|
assert cbs, 'Odd, maxL == command, but no cbs.'
|
||||||
irc.reply(cbs[0].getCommandHelp(command, False))
|
irc.reply(_.__call__(cbs[0].getCommandHelp(command, False)))
|
||||||
else:
|
else:
|
||||||
irc.error(format(_('There is no command %q.'),
|
irc.error(format(_('There is no command %q.'),
|
||||||
callbacks.formatCommand(command)))
|
callbacks.formatCommand(command)))
|
||||||
|
52
src/i18n.py
52
src/i18n.py
@ -60,13 +60,10 @@ def get_plugin_dir(plugin_name):
|
|||||||
filename = None
|
filename = None
|
||||||
try:
|
try:
|
||||||
filename = sys.modules[plugin_name].__file__
|
filename = sys.modules[plugin_name].__file__
|
||||||
except KeyError: # This is odd
|
except KeyError: # It sometimes happens with Owner
|
||||||
pass
|
pass
|
||||||
if filename == None:
|
if filename == None:
|
||||||
try:
|
filename = sys.modules['supybot.plugins.' + plugin_name].__file__
|
||||||
filename = sys.modules['supybot.plugins.' + plugin_name].__file__
|
|
||||||
except KeyError: # This is odder
|
|
||||||
return
|
|
||||||
if filename.endswith(".pyc"):
|
if filename.endswith(".pyc"):
|
||||||
filename = filename[0:-1]
|
filename = filename[0:-1]
|
||||||
|
|
||||||
@ -171,7 +168,7 @@ class _PluginInternationalization:
|
|||||||
if len(data) == 0: # Multiline mode
|
if len(data) == 0: # Multiline mode
|
||||||
step = IN_MSGSTR
|
step = IN_MSGSTR
|
||||||
else:
|
else:
|
||||||
self._translate(untranslated, data)
|
self._addToDatabase(untranslated, data)
|
||||||
step = WAITING_FOR_MSGID
|
step = WAITING_FOR_MSGID
|
||||||
|
|
||||||
|
|
||||||
@ -182,25 +179,47 @@ class _PluginInternationalization:
|
|||||||
step = WAITING_FOR_MSGID
|
step = WAITING_FOR_MSGID
|
||||||
if translated == '':
|
if translated == '':
|
||||||
translated = untranslated
|
translated = untranslated
|
||||||
self._translate(untranslated, translated)
|
self._addToDatabase(untranslated, translated)
|
||||||
|
|
||||||
def _translate(self, untranslated, translated):
|
def _addToDatabase(self, untranslated, translated):
|
||||||
self.translations.update({self._unescape(untranslated):
|
untranslated = self._unescape(untranslated)
|
||||||
self._unescape(translated)})
|
translated = self._unescape(translated)
|
||||||
|
self.translations.update({untranslated: translated})
|
||||||
|
|
||||||
def _unescape(self, string):
|
def _unescape(self, string):
|
||||||
return str.replace(string, '\\n', '\n')
|
import supybot.utils as utils
|
||||||
|
return utils.str.normalizeWhitespace(str.replace(string, '\\n', '\n'))
|
||||||
|
|
||||||
def __call__(self, untranslated):
|
def __call__(self, untranslated):
|
||||||
|
if untranslated.__class__ == internationalizedString:
|
||||||
|
return untranslated._original
|
||||||
|
untranslated = __import__('supybot').utils.str.normalizeWhitespace(untranslated)
|
||||||
if not 'conf' in globals():
|
if not 'conf' in globals():
|
||||||
return untranslated
|
return untranslated
|
||||||
if self.currentLocaleName != conf.supybot.language():
|
if self.currentLocaleName != conf.supybot.language():
|
||||||
# If the locale has been changed
|
# If the locale has been changed
|
||||||
reloadLocals()
|
reloadLocals()
|
||||||
try:
|
try:
|
||||||
return self.translations[untranslated]
|
string = self._translate(untranslated)
|
||||||
|
return self._addTracker(string, untranslated)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return untranslated
|
pass
|
||||||
|
return untranslated
|
||||||
|
|
||||||
|
def _translate(self, string):
|
||||||
|
if string.__class__ == internationalizedString:
|
||||||
|
return string._internationalizer(string.untranslated)
|
||||||
|
else:
|
||||||
|
return self.translations[string]
|
||||||
|
|
||||||
|
def _addTracker(self, string, untranslated):
|
||||||
|
if string.__class__ == internationalizedString:
|
||||||
|
return string
|
||||||
|
else:
|
||||||
|
string = internationalizedString(string)
|
||||||
|
string._original = untranslated
|
||||||
|
string._internationalizer = self
|
||||||
|
return string
|
||||||
|
|
||||||
def _loadL10nCode(self):
|
def _loadL10nCode(self):
|
||||||
if self.name != 'supybot':
|
if self.name != 'supybot':
|
||||||
@ -267,6 +286,13 @@ class internationalizedFunction:
|
|||||||
def restore(self):
|
def restore(self):
|
||||||
self.__call__ = self._origin
|
self.__call__ = self._origin
|
||||||
|
|
||||||
|
class internationalizedString(str):
|
||||||
|
pass
|
||||||
|
# def __init__(self, *args, **kwargs):
|
||||||
|
# self.__parent.__init__(*args, **kwargs)
|
||||||
|
# self._original = str(self)
|
||||||
|
# self._internationalizer = None
|
||||||
|
|
||||||
def internationalizeDocstring(obj):
|
def internationalizeDocstring(obj):
|
||||||
"""Decorates functions and internationalize their docstring.
|
"""Decorates functions and internationalize their docstring.
|
||||||
|
|
||||||
|
@ -35,6 +35,7 @@ import string
|
|||||||
import textwrap
|
import textwrap
|
||||||
|
|
||||||
import supybot.utils as utils
|
import supybot.utils as utils
|
||||||
|
import supybot.i18n as i18n
|
||||||
|
|
||||||
def error(s):
|
def error(s):
|
||||||
"""Replace me with something better from another module!"""
|
"""Replace me with something better from another module!"""
|
||||||
@ -211,7 +212,7 @@ class Group(object):
|
|||||||
self.__nonExistentEntry(attr)
|
self.__nonExistentEntry(attr)
|
||||||
|
|
||||||
def help(self):
|
def help(self):
|
||||||
return self._help
|
return i18n.PluginInternationalization().__call__(self._help)
|
||||||
|
|
||||||
def get(self, attr):
|
def get(self, attr):
|
||||||
# Not getattr(self, attr) because some nodes might have groups that
|
# Not getattr(self, attr) because some nodes might have groups that
|
||||||
|
@ -61,7 +61,14 @@ def rsplit(s, sep=None, maxsplit=-1):
|
|||||||
|
|
||||||
def normalizeWhitespace(s):
|
def normalizeWhitespace(s):
|
||||||
"""Normalizes the whitespace in a string; \s+ becomes one space."""
|
"""Normalizes the whitespace in a string; \s+ becomes one space."""
|
||||||
return ' '.join(s.split())
|
beginning = s.startswith(' ')
|
||||||
|
ending = s.endswith(' ')
|
||||||
|
s = ' '.join(s.split())
|
||||||
|
if beginning:
|
||||||
|
s = ' ' + s
|
||||||
|
if ending:
|
||||||
|
s = s + ' '
|
||||||
|
return s
|
||||||
|
|
||||||
def distance(s, t):
|
def distance(s, t):
|
||||||
"""Returns the levenshtein edit distance between two strings."""
|
"""Returns the levenshtein edit distance between two strings."""
|
||||||
|
Loading…
Reference in New Issue
Block a user