2010-11-14 23 views
1

處理國際化和文字圖像的最佳方法是什麼?我如何處理需要顯示翻譯版本的文本圖像?

我有一些圖像中有文字需要換出適合每種語言的正確版本。即我有一個帶有英文文本的「header.gif」,然後是帶有法文文本的另一個「header.gif」。

什麼說

if my image exists in the current language: 
    show the image 
else 
    show the english image 

我想一箇中間件,可以檢查每一個img標籤,檢查所請求的圖像是在當前的語言版本,如果是,請更改img標籤的最簡單方法展示它,如果沒有,不要。

我的另一個想法是簡單地封裝在{% trans ... %}標籤圖像參考,並更改URL的.po文件

或另一種方式?

回答

1

我創建了一箇中間件來解析html,然後呈現它來檢查我的媒體文件夾中locale文件夾中的圖像。如果它們存在,然後更改SRC標籤,如果沒有,把它作爲是:

def process_response(self, request, response): 
    # check if we should try this here 
    if self.inject_media(request, response): 
     media_url = settings.MEDIA_URL 
     lang = translation.get_language_from_request(request) 
     media_root = settings.MEDIA_ROOT 
     string = smart_unicode(response.content) 
     no_case = string.lower() 
     find = "%s[a-z0-9\.\_\/]+" % media_url 
     pattern = re.compile(find) 
     matches = pattern.findall(no_case) 
     base_path = "%slocale/%s/" % (media_root, lang) 
     for m in matches: 
      p = m.replace(media_url, base_path) 
      if os.path.isfile(p): 
       url = m.replace(media_url, "%slocale/%s/" % (media_url, lang))   
       string = string.replace(m, url) 

     response.content = string 
    return response 
1

您可以嘗試通過定義圖像的某些型號解決這個:

class ImageTitle(models.Model): 
    title = models.CharField('Title', max_length = 100) 

class Image(models.Model): 
    title = models.ForeignKey(ImageTitle) 
    image = models.ImageField('Image') 
    language = models.CharField('Language', max_length = 100) 

定義一些功能根據語言設置渲染圖像。

+0

但我不希望我的所有圖像都以模型的形式存儲 - 比如標題,按鈕等... – 2010-11-15 12:34:41

+0

然後,您可以按照某種命名過程對自己喜歡的標題保存「header_lang.jpg」,然後調用frm模板使用/ [url]/header _ {{language}}。jpg作爲圖像源。 – crodjer 2010-11-15 16:38:09

1

您也可以讓子文件夾在你的媒體目錄

/靜態/ IMG/es_ES /靜態/ IMG/en_EN

並根據請求的語言使用{%media_url%}自定義模板標籤發送正確的圖像。

相關問題