Merge pull request #2104 from trhr/i18n

i18n stuff
This commit is contained in:
Griatch 2020-04-16 13:37:15 +02:00 committed by GitHub
commit 56410c85d6
10 changed files with 40 additions and 40 deletions

View file

@ -275,11 +275,11 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
raise RuntimeError("Session not found") raise RuntimeError("Session not found")
if self.get_puppet(session) == obj: if self.get_puppet(session) == obj:
# already puppeting this object # already puppeting this object
self.msg("You are already puppeting this object.") self.msg(_("You are already puppeting this object."))
return return
if not obj.access(self, "puppet"): if not obj.access(self, "puppet"):
# no access # no access
self.msg(f"You don't have permission to puppet '{obj.key}'.") self.msg(_("You don't have permission to puppet '{key}'.").format(key=obj.key))
return return
if obj.account: if obj.account:
# object already puppeted # object already puppeted
@ -295,12 +295,12 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
else: else:
txt1 = f"Taking over |c{obj.name}|n from another of your sessions." txt1 = f"Taking over |c{obj.name}|n from another of your sessions."
txt2 = f"|c{obj.name}|n|R is now acted from another of your sessions.|n" txt2 = f"|c{obj.name}|n|R is now acted from another of your sessions.|n"
self.msg(txt1, session=session) self.msg(_(txt1), session=session)
self.msg(txt2, session=obj.sessions.all()) self.msg(_(txt2), session=obj.sessions.all())
self.unpuppet_object(obj.sessions.get()) self.unpuppet_object(obj.sessions.get())
elif obj.account.is_connected: elif obj.account.is_connected:
# controlled by another account # controlled by another account
self.msg(f"|c{obj.key}|R is already puppeted by another Account.") self.msg(_("|c{key}|R is already puppeted by another Account.").format(key=obj.key))
return return
# do the puppeting # do the puppeting
@ -496,7 +496,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
# See if authentication is currently being throttled # See if authentication is currently being throttled
if ip and LOGIN_THROTTLE.check(ip): if ip and LOGIN_THROTTLE.check(ip):
errors.append("Too many login failures; please try again in a few minutes.") errors.append(_("Too many login failures; please try again in a few minutes."))
# With throttle active, do not log continued hits-- it is a # With throttle active, do not log continued hits-- it is a
# waste of storage and can be abused to make your logs harder to # waste of storage and can be abused to make your logs harder to
@ -508,8 +508,8 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
if banned: if banned:
# this is a banned IP or name! # this is a banned IP or name!
errors.append( errors.append(
"|rYou have been banned and cannot continue from here." _("|rYou have been banned and cannot continue from here."
"\nIf you feel this ban is in error, please email an admin.|x" "\nIf you feel this ban is in error, please email an admin.|x")
) )
logger.log_sec(f"Authentication Denied (Banned): {username} (IP: {ip}).") logger.log_sec(f"Authentication Denied (Banned): {username} (IP: {ip}).")
LOGIN_THROTTLE.update(ip, "Too many sightings of banned artifact.") LOGIN_THROTTLE.update(ip, "Too many sightings of banned artifact.")
@ -519,7 +519,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
account = authenticate(username=username, password=password) account = authenticate(username=username, password=password)
if not account: if not account:
# User-facing message # User-facing message
errors.append("Username and/or password is incorrect.") errors.append(_("Username and/or password is incorrect."))
# Log auth failures while throttle is inactive # Log auth failures while throttle is inactive
logger.log_sec(f"Authentication Failure: {username} (IP: {ip}).") logger.log_sec(f"Authentication Failure: {username} (IP: {ip}).")
@ -688,7 +688,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
ip = kwargs.get("ip", "") ip = kwargs.get("ip", "")
if ip and CREATION_THROTTLE.check(ip): if ip and CREATION_THROTTLE.check(ip):
errors.append( errors.append(
"You are creating too many accounts. Please log into an existing account." _("You are creating too many accounts. Please log into an existing account.")
) )
return None, errors return None, errors
@ -717,8 +717,8 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
if banned: if banned:
# this is a banned IP or name! # this is a banned IP or name!
string = ( string = (
"|rYou have been banned and cannot continue from here." _("|rYou have been banned and cannot continue from here."
"\nIf you feel this ban is in error, please email an admin.|x" "\nIf you feel this ban is in error, please email an admin.|x")
) )
errors.append(string) errors.append(string)
return None, errors return None, errors
@ -733,7 +733,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
except Exception as e: except Exception as e:
errors.append( errors.append(
"There was an error creating the Account. If this problem persists, contact an admin." _("There was an error creating the Account. If this problem persists, contact an admin.")
) )
logger.log_trace() logger.log_trace()
return None, errors return None, errors
@ -785,7 +785,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
# We are in the middle between logged in and -not, so we have # We are in the middle between logged in and -not, so we have
# to handle tracebacks ourselves at this point. If we don't, # to handle tracebacks ourselves at this point. If we don't,
# we won't see any errors at all. # we won't see any errors at all.
errors.append("An error occurred. Please e-mail an admin if the problem persists.") errors.append(_("An error occurred. Please e-mail an admin if the problem persists."))
logger.log_trace() logger.log_trace()
# Update the throttle to indicate a new account was created from this IP # Update the throttle to indicate a new account was created from this IP
@ -1253,21 +1253,21 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
if session: if session:
session.msg(logged_in={}) session.msg(logged_in={})
self._send_to_connect_channel(f"|G{self.key} connected|n") self._send_to_connect_channel(_("|G{key} connected|n").format(key=self.key))
if _MULTISESSION_MODE == 0: if _MULTISESSION_MODE == 0:
# in this mode we should have only one character available. We # in this mode we should have only one character available. We
# try to auto-connect to our last conneted object, if any # try to auto-connect to our last conneted object, if any
try: try:
self.puppet_object(session, self.db._last_puppet) self.puppet_object(session, self.db._last_puppet)
except RuntimeError: except RuntimeError:
self.msg("The Character does not exist.") self.msg(_("The Character does not exist."))
return return
elif _MULTISESSION_MODE == 1: elif _MULTISESSION_MODE == 1:
# in this mode all sessions connect to the same puppet. # in this mode all sessions connect to the same puppet.
try: try:
self.puppet_object(session, self.db._last_puppet) self.puppet_object(session, self.db._last_puppet)
except RuntimeError: except RuntimeError:
self.msg("The Character does not exist.") self.msg(_("The Character does not exist."))
return return
elif _MULTISESSION_MODE in (2, 3): elif _MULTISESSION_MODE in (2, 3):
# In this mode we by default end up at a character selection # In this mode we by default end up at a character selection
@ -1305,7 +1305,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
""" """
reason = f" ({reason if reason else ''})" reason = f" ({reason if reason else ''})"
self._send_to_connect_channel(f"|R{self.key} disconnected{reason}|n") self._send_to_connect_channel(_("|R{key} disconnected{reason}|n").format(key=self.key, reason=reason))
def at_post_disconnect(self, **kwargs): def at_post_disconnect(self, **kwargs):
""" """
@ -1411,7 +1411,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
if hasattr(target, "return_appearance"): if hasattr(target, "return_appearance"):
return target.return_appearance(self) return target.return_appearance(self)
else: else:
return "{} has no in-game appearance.".format(target) return _("{target} has no in-game appearance.").format(target=target)
else: else:
# list of targets - make list to disconnect from db # list of targets - make list to disconnect from db
characters = list(tar for tar in target if tar) if target else [] characters = list(tar for tar in target if tar) if target else []
@ -1454,7 +1454,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
if is_su or len(characters) < charmax: if is_su or len(characters) < charmax:
if not characters: if not characters:
result.append( result.append(
"\n\n You don't have any characters yet. See |whelp @charcreate|n for creating one." _("\n\n You don't have any characters yet. See |whelp @charcreate|n for creating one.")
) )
else: else:
result.append("\n |w@charcreate <name> [=description]|n - create new character") result.append("\n |w@charcreate <name> [=description]|n - create new character")
@ -1534,7 +1534,7 @@ class DefaultGuest(DefaultAccount):
# check if guests are enabled. # check if guests are enabled.
if not settings.GUEST_ENABLED: if not settings.GUEST_ENABLED:
errors.append("Guest accounts are not enabled on this server.") errors.append(_("Guest accounts are not enabled on this server."))
return None, errors return None, errors
try: try:
@ -1544,7 +1544,7 @@ class DefaultGuest(DefaultAccount):
username = name username = name
break break
if not username: if not username:
errors.append("All guest accounts are in use. Please try again later.") errors.append(_("All guest accounts are in use. Please try again later."))
if ip: if ip:
LOGIN_THROTTLE.update(ip, "Too many requests for Guest access.") LOGIN_THROTTLE.update(ip, "Too many requests for Guest access.")
return None, errors return None, errors
@ -1572,7 +1572,7 @@ class DefaultGuest(DefaultAccount):
# We are in the middle between logged in and -not, so we have # We are in the middle between logged in and -not, so we have
# to handle tracebacks ourselves at this point. If we don't, # to handle tracebacks ourselves at this point. If we don't,
# we won't see any errors at all. # we won't see any errors at all.
errors.append("An error occurred. Please e-mail an admin if the problem persists.") errors.append(_("An error occurred. Please e-mail an admin if the problem persists."))
logger.log_trace() logger.log_trace()
return None, errors return None, errors
@ -1589,7 +1589,7 @@ class DefaultGuest(DefaultAccount):
overriding the call (unused by default). overriding the call (unused by default).
""" """
self._send_to_connect_channel(f"|G{self.key} connected|n") self._send_to_connect_channel(_("|G{key} connected|n").format(key=self.key))
self.puppet_object(session, self.db._last_puppet) self.puppet_object(session, self.db._last_puppet)
def at_server_shutdown(self): def at_server_shutdown(self):

View file

@ -10,6 +10,7 @@ from evennia.accounts.accounts import DefaultAccount
from evennia.scripts.scripts import DefaultScript from evennia.scripts.scripts import DefaultScript
from evennia.utils import search from evennia.utils import search
from evennia.utils import utils from evennia.utils import utils
from django.utils.translation import gettext as _
_IDLE_TIMEOUT = settings.IDLE_TIMEOUT _IDLE_TIMEOUT = settings.IDLE_TIMEOUT
@ -328,7 +329,7 @@ class IRCBot(Bot):
chstr = f"{self.db.irc_channel} ({self.db.irc_network}:{self.db.irc_port})" chstr = f"{self.db.irc_channel} ({self.db.irc_network}:{self.db.irc_port})"
nicklist = ", ".join(sorted(kwargs["nicklist"], key=lambda n: n.lower())) nicklist = ", ".join(sorted(kwargs["nicklist"], key=lambda n: n.lower()))
for obj in self._nicklist_callers: for obj in self._nicklist_callers:
obj.msg(f"Nicks at {chstr}:\n {nicklist}") obj.msg(_("Nicks at {chstr}:\n {nicklist}").format(chstr=chstr, nicklist=nicklist))
self._nicklist_callers = [] self._nicklist_callers = []
return return
@ -337,7 +338,7 @@ class IRCBot(Bot):
if hasattr(self, "_ping_callers") and self._ping_callers: if hasattr(self, "_ping_callers") and self._ping_callers:
chstr = f"{self.db.irc_channel} ({self.db.irc_network}:{self.db.irc_port})" chstr = f"{self.db.irc_channel} ({self.db.irc_network}:{self.db.irc_port})"
for obj in self._ping_callers: for obj in self._ping_callers:
obj.msg(f"IRC ping return from {chstr} took {kwargs['timing']}s.") obj.msg(_("IRC ping return from {chstr} took {time}s.").format(chstr=chstr, time=kwargs['timing']))
self._ping_callers = [] self._ping_callers = []
return return

View file

@ -743,7 +743,7 @@ def cmdhandler(
sysarg = raw_string sysarg = raw_string
else: else:
# fallback to default error text # fallback to default error text
sysarg = _("Command '%s' is not available.") % raw_string sysarg = _("Command '{command}' is not available.").format(command=raw_string)
suggestions = string_suggestions( suggestions = string_suggestions(
raw_string, raw_string,
cmdset.get_all_cmd_keys_and_aliases(caller), cmdset.get_all_cmd_keys_and_aliases(caller),
@ -751,9 +751,7 @@ def cmdhandler(
maxnum=3, maxnum=3,
) )
if suggestions: if suggestions:
sysarg += _(" Maybe you meant %s?") % utils.list_to_string( sysarg += _(" Maybe you meant {command}?").format(command=utils.list_to_string(suggestions, _("or"), addquote=True))
suggestions, _("or"), addquote=True
)
else: else:
sysarg += _(' Type "help" for help.') sysarg += _(' Type "help" for help.')
raise ExecSystemCommand(syscmd, sysarg) raise ExecSystemCommand(syscmd, sysarg)

View file

@ -184,7 +184,7 @@ def import_cmdset(path, cmdsetobj, emit_to_obj=None, no_logging=False):
raise exc.with_traceback(tb) raise exc.with_traceback(tb)
else: else:
# try next suggested path # try next suggested path
errstring += _("\n(Unsuccessfully tried '%s')." % python_path) errstring += _("\n(Unsuccessfully tried '{path}').").format(path=python_path)
continue continue
try: try:
cmdsetclass = getattr(module, classname) cmdsetclass = getattr(module, classname)
@ -194,7 +194,7 @@ def import_cmdset(path, cmdsetobj, emit_to_obj=None, no_logging=False):
dum, dum, tb = sys.exc_info() dum, dum, tb = sys.exc_info()
raise exc.with_traceback(tb) raise exc.with_traceback(tb)
else: else:
errstring += _("\n(Unsuccessfully tried '%s')." % python_path) errstring += _("\n(Unsuccessfully tried '{path}').").format(path=python_path)
continue continue
_CACHED_CMDSETS[python_path] = cmdsetclass _CACHED_CMDSETS[python_path] = cmdsetclass

View file

@ -131,7 +131,7 @@ class HelpEntryManager(TypedObjectManager):
for topic in topics: for topic in topics:
topic.help_category = default_category topic.help_category = default_category
topic.save() topic.save()
string = "Help database moved to category %s" % default_category string = _("Help database moved to category {default_category}").format(default_category=default_category)
logger.log_info(string) logger.log_info(string)
def search_help(self, ostring, help_category=None): def search_help(self, ostring, help_category=None):

View file

@ -246,7 +246,7 @@ class LockHandler(object):
evalstring = " ".join(_RE_OK.findall(evalstring)) evalstring = " ".join(_RE_OK.findall(evalstring))
eval(evalstring % tuple(True for func in funclist), {}, {}) eval(evalstring % tuple(True for func in funclist), {}, {})
except Exception: except Exception:
elist.append(_("Lock: definition '%s' has syntax errors.") % raw_lockstring) elist.append(_("Lock: definition '{lock_string}' has syntax errors.").format(lock_string=raw_lockstring))
continue continue
if access_type in locks: if access_type in locks:
duplicates += 1 duplicates += 1

View file

@ -8,7 +8,7 @@ from django.contrib import admin
from evennia.typeclasses.admin import AttributeInline, TagInline from evennia.typeclasses.admin import AttributeInline, TagInline
from evennia.objects.models import ObjectDB from evennia.objects.models import ObjectDB
from django.contrib.admin.utils import flatten_fieldsets from django.contrib.admin.utils import flatten_fieldsets
from django.utils.translation import gettext as _
class ObjectAttributeInline(AttributeInline): class ObjectAttributeInline(AttributeInline):
""" """
@ -61,7 +61,7 @@ class ObjectCreateForm(forms.ModelForm):
required=False, required=False,
widget=forms.TextInput(attrs={"size": "78"}), widget=forms.TextInput(attrs={"size": "78"}),
help_text="Most non-character objects don't need a cmdset" help_text="Most non-character objects don't need a cmdset"
" and can leave this field blank.", " and can leave this field blank."
) )
raw_id_fields = ("db_destination", "db_location", "db_home") raw_id_fields = ("db_destination", "db_location", "db_home")

View file

@ -1055,7 +1055,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
# See if we need to kick the account off. # See if we need to kick the account off.
for session in self.sessions.all(): for session in self.sessions.all():
session.msg(_("Your character %s has been destroyed.") % self.key) session.msg(_("Your character {key} has been destroyed.").format(key=self.key))
# no need to disconnect, Account just jumps to OOC mode. # no need to disconnect, Account just jumps to OOC mode.
# sever the connection (important!) # sever the connection (important!)
if self.account: if self.account:

View file

@ -1916,7 +1916,7 @@ def at_search_result(matches, caller, query="", quiet=False, **kwargs):
if multimatch_string: if multimatch_string:
error = "%s\n" % multimatch_string error = "%s\n" % multimatch_string
else: else:
error = _("More than one match for '%s' (please narrow target):\n" % query) error = _("More than one match for '{query}' (please narrow target):\n").format(query=query)
for num, result in enumerate(matches): for num, result in enumerate(matches):
# we need to consider Commands, where .aliases is a list # we need to consider Commands, where .aliases is a list

View file

@ -15,6 +15,7 @@ from django.core.exceptions import ValidationError as _error
from django.core.validators import validate_email as _val_email from django.core.validators import validate_email as _val_email
from evennia.utils.ansi import strip_ansi from evennia.utils.ansi import strip_ansi
from evennia.utils.utils import string_partial_matching as _partial from evennia.utils.utils import string_partial_matching as _partial
from django.utils.translation import gettext as _
_TZ_DICT = {str(tz): _pytz.timezone(tz) for tz in _pytz.common_timezones} _TZ_DICT = {str(tz): _pytz.timezone(tz) for tz in _pytz.common_timezones}
@ -58,7 +59,7 @@ def datetime(entry, option_key="Datetime", account=None, from_tz=None, **kwargs)
""" """
if not entry: if not entry:
raise ValueError(f"No {option_key} entered!") raise ValueError(_("No {option_key} entered!").format(option_key=option_key))
if not from_tz: if not from_tz:
from_tz = _pytz.UTC from_tz = _pytz.UTC
if account: if account:
@ -66,7 +67,7 @@ def datetime(entry, option_key="Datetime", account=None, from_tz=None, **kwargs)
try: try:
from_tz = _pytz.timezone(acct_tz) from_tz = _pytz.timezone(acct_tz)
except Exception as err: except Exception as err:
raise ValueError(f"Timezone string '{acct_tz}' is not a valid timezone ({err})") raise ValueError(_("Timezone string '{acct_tz}' is not a valid timezone ({err})").format(acct_tz=acct_tz, err=err))
else: else:
from_tz = _pytz.UTC from_tz = _pytz.UTC