Django 如何处理需要显示翻译版本的文本图像?

Django 如何处理需要显示翻译版本的文本图像?,django,internationalization,Django,Internationalization,处理i18n和文本图像的最佳方式是什么 我有很多图像中都有文本,需要换成每种语言的正确版本。i、 我有一个英文文本的“header.gif”,然后是另一个法文文本的“header.gif” 最简单的说法是什么 if my image exists in the current language: show the image else show the english image 我正在考虑一个中间件,它可以检查每个img标记,检查请求的图像是否在当前语言中可用,如果可用,则更

处理i18n和文本图像的最佳方式是什么

我有很多图像中都有文本,需要换成每种语言的正确版本。i、 我有一个英文文本的“header.gif”,然后是另一个法文文本的“header.gif”

最简单的说法是什么

if my image exists in the current language:
    show the image
else
    show the english image
我正在考虑一个中间件,它可以检查每个img标记,检查请求的图像是否在当前语言中可用,如果可用,则更改img标记以显示它,如果不可用,则不显示

我的另一个想法是简单地将图像引用包含在
{%trans…%}
标记中,并更改.po文件中的url


或者另一种方法?

您可以通过为图像定义一些模型来尝试解决此问题:

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) 

根据语言设置定义一些用于呈现图像的函数。

我创建了一个中间件,在呈现html之前对其进行解析,以检查媒体文件夹中
区域设置
文件夹中的图像。如果存在,则更改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

您还可以在媒体目录中创建子文件夹

/静态/图像/图像 /静态/img/en\U en


并根据所请求的语言使用{%media\u url%}自定义模板标记发送正确的图像。

然后您可以自己按照某种命名过程进行命名,例如对于header,您可以保留“header\u lang.jpg”,然后在调用frm模板时使用/[url]/header\u{{language}.jpg作为图像源。