如何根据语言从静态文件夹中实现不同的图像? 例如,在访问主站点时,布局将以英语加载,但是当更改为日语时,附加到布局的徽标和图像将根据所请求的语言进行更改。请帮助.....
答案 0 :(得分:4)
您可以将language
参数传递给您的网页模板,并将其用作媒体文件网址的一部分。
这将要求您托管所有媒体文件,例如文件夹SITE_MEDIA/english
中的英文,而其他文件,例如日文图片可以从SITE_MEDIA/japanese
获得。
在您的网页模板中,您可以使用{{MEDIA_URL}}{{language}}/my-image.jpg
...
答案 1 :(得分:4)
您可以创建iso文件夹,如:
/static/
/img/
/fr/
/en/
/us/
并创建一个模板标记,该标记根据区域设置返回语言iso前缀,如:
{% static "img"|append_i18n_prefix %}
答案 2 :(得分:4)
在你的模板中:
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
然后是徽标等:
<img src="{{MEDIA_URL}}{{ LANGUAGE_CODE }}/logo.png" alt="" />
答案 3 :(得分:0)
我建议的方法是使用您的基本模板(例如,page.html),然后针对差异进行扩展(即page-fr.html)
需要不同图像的地方有一个模板块,然后在page-fr.html中可以在该块中放入另一个图像。
这样,如果我们有图片,我们就支持不同的语言,但是如果我们没有翻译的图片,它仍然使用普通模板。您甚至可以为不同的语言提供不同的文本/布局(如果需要,某些语言的文本非常长,可以更改标签的布局)。
然后在视图中尝试加载page- [locale] .html(如果存在,我们可以将其回退到page- [lang] .html,例如fr-ca),然后最终回退至page.html(如果存在)。
模板page.html:
{% blocktrans %}Some text{% endblocktrans %}
{% block image_one %}<img src='{% static "image_one.png" %}'>{% endblock %}
模板page-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,创建URL可能会有404的巨大风险。此外,连接字符串也不能使您访问静态中间件(因此不再需要长时间缓存的哈希URL)。加入后,您可以通过static标记运行最后一个字符串,但是如果该静态不存在,则会出现服务器错误,这更糟。
答案 4 :(得分:0)
Mikael 的答案使用 get_static_prefix
略有变化:
{% load i18n static %}
{% get_current_language as LANGUAGE_CODE %}
<img src="{% get_static_prefix %}path/to/image_{{ LANGUAGE_CODE }}.svg">