我正在尝试创建一个简单的本地化模块,该模块采用密钥名称并根据给定的语言返回本地化字符串。该语言是常量之一,并映射到包含字符串表的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等
中答案 0 :(得分:2)
(我相信)应该在GAE中提供的imp模块的替代方案是__import__()
。事实上,'import'语句要求进行实际导入。
user_language = getattr(__import__('localizable.%s' % language), language)
或
user_language __import__('localizable.%s' % language, {}, globals(), [''])
(将非空第四个参数传递给__import__
会导致它返回第一个参数中最右边的模块,而不是最左边的模块。它有点hacky,所以人们倾向于选择第一个参数解决方案超过秒。)