Django i18n:如何翻译CSS内容?

6

有以下css部分:

.introduction:before { content: '谁会以优雅的方式翻译我?'; }

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

  1. 收集所有具有内容的css并与Django模板一起发送。
  2. 在模板中生成i18n敏感的css名称,以选择不同的预翻译的css内容。

如果有新的可能解决方案,我们将不胜感激,谢谢。


将每种语言的翻译放在不同的文件中,并根据会话中设置的语言加载。 - karthikr
@karthikr 不错,如果 CSS 内容太多的话,把解决方案 2 改成你的解决方案是值得的。 - IPX
3个回答

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 %}

谢谢!这比直接在模板中混合CSS要好。 - IPX

3
我认为这是不可能的。如果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 }}">
....

谢谢Goin,这是我能想到的唯一两种方法,但它们都不够好。第二种方法引入了需要翻译或编辑的新文件,而不仅仅是.po文件。 - IPX
哦,也许我的问题没有表达清楚?我更多地是在寻求新的解决方案,而不是对这两个解决方案进行详细的解释。但无论如何,谢谢你,我同意你写的西班牙语内容。 - IPX
这次我可以用西班牙语说出我想要的东西,真的是 :-) - Goin

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 国际化了,你可能已经有这个功能了,并且只需最少的代码即可翻译 CSS 字符串。这种解决方案显然不适用于大量使用 CSS 内容的情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接