Импорт по имени файла / модуля в GAE - PullRequest
2 голосов
/ 26 января 2010

Я пытаюсь создать простой модуль локализации, который принимает имя ключа и возвращает локализованную строку на основе заданного языка. Язык является одной из констант и отображается в файл Python, который содержит таблицу строк. Я хочу сделать это динамически во время выполнения. Ниже мой подход, но GAE не поддерживает модуль Imp. Есть ли альтернативный способ сделать это?

import logging
import imp

import localizable

LANGUAGE_EN = "en"
LANGUAGE_JP = "ja"

class Localizer(object):
    """
    Returns a localized string corresponding to unique keys
    """
    @classmethod
    def localize(cls, language = LANGUAGE_EN, key = None):
        user_language = imp.load_source("localizable.%s" % language, "/")
        if (user_language):
            return user_language.Locale.localize(key)
        else:
            logging.error("Localizable file was not found")
            return ""

Я помещаю языковые файлы в localizable / en.py и т. Д.

1 Ответ

2 голосов
/ 26 января 2010

Альтернативой модулю imp, который (я считаю) должен быть доступен в GAE, является __import__().Это фактически то, что оператор import вызывает для фактического импорта.

user_language = getattr(__import__('localizable.%s' % language), language)

или

user_language __import__('localizable.%s' % language, {}, globals(), [''])

(передача непустого четвертого аргумента __import__ заставляетвернуть самый правый модуль в первом аргументе вместо самого левого. Он немного хакерский, поэтому люди предпочитают первое решение второму.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...