From 25168263d244eb7912a3f2fe6eb3dc8061eb4266 Mon Sep 17 00:00:00 2001 From: Christopher Lambacher Date: Sat, 12 Feb 2011 14:13:43 -0500 Subject: Separate making Localizer from getting cached one --- pyramid/i18n.py | 50 +++++++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/pyramid/i18n.py b/pyramid/i18n.py index ee4a693da..2ec0f2f78 100644 --- a/pyramid/i18n.py +++ b/pyramid/i18n.py @@ -145,6 +145,31 @@ def get_locale_name(request): request.locale_name = locale_name return locale_name +def make_localizer(current_locale_name, registry): + translations = Translations() + translations._catalog = {} + tdirs = registry.queryUtility(ITranslationDirectories, default=[]) + for tdir in tdirs: + locale_dirs = [ (lname, os.path.join(tdir, lname)) for lname in + os.listdir(tdir) ] + for locale_name, locale_dir in locale_dirs: + if locale_name != current_locale_name: + continue + messages_dir = os.path.join(locale_dir, 'LC_MESSAGES') + if not os.path.isdir(os.path.realpath(messages_dir)): + continue + for mofile in os.listdir(messages_dir): + mopath = os.path.realpath(os.path.join(messages_dir, + mofile)) + if mofile.endswith('.mo') and os.path.isfile(mopath): + mofp = open(mopath, 'rb') + domain = mofile[:-3] + dtrans = Translations(mofp, domain) + translations.add(dtrans) + + return Localizer(locale_name=current_locale_name, + translations=translations) + def get_localizer(request): """ Retrieve a :class:`pyramid.i18n.Localizer` object corresponding to the current request's locale name. """ @@ -162,29 +187,8 @@ def get_localizer(request): if localizer is None: # no localizer utility registered yet - translations = Translations() - translations._catalog = {} - tdirs = registry.queryUtility(ITranslationDirectories, default=[]) - for tdir in tdirs: - locale_dirs = [ (lname, os.path.join(tdir, lname)) for lname in - os.listdir(tdir) ] - for locale_name, locale_dir in locale_dirs: - if locale_name != current_locale_name: - continue - messages_dir = os.path.join(locale_dir, 'LC_MESSAGES') - if not os.path.isdir(os.path.realpath(messages_dir)): - continue - for mofile in os.listdir(messages_dir): - mopath = os.path.realpath(os.path.join(messages_dir, - mofile)) - if mofile.endswith('.mo') and os.path.isfile(mopath): - mofp = open(mopath, 'rb') - domain = mofile[:-3] - dtrans = Translations(mofp, domain) - translations.add(dtrans) - - localizer = Localizer(locale_name=current_locale_name, - translations=translations) + localizer = make_localizer(current_locale_name, registry) + registry.registerUtility(localizer, ILocalizer, name=current_locale_name) request.localizer = localizer -- cgit v1.2.3