Django 如何处理需要显示翻译版本的文本图像?
处理i18n和文本图像的最佳方式是什么 我有很多图像中都有文本,需要换成每种语言的正确版本。i、 我有一个英文文本的“header.gif”,然后是另一个法文文本的“header.gif” 最简单的说法是什么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标记,检查请求的图像是否在当前语言中可用,如果可用,则更
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作为图像源。