Django i18n:如何翻译css内容?

时间:2012-09-25 15:41:21

标签: css django internationalization

有以下css部分:

  

。介绍:之前{      内容:'谁将以优雅的方式翻译我?';   }

可能没有简单的方法来处理i18n for css文件,有两种可能的选择:

  1. 收集所有带有内容的css并将它们一起发送到Django模板中。
  2. 在模板中生成i18n敏感css名称,以选择不同的预翻译css内容。
  3. 任何新的可能解决方案将不胜感激,谢谢。

3 个答案:

答案 0 :(得分:4)

我会提供需要通过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 %}

答案 1 :(得分:3)

我认为这是不可能的。只有当css是模板(如html模板)时才能翻译它。但这是一个糟糕的解决方案......效率

但是,如果你的身体中有一种类语言,你可以这样:

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 }}">
....

答案 2 :(得分:0)

对于那些希望避免以不同方式提供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 internationalization并使用最少的代码翻译CSS字符串。这种解决方案显然不适用于大量使用CSS内容。