在GAE中按文件/模块名称导入

时间:2010-01-26 11:45:05

标签: python google-app-engine

我正在尝试创建一个简单的本地化模块,该模块采用密钥名称并根据给定的语言返回本地化字符串。该语言是常量之一,并映射到包含字符串表的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 个答案:

答案 0 :(得分:2)

(我相信)应该在GAE中提供的imp模块的替代方案是__import__()。事实上,'import'语句要求进行实际导入。

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

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

(将非空第四个参数传递给__import__会导致它返回第一个参数中最右边的模块,而不是最左边的模块。它有点hacky,所以人们倾向于选择第一个参数解决方案超过秒。)