2010-01-26 74 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

相關問題