【发布时间】:2012-06-06 10:48:47
【问题描述】:
如何根据语言从静态文件夹中实现不同的图像? 例如,当访问主站点时,布局将以英语加载,但当更改为日语时,附加到布局的徽标和图像将根据请求的语言而变化。请帮忙.....
【问题讨论】:
标签: python django image internationalization
如何根据语言从静态文件夹中实现不同的图像? 例如,当访问主站点时,布局将以英语加载,但当更改为日语时,附加到布局的徽标和图像将根据请求的语言而变化。请帮忙.....
【问题讨论】:
标签: python django image internationalization
您可以创建 iso 文件夹,例如:
/static/
/img/
/fr/
/en/
/us/
并创建一个模板标记,该标记根据区域设置返回语言 iso 前缀,例如:
{% static "img"|append_i18n_prefix %}
【讨论】:
在您的模板中:
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
然后是徽标等:
<img src="{{MEDIA_URL}}{{ LANGUAGE_CODE }}/logo.png" alt="" />
【讨论】:
context_processors 选项中添加 django.template.context_processors.media。” 2)就我而言,我正在寻找{{ STATIC_URL }}。
您可以将language 参数传递给您的页面模板,并将其用作媒体文件 URL 的一部分。
这将要求您将所有媒体文件(例如英语)保存在文件夹 SITE_MEDIA/english 中,而其他(例如日语图像)可以从 SITE_MEDIA/japanese 获得。
在您的页面模板中,您可以使用{{MEDIA_URL}}{{language}}/my-image.jpg...
【讨论】:
.css文件...
context_processors 选项中添加 django.template.context_processors.media。” 2)就我而言,我正在寻找{{ STATIC_URL }}。
我推荐的方法是使用您的基本模板(例如 page.html),然后针对差异进行扩展(即 page-fr.html)
如果图像需要不同,您有一个模板块,然后在 page-fr.html 中您可以在该块中放入不同的图像。
这样,如果我们有图像,我们支持不同的语言,但如果我们没有翻译的图像,它仍然使用普通模板。您甚至可以为不同的语言提供不同的文本/布局(如果您愿意或需要,某些语言的文本非常长,可能会改变标签的布局)。
然后在视图中我们让它尝试加载 page-[locale].html 如果它存在(我们可以让它回退到 page-[lang].html 对于像 fr-ca 这样的东西),然后最后回退到page.html(如果存在)。
模板页面.html:
{% blocktrans %}Some text{% endblocktrans %}
{% block image_one %}<img src='{% static "image_one.png" %}'>{% endblock %}
模板页面-fr.html:
{% extends 'page.html' %}
{% block image_one %}<img src='{% static "image_one-fr.png" %}'>{% endblock %}
那么在你看来:
context = {'data': data}
templates = ['page-fr.html', 'page.html']
return render(request, templates, context)
您可以将 page-fr.html 替换为一些查找当前语言并执行此操作的代码。你甚至可以制作一个简单的模板加载器来做到这一点(如果 django 应用程序没有,我不会感到惊讶)
这样做的好处是:
我真的建议不要在这里使用其他答案,将字符串连接起来以生成最终内容。您正在为静态内容创建动态 url。如果你没有它,创建一个可能 404 的 url 的风险很大。此外,加入字符串不会让您访问静态中间件(因此没有长期缓存的散列 url)。您可以在加入后通过静态标签运行最终字符串,但如果该静态标签不存在,则会出现更糟糕的服务器错误。
【讨论】:
使用get_static_prefix 与 Mikael 的回答略有不同:
{% load i18n static %}
{% get_current_language as LANGUAGE_CODE %}
<img src="{% get_static_prefix %}path/to/image_{{ LANGUAGE_CODE }}.svg">
【讨论】: