6

有以下css部分:

.introduction:before { content: '谁来优雅地翻译我?'; }

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

  1. 收集所有这些带有内容的 css 并将它们一起发送到 Django 模板中。
  2. 在模板中生成 i18n 敏感的 css 名称以选择不同的预翻译 css 内容。

任何新的可能的解决方案将不胜感激,谢谢。

4

3 回答 3

4

我将提供需要通过 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 %}
于 2012-09-25T18:09:22.470 回答
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 }}">
....
于 2012-09-25T15:46:38.873 回答
0

对于希望避免以不同方式提供 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 内容。

于 2016-10-18T11:29:49.993 回答