2010-01-26 4 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__ заставляет его вернуть самый правый модуль в первом аргументе, а самый левый. Это немного Hacky , поэтому люди предпочитают первое решение за второе.)

+0

Первое решение отлично работает, спасибо. Я буду продвигать, как только смогу .. (видимо, требуется 15 человек) – Morrowless

Смежные вопросы