minor cleanup in languages

This commit is contained in:
mdipierro
2012-07-12 15:13:49 -05:00
parent 4b8e525003
commit 5b7ecc5fb2
2 changed files with 36 additions and 32 deletions
+1 -1
View File
@@ -1 +1 @@
Version 2.00.0 (2012-07-12 15:09:16) dev Version 2.00.0 (2012-07-12 15:13:46) dev
+35 -31
View File
@@ -192,7 +192,9 @@ def read_possible_languages(path):
lambda: read_possible_languages_aux(lang_path)) lambda: read_possible_languages_aux(lang_path))
def utf8_repr(s): def utf8_repr(s):
r''' # note that we use raw strings to avoid having to use double back slashes below r"""
# note that we use raw strings to avoid having to use double back slashes below
utf8_repr() works same as repr() when processing ascii string utf8_repr() works same as repr() when processing ascii string
>>> utf8_repr('abc') == utf8_repr("abc") == repr('abc') == repr("abc") == "'abc'" >>> utf8_repr('abc') == utf8_repr("abc") == repr('abc') == repr("abc") == "'abc'"
@@ -217,7 +219,7 @@ def utf8_repr(s):
True True
>>> utf8_repr('中\r\n文') == "'中\\r\\n文'" != repr('中\r\n文') # Test for \r, \n >>> utf8_repr('中\r\n文') == "'中\\r\\n文'" != repr('中\r\n文') # Test for \r, \n
True True
''' """
if (s.find("'") >= 0) and (s.find('"') < 0): # only single quote exists if (s.find("'") >= 0) and (s.find('"') < 0): # only single quote exists
s = ''.join(['"', s, '"']) # s = ''.join(['"', s.replace('"','\\"'), '"']) s = ''.join(['"', s, '"']) # s = ''.join(['"', s.replace('"','\\"'), '"'])
else: else:
@@ -312,8 +314,6 @@ class translator(object):
this class is instantiated by gluon.compileapp.build_environment this class is instantiated by gluon.compileapp.build_environment
as the T object as the T object
::
T.force(None) # turns off translation T.force(None) # turns off translation
T.force('fr, it') # forces web2py to translate using fr.py or it.py T.force('fr, it') # forces web2py to translate using fr.py or it.py
@@ -340,7 +340,6 @@ class translator(object):
self.default_language_file = os.path.join(self.folder,'languages','') self.default_language_file = os.path.join(self.folder,'languages','')
self.default_t = {} self.default_t = {}
self.cache = tcache.setdefault(self.default_language_file, ({}, allocate_lock())) self.cache = tcache.setdefault(self.default_language_file, ({}, allocate_lock()))
self.mcache = tcache.setdefault('@'+self.default_language_file, ({}, allocate_lock()))
self.current_languages = [self.get_possible_languages_info('default')[0]] self.current_languages = [self.get_possible_languages_info('default')[0]]
self.accepted_language = None # filed in self.force() self.accepted_language = None # filed in self.force()
self.language_file = None # filed in self.force() self.language_file = None # filed in self.force()
@@ -350,7 +349,8 @@ class translator(object):
self.otherTs = {} self.otherTs = {}
def get_possible_languages_info(self, lang=None): def get_possible_languages_info(self, lang=None):
""" return info for selected language or dictionary with all """
returns info for selected language or dictionary with all
possible languages info from APP/languages/*.py possible languages info from APP/languages/*.py
args: args:
*lang* (str): language *lang* (str): language
@@ -376,9 +376,10 @@ class translator(object):
| set(self.current_languages)) | set(self.current_languages))
def set_current_languages(self, *languages): def set_current_languages(self, *languages):
""" set current AKA "default" languages """
setting one of this languages makes force() function set current AKA "default" languages
turn translation off to use default language setting one of this languages makes force() function
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]
@@ -386,15 +387,17 @@ class translator(object):
self.force(self.http_accept_language) self.force(self.http_accept_language)
def force(self, *languages): def force(self, *languages):
""" select language(s) for translation """
if a list of languages is passed as a parameter, select language(s) for translation
first language from this list that matches the ones
from the possible_languages dictionary will be
selected
default language will be selected if none if a list of languages is passed as a parameter,
of them matches possible_languages. first language from this list that matches the ones
from the possible_languages dictionary will be
selected
default language will be selected if none
of them matches possible_languages.
""" """
global tcache global tcache
if not languages or languages[0] is None: if not languages or languages[0] is None:
@@ -429,20 +432,18 @@ class translator(object):
if os.path.exists(self.language_file): if os.path.exists(self.language_file):
self.t = read_dict(self.language_file) self.t = read_dict(self.language_file)
self.accepted_language = language self.accepted_language = language
self.cache = tcache.setdefault(self.language_file, ({},allocate_lock())) self.cache = tcache.setdefault(
self.mcache = tcache.setdefault('@'+self.language_file, ({},allocate_lock())) self.language_file, ({},allocate_lock()))
return languages return languages
self.language_file = self.default_language_file self.language_file = self.default_language_file
self.cache = tcache[self.language_file] self.cache = tcache[self.language_file]
self.mcache = tcache['@'+self.language_file]
self.t = self.default_t self.t = self.default_t
return languages return languages
def __call__(self, message, symbols={}, language=None, lazy=None, filter=None): def __call__(self, message, symbols={}, language=None, lazy=None, filter=None):
""" get cached translated plain text message with inserted """
parameters(symbols) get cached translated plain text message with inserted parameters(symbols)
if lazy==True lazyT object is returned
if lazy==True lazyT object is returned
""" """
lazy = lazy or self.lazy lazy = lazy or self.lazy
if not language and lazy: if not language and lazy:
@@ -485,14 +486,17 @@ class translator(object):
return mt return mt
def params_substitution(self, message, symbols): def params_substitution(self, message, symbols):
""" substitute parameters from symbols into message using %. """
also parse %%{} placeholders for plural-forms processing. substitute parameters from symbols into message using %.
returns: string with parameters also parse %%{} placeholders for plural-forms processing.
returns: string with parameters
""" """
return message % symbols return message % symbols
def translate(self, message, symbols, filter=None): def translate(self, message, symbols, filter=None):
""" get cached translated message with inserted parameters(symbols) """ """
get cached translated message with inserted parameters(symbols)
"""
message = get_from_cache(self.cache, (message, filter), message = get_from_cache(self.cache, (message, filter),
lambda: self.get_t(message,filter)) lambda: self.get_t(message,filter))
if symbols or symbols == 0 or symbols == "": if symbols or symbols == 0 or symbols == "":
@@ -530,11 +534,11 @@ def findT(path, language='en'):
except: except:
pass pass
if not '!langcode!' in sentences: if not '!langcode!' in sentences:
sentences['!langcode!'] = ('en' if language in ('default', 'en') sentences['!langcode!'] = (
else language) 'en' if language in ('default', 'en') else language)
if not '!langname!' in sentences: if not '!langname!' in sentences:
sentences['!langname!'] = ('English' if language in ('default', 'en') sentences['!langname!'] = (
else sentences['!langcode!']) 'English' if language in ('default', 'en') else sentences['!langcode!'])
write_dict(filename, sentences) write_dict(filename, sentences)
### important to allow safe session.flash=T(....) ### important to allow safe session.flash=T(....)