simplified languages.py, disable (for today) plural subsystem

This commit is contained in:
mdipierro
2012-08-27 01:43:04 -05:00
parent 4000bf17a2
commit 6d78589ed0
3 changed files with 97 additions and 109 deletions
+1 -1
View File
@@ -1 +1 @@
Version 2.00.0 (2012-08-26 21:34:20) dev Version 2.00.0 (2012-08-27 01:42:58) dev
+95 -105
View File
@@ -10,7 +10,7 @@ Plural subsystem is created by Vladyslav Kozlovskyy (Ukraine)
<dbdevelop@gmail.com> <dbdevelop@gmail.com>
""" """
from os import path as ospath, stat as ostat, sep as osep import os
import re import re
from utf8 import Utf8 from utf8 import Utf8
from cgi import escape from cgi import escape
@@ -28,10 +28,17 @@ from string import maketrans
__all__ = ['translator', 'findT', 'update_all_languages'] __all__ = ['translator', 'findT', 'update_all_languages']
ospath = os.path
ostat = os.stat
osep = os.sep
is_gae = settings.global_settings.web2py_runtime_gae
DEFAULT_ACCEPT_LANGUAGE = 'en'
# used as default filter in translator.M() # used as default filter in translator.M()
markmin = lambda s: render( regex_param.sub( markmin = lambda s: render(regex_param.sub(
lambda m: '{' + markmin_escape(m.group('s')) + '}', lambda m: '{' + markmin_escape(m.group('s')) + '}',
s ), sep='br', autolinks=None, id_prefix='' ) s), sep='br', autolinks=None, id_prefix='' )
NUMBERS = (int,long,float) NUMBERS = (int,long,float)
@@ -195,30 +202,19 @@ def get_lang_info(lang, langdir):
langcode = lang if lang != 'default' else 'en' langcode = lang if lang != 'default' else 'en'
return langcode, langname or langcode, ostat(filename).st_mtime return langcode, langname or langcode, ostat(filename).st_mtime
def read_possible_languages_aux(langdir): def read_possible_languages(appdir):
langs = {} langs = {}
# scan languages directory for langfiles: # scan languages directory for langfiles:
for langfile in [f for f in langdir = ospath.join(appdir,'languages')
listdir(langdir, regex_langfile) + for filename in os.listdir(langdir):
listdir(langdir, '^default\.py$') if regex_langfile.match(filename) or filename=='default.py':
if osep not in f]: lang = filename[:-3]
lang=langfile[:-3] langs[lang]=get_lang_info(lang, langdir)
langs[lang]=get_lang_info(lang, langdir) if not 'default' in langs:
if 'default' not in langs:
# if default.py is not found, add default value: # if default.py is not found, add default value:
langs['default'] = ('en', 'English', 0) langs['default'] = ('en', 'English', 0)
deflang=langs['default']
if deflang[0] not in langs:
# create language from default.py:
langs[deflang[0]] = (deflang[0], deflang[1], 0)
return langs return langs
def read_possible_languages(path):
lang_path = ospath.join(path, 'languages')
return getcfs('langs:'+lang_path, lang_path,
lambda: read_possible_languages_aux(lang_path))
def read_plural_rules_aux(filename): def read_plural_rules_aux(filename):
"""retrieve plural rules from rules/*plural_rules-lang*.py file. """retrieve plural rules from rules/*plural_rules-lang*.py file.
@@ -488,18 +484,11 @@ class translator(object):
""" """
def __init__(self, request): def __init__(self, request):
global tcache
self.request = request self.request = request
self.folder = request.folder self.folder = request.folder
dfile = ospath.join(self.folder,'languages','default.py') self.langpath = ospath.join(self.folder,'languages')
if ospath.exists(dfile): self.filenames = set(os.listdir(self.langpath))
self.default_language_file = dfile self.cache = tcache.setdefault(None, ({},allocate_lock()))
self.default_t = read_dict(dfile)
else: # languages/default.py is not found
self.default_language_file = ospath.join(self.folder, 'languages','')
self.default_t = {}
self.cache = tcache.setdefault(self.default_language_file, ({}, allocate_lock()))
self.current_languages = [self.get_possible_languages_info('default')[0]]
self.http_accept_language = request.env.http_accept_language self.http_accept_language = request.env.http_accept_language
# self.accepted_language = None # filled in self.force() # self.accepted_language = None # filled in self.force()
# self.language_file = None # filled in self.force() # self.language_file = None # filled in self.force()
@@ -511,38 +500,20 @@ class translator(object):
# self.plural_file = None # filled in self.force() # self.plural_file = None # filled in self.force()
# self.plural_dict = None # filled in self.force() # self.plural_dict = None # filled in self.force()
# self.plural_status = None # filled in self.force() # self.plural_status = None # filled in self.force()
self.requested_languages = self.force(self.http_accept_language)
self.requested_languages = \
self.force(self.http_accept_language)
self.lazy = True self.lazy = True
self.otherTs = {} self.otherTs = {}
self.filter = markmin self.filter = markmin
self.ftag = 'markmin' self.ftag = 'markmin'
def get_possible_languages_info(self, lang=None):
"""
return info for selected language or dictionary with all
possible languages info from APP/languages/*.py
args:
*lang* (str): language
returns:
if *lang* is defined:
return tuple(langcode, langname, langfile_mtime) or None
if *lang* is NOT defined:
returns dictionary with all possible languages:
{ langcode(from filename): ( langcode(from !langcode! key),
langname(from !langname! key),
langfile_mtime ) }
"""
if lang:
return read_possible_languages(self.folder).get(lang)
return read_possible_languages(self.folder)
def get_possible_languages(self): def get_possible_languages(self):
""" get list of all possible languages for current applications """ possible_languages = [
return sorted( set(lang for lang in lang[:-3] for lang in self.filenames \
read_possible_languages(self.folder).iterkeys() if regex_langfile.match(lang)]
if lang != 'default') return possible_languages
| set(self.current_languages))
def set_current_languages(self, *languages): def set_current_languages(self, *languages):
""" """
@@ -550,7 +521,8 @@ class translator(object):
setting one of this languages makes force() function setting one of this languages makes force() function
turn translation off to use default language turn translation off to use default language
""" """
if len(languages) == 1 and isinstance(languages[0], (tuple, list)): if len(languages) == 1 and isinstance(
languages[0], (tuple, list)):
languages = languages[0] languages = languages[0]
self.current_languages = languages self.current_languages = languages
self.force(self.http_accept_language) self.force(self.http_accept_language)
@@ -571,12 +543,12 @@ class translator(object):
self.plural_file = None self.plural_file = None
self.plural_dict = {} self.plural_dict = {}
else: else:
self.plural_file = ospath.join(self.folder, filename = 'plural-%s.py' % self.plural_language
'languages', if filename in self.filenames:
'plural-%s.py' % self.plural_language) self.plural_file = ospath.join(self.langpath,filename)
if ospath.exists(self.plural_file):
self.plural_dict = read_plural_dict(self.plural_file) self.plural_dict = read_plural_dict(self.plural_file)
else: else:
self.plural_file = None
self.plural_dict = {} self.plural_dict = {}
def plural(self, word, n): def plural(self, word, n):
@@ -614,9 +586,29 @@ class translator(object):
return form return form
return word return word
def get_possible_languages_info(self, lang=None):
"""
return info for selected language or dictionary with all
possible languages info from APP/languages/*.py
args:
*lang* (str): language
returns:
if *lang* is defined:
return tuple(langcode, langname, langfile_mtime) or None
if *lang* is NOT defined:
returns dictionary with all possible languages:
{ langcode(from filename): ( langcode(from !langcode! key),
langname(from !langname! key),
langfile_mtime ) }
"""
if lang:
return read_possible_languages(self.folder).get(lang)
return read_possible_languages(self.folder)
def force(self, *languages): def force(self, *languages):
""" """
select language(s) for translation select language(s) for translation
if a list of languages is passed as a parameter, if a list of languages is passed as a parameter,
@@ -629,47 +621,44 @@ class translator(object):
""" """
global tcache global tcache
language = '' language = ''
if isinstance(languages,str):
if not languages or languages[0] is None: languages = regex_language.findall(languages.lower())
elif not languages or languages[0] is None:
languages = [] languages = []
if len(languages) == 1 and isinstance(languages[0], (str, unicode)):
languages = languages[0]
if languages: if languages:
if isinstance(languages, (str, unicode)):
parts = languages.split(';')
languages = []
for al in parts:
languages.extend(al.split(','))
possible_languages = self.get_possible_languages()
for lang in languages: for lang in languages:
match_language = regex_language.match(lang.strip().lower()) if lang+'.py' in self.filenames:
if match_language: language = lang
match_language = tuple(part langfile = language+'.py'
for part in match_language.groups() break
if part) elif len(lang)>5 and lang[:5]+'.py' in self.filenames:
language = lang_sampling(match_language, language = lang[:5]
self.current_languages) langfile = language+'.py'
if language: break
break elif len(lang)>2 and lang[:2]+'.py' in self.filenames:
language = lang_sampling(match_language, possible_languages) language = lang[:2]
if language: langfile = language+'.py'
self.language_file = ospath.join(self.folder, break
'languages', else:
language + '.py') if 'default.py' in self.filenames:
if ospath.exists(self.language_file): language = DEFAULT_ACCEPT_LANGUAGE
self.t = read_dict(self.language_file) langfile = 'default.py'
self.cache = tcache.setdefault(self.language_file, else:
({},allocate_lock())) language = DEFAULT_ACCEPT_LANGUAGE
self.set_plural(language) langfile = None
self.accepted_language = language if languages and langfile:
return languages self.language_file = ospath.join(self.langpath,langfile)
self.accepted_language = language or self.current_languages[0] self.t = read_dict(self.language_file)
self.language_file = self.default_language_file self.cache = tcache.setdefault(self.language_file,
self.cache = tcache[self.language_file] ({},allocate_lock()))
self.t = self.default_t # self.set_plural(language)
self.set_plural(language or self.current_languages) self.accepted_language = language
else:
self.accepted_language = DEFAULT_ACCEPT_LANGUAGE
self.language_file = None
self.cache = tcache[None]
self.t = {}
# self.set_plural(DEFAULT_ACCEPT_LANGUAGE)
return languages return languages
def __call__(self, message, symbols={}, language=None, lazy=None): def __call__(self, message, symbols={}, language=None, lazy=None):
@@ -758,11 +747,10 @@ class translator(object):
else: else:
# this allows markmin syntax in translations # this allows markmin syntax in translations
tokens = [message] tokens = [message]
self.t[key] = mt = self.default_t.get(key, tokens[0]) self.t[key] = mt = key
if (self.language_file != self.default_language_file and if self.language_file and not is_gae:
not settings.global_settings.web2py_runtime_gae):
write_dict(self.language_file, self.t) write_dict(self.language_file, self.t)
return regex_backslash.sub(lambda m: m.group(1).translate(ttab_in), mt) return regex_backslash.sub(lambda m: m.group(1).translate(ttab_in), mt)
def params_substitution(self, message, symbols): def params_substitution(self, message, symbols):
""" """
@@ -940,3 +928,5 @@ if __name__ == '__main__':
+1 -3
View File
@@ -1399,8 +1399,7 @@ class Auth(object):
elif isinstance(signature,self.db.Table): elif isinstance(signature,self.db.Table):
signature_list = [signature] signature_list = [signature]
else: else:
signature_list = signature signature_list = signature
lazy_tables, db._lazy_tables = db._lazy_tables, False
is_not_empty = IS_NOT_EMPTY(error_message=self.messages.is_empty) is_not_empty = IS_NOT_EMPTY(error_message=self.messages.is_empty)
is_crypted = CRYPT(key=settings.hmac_key, is_crypted = CRYPT(key=settings.hmac_key,
min_length=settings.password_min_length) min_length=settings.password_min_length)
@@ -1603,7 +1602,6 @@ class Auth(object):
actions=actions, actions=actions,
maps=maps) maps=maps)
def log_event(self, description, vars=None, origin='auth'): def log_event(self, description, vars=None, origin='auth'):
""" """
usage: usage: