有以下css部分:
.introduction:before { content: '谁会以优雅的方式翻译我?'; }
在css文件中处理i18n可能没有简单的方法,有两种可能的选择:
- 收集所有具有内容的css并与Django模板一起发送。
- 在模板中生成i18n敏感的css名称,以选择不同的预翻译的css内容。
如果有新的可能解决方案,我们将不胜感激,谢谢。
有以下css部分:
.introduction:before { content: '谁会以优雅的方式翻译我?'; }
在css文件中处理i18n可能没有简单的方法,有两种可能的选择:
如果有新的可能解决方案,我们将不胜感激,谢谢。
我会通过Django提供需要翻译的CSS文件,并按语言缓存它,以减少性能损失。
urls.py
url(r'^static/css/translated.css$', TemplateView.as_view(template_name='translated.css')),
translated.css
{% load cache %}
{% cache 60*60*24 translated_css LANGUAGE_CODE %}
{# write css here, translate as a normal template #}
.introduction:before { content:
{% trans 'Who is going to translate me in a graceful way?' %}
; }
{% endcache %}
body.language_en .introduction:before { content: 'Who is going to translate me in a graceful way?'; }
body.language_es .introduction:before { content: 'El traductor de google es terrible :-)'; }
在您的 base.html 中,应该像这样:
....
<body class="language_{{ LANGUAGE_CODE }}">
....
对于想要避免不同方式提供CSS文件或重复CSS代码或文件的人,另一个可能的解决方案是利用 django javascript translation support。
保留原始CSS作为备份。然后通过将翻译后的样式添加到页面头部来使用JavaScript覆盖内容:
var trans_str = gettext("some content");
$('<style>.classWithContent:before{content:"' + trans_str + '" !important}' +
'</style>').appendTo('head');
这是使用 JQuery 的版本,但您可以轻松地用纯 JavaScript 重写它。添加尽可能多的翻译字符串并覆盖尽可能多的样式。
这样你就可以利用 Django 国际化了,你可能已经有这个功能了,并且只需最少的代码即可翻译 CSS 字符串。这种解决方案显然不适用于大量使用 CSS 内容的情况。