2012-09-25 32 views
6

tener la siguiente sección css:Django i18n: ¿Cómo traducir el contenido CSS?

.introduction: { antes de contenido: '¿Quién me va a traducir en una forma elegante?'; }

Probablemente no hay manera fácil de manejar para i18n archivo CSS, dos opciones posibles:

  1. se reúnen todos estos css, que con el contenido y enviarlos juntos dentro de las plantillas de Django.
  2. generar i18n nombre css sensible en la plantilla para elegir diferentes contenidos css pretraducidos.

Cualquier nuevas soluciones posibles serán agradecidas, gracias.

+0

Tenga traducciones para cada idioma en un archivo diferente y cárguelo según el idioma establecido en la sesión – karthikr

+0

@karthikr Agradable, si el contenido de CSS es demasiado, vale la pena cambiar la solución 2 a su solución. – Eytoss

Respuesta

3

Creo que esto es imposible. Solo usted puede traducirlo si el css es una plantilla (como la plantilla html). Pero esto es una mala solución .... eficiencia

Pero si usted tiene un lenguaje de clase en el cuerpo, por ejemplo, puede tener algo como esto:

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 :-)'; } 

Y en su base.html algo así como esto:

.... 
<body class="language_{{ LANGUAGE_CODE }}"> 
.... 
+0

Gracias Goin, estas son las únicas dos formas en que se me ocurre pero ninguna de ellas es lo suficientemente buena. La segunda forma introduce nuevos archivos para ser traducidos o editados que no sean archivos .po. – Eytoss

+0

Oh, tal vez mi pregunta no es lo suficientemente clara? Estaba pidiendo más soluciones nuevas que una explicación detallada para esas dos soluciones.Pero gracias de todos modos, y estoy de acuerdo con el contenido en español que escribió. – Eytoss

+0

Por una vez puedo decir algo en español que quería algo que realmente era :-) – Goin

4

me serviría el archivo css que hay que traducir a través de Django y almacenar en caché por cada idioma para mitigar el impacto en el rendimiento.

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

¡Gracias! Esto es mejor que mezclar css directamente en plantillas. – Eytoss

0

Otra posible solución, para las personas que quieren evitar servir los archivos CSS diferente o la duplicación de líneas o archivos CSS, habría que hacer uso de django javascript translation support.

Deje el CSS original en su lugar como copia de seguridad. A continuación, reemplazar el contenido utilizando javascript añadiendo el estilo traducida a la cabecera de la página:

var trans_str = gettext("some content"); 
$('<style>.classWithContent:before{content:"' + trans_str + '" !important}' + 
    '</style>').appendTo('head'); 

Ésta es la versión utilizando jQuery pero se puede volver a escribir en javascript puro fácilmente. Agregue tantas cadenas traducidas y anule tantos estilos como desee.

De esta manera usted hace uso de django internationalization que probablemente ya tenga en su lugar y traduzca cadenas de CSS con un código mínimo. Evidentemente, esta solución no es aplicable para el uso intensivo de contenido CSS.