处理i18n和文本图像的最佳方法是什么?
我有许多图片,其中包含文字,需要换成每种语言的正确版本。即我有一个带有英文文本的“header.gif”,然后是另一个带有法文文本的“header.gif”。
最简单的说法是什么
if my image exists in the current language:
show the image
else
show the english image
我正在考虑一个可以检查每个img标签的中间件,检查所请求的图像是否以当前语言提供,如果是,请更改img标签以显示它,如果没有,则不要。
我的另一个想法是简单地将图像引用括在{% trans ... %}
标记中并更改.po文件中的网址
或其他方式?
答案 0 :(得分: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)
定义一些根据语言设置渲染图像的功能。
答案 1 :(得分: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
答案 2 :(得分:1)
您还可以在媒体目录中创建子文件夹
/静态/ IMG / es_ES /静态/ IMG /的en_EN
使用{%media_url%}自定义模板标记,根据请求的语言发送正确的图像。