2010-01-26 38 views
2

我想要制作一个简单的本地化模块,它需要一个键名并根据给定的语言返回本地化的字符串。该语言是常量之一,并映射到包含字符串表的python文件。我想在运行时动态地执行此操作。以下是我的方法,但GAE不支持imp模块。有没有其他方法可以做到这一点?通过GAE中的文件/模块名称导入

 
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 "" 

我把语言文件的本地化/ en.py等

回答

2

的替代小鬼模块(我认为)应该在GAE提供的__import__()。实际上,'import'声明要求进行实际的导入。

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

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

(通过非空的第四个参数__import__使其返回第一个参数最右边的模块,而不是最左边的。这是一个有点哈克,所以人们倾向于选择第一种解决方案。)

+0

第一个解决方案完美地工作,谢谢。我会尽快upvote ..(显然需要15代表) – Morrowless 2010-01-26 12:12:33

相关问题