有以下css部分:
.introduction:before { content: '谁来优雅地翻译我?'; }
可能没有简单的方法来处理 css 文件的 i18n,两种可能的选择:
- 收集所有这些带有内容的 css 并将它们一起发送到 Django 模板中。
- 在模板中生成 i18n 敏感的 css 名称以选择不同的预翻译 css 内容。
任何新的可能的解决方案将不胜感激,谢谢。
有以下css部分:
.introduction:before { content: '谁来优雅地翻译我?'; }
可能没有简单的方法来处理 css 文件的 i18n,两种可能的选择:
任何新的可能的解决方案将不胜感激,谢谢。
我将提供需要通过 Django 翻译的 css 文件,并按语言缓存它以减轻性能损失。
网址.py
url(r'^static/css/translated.css$', TemplateView.as_view(template_name='translated.css')),
翻译的.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 %}
我认为这是不可能的。如果 css 是模板(如 html 模板),则只有您可以翻译它。但这是一个糟糕的解决方案....效率
但是如果你在 body 中有一个类语言,你可以有这样的东西:
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 翻译支持。
保留原始 CSS 作为备份。然后通过将翻译后的样式附加到页面头部来使用 javascript 覆盖内容:
var trans_str = gettext("some content");
$('<style>.classWithContent:before{content:"' + trans_str + '" !important}' +
'</style>').appendTo('head');
这是使用 JQuery 的版本,但您可以轻松地用纯 JavaScript 重写它。添加尽可能多的翻译字符串并覆盖尽可能多的样式。
这样你就可以利用你可能已经拥有的django 国际化,并用最少的代码翻译 CSS 字符串。这种解决方案显然不适用于大量使用 CSS 内容。