2010-05-03 22 views
5

Quería localizar algunos textos en mi aplicación Zend Framework. Hay algunos textos como:Localización con etiquetas HTML

Hello, I'm <a href="test.php" title="Title-Attribute" rel="test">a sample text</a>, greetings to all of you! :)

Si no hay html en ella, es muy sencillo a localizate, pero con HTML en ella, ¿cómo debo hacerlo mejor?

+0

mismo tema se discute http://stackoverflow.com/questions/2566432/add-some-html-to-zend-forms/2567764#2567764 echa un vistazo a – user1400

Respuesta

4

Algunas herramientas de localización como Virtaal maneja las etiquetas XML (HTML) en un way que hace que sea fácil para el traductor de trabajar. La otra opción es simplificar la cadena presentada a los localizadores reemplazando la etiqueta con una variable de formato de cadena y haciendo que la cadena de formato sea localizable en lugar del resultado del formato. Por ejemplo (estoy adivinando sobre todo por el bien del ejemplo y no sé bien PHP):

printf(_("Hello, I'm %sa sample%s, greetings to all of you!"), '<a href="test.php" title="Title-Attribute" rel="test">', "</a>");

En la declaración anterior de la cadena que el localizador verá sólo es la que contiene la %s variables de formato (porque está envuelto en la función gettext _()). Esto, por supuesto, tiene el inconveniente de ser bastante confuso para un localizador si desconoce con qué se reemplazarán las variables, por lo que debe incluir un comentario de localización adecuado.

+2

Entendí que "Título-Atributo" tendrá que ser traducido también. – Gordon

+0

En ese caso, la respuesta de xtofl parece ser la mejor. Subido de nivel. La misma idea, sin embargo. :) – Walter

2

Debe localizar cualquier cadena que se encuentre en la interfaz de usuario. En esta situación, tiene una combinación de elementos de control/UI. Esto significa que el contenido del atributo title debe localizarse por separado.

En este caso, esto significa:

$guilink = "<a href='test.php' " 
      ."title='".gettext("Title-Attribute")."'" 
      ." rel='test'>" 
      .gettext("a sample text") 
      ."</a>"; 

$guistring = sprintf( 
     gettext("Hello, I'm %s, greetings to all of you! :)"), $guilink); 

Pero, como dice Gordon: no complicar en exceso.

1

Para los adaptadores de traducción no debería haber diferencia si la traducción contiene HTML o no. Si tiene cadenas cortas con HTML en línea, simplemente coloque la traducción junto con el HTML en el archivo fuente de su idioma, según sea necesario. Solo tiene que asegurarse de que la salida no se escape cuando hay HTML dentro de la cadena.


EDITAR Como xtofl señaló en los comentarios, teniendo HTML dentro del archivo de idioma no es una solución óptima, ya que los traductores podrían no estar familiarizados con el manejo de HTML. Si bien hay algo de verdad en eso, me parece que es poco útil. HTML no es ciencia de cohetes y para los pocos casos en que en línea pueden aparecer elementos HTML, puede proporcionarles una hoja de referencia. Los traductores profesionales deberían ser capaces de manejar eso. Otra preocupación sería si insertan contenido no deseado, p. enlaces (si está trabajando con traductores de la comunidad en lugar de profesionales). Pero como no mencionó ningún traductor, supongo que está haciendo la traducción usted mismo, en cuyo caso todo lo anterior es yagni. No es necesario que overcomplicate things.

+0

Llevando esto al límite, puede tener traductores tomar su completa el código fuente y elige los literales de las cadenas ... No me gusta eso, de verdad. Los traductores deben ignorar los detalles técnicos para completar el trabajo de manera eficiente. (¿Quién sabe si el atributo 'name' en la entrada de un formulario html debe traducirse a' nom', 'name',' gnorpx'?) – xtofl

+0

@xtofl Para el propósito del OP, lo anterior es un enfoque válido.No sabemos si el PO está trabajando con traductores. Si lo hace OP, los traductores pueden decirle, si pueden manejar HTML en línea. Recupere su propia respuesta, si cree que es una mejor solución. – Gordon

Cuestiones relacionadas