2010-07-29 6 views
5

Uso gettext para traducir mi sitio web.¿Cómo se usa gettext cuando se tiene un enlace al texto traducido?

Sería bueno tener un enlace en el texto traducido, pero no quiero escribir etiquetas html en los archivos gettext porque estas traducciones pueden usarse en otros lugares.

Podría crear texto para el sitio web solamente (con enlaces) y texto para todos los propósitos.
Tendré que mantener 2 versiones. :-(

También podría escribir un analizador personalizado para insertar enlaces en el texto, pero parece una exageración y estoy affraid de The Danger of Naïveté

Para los que tenían el mismo problema, ¿cómo se maneja eso?

Respuesta

3

Solía ​​poner enlaces como parámetros. La mayoría de las veces, el <a> -tag completo es un parámetro. Me gusta Please see %s this link %s for more information. El primer% s se pasa la etiqueta de enlace, y el segundo se pasa la etiqueta de cierre </a>.

Ahora uso solo frases completas como enlaces cuando se debe traducir un texto de enlace. Así que tenemos texto como 'Por favor, mira este enlace para más información', hazlo traducir y pon las etiquetas de enlace a su alrededor. Es mucho más fácil administrar las traducciones, y no tiene un traductor confundido, o necesita dedicarle tiempo a explicar lo que está tratando de hacer.

1

Honestamente, no me preocuparía demasiado el uso de HTML básico (o use bbCode, textile, markdown, etc.) directamente en sus archivos de traducción. Las URL pueden parecer ser el único problema en este momento, pero ¿qué pasa con otras marcas de texto? ?

Sin mencionar que la URL 's sí podrían potencialmente ser diferente según el idioma.

No obstante, estoy de acuerdo en que los archivos de traducción tienen sus problemas.

1

Para complementar la respuesta seleccionada, aquí es un ejemplo práctico:

printf(__('Please see %s this link %s for more information.', 'text-domain'), '<a href="http://yolo.io" title="yolo">', '</a>'); 
1

Otra solución aquí: https://zargony.com/2008/01/24/links-in-gettext-translated-strings.

Sugiere usar {curly brackets} para los enlaces. Como por ejemplo:

_("Please click {here} or {here}") 

Y luego escribir su propia función linkify que reemplaza las cosas entre llaves con los parámetros dados.

linkify(
    _("Please click {here} or {here}"), 
    "</a>", 
    "<a href='www.example1.com'>", 
    "<a href='www.example2.com'>" 
) 

Definición en PHP:

function linkify($string, $closingTag) { 
    $arguments = func_get_args(); 
    return preg_replace_callback(
     '/{(.*?)}/', // Ungreedy (*?) 
     function($matches) use ($arguments, $closingTag) { 
      static $i = 1; 
      $i++; 
      return $arguments[$i] . $matches[1] . $closingTag; 
     }, 
     $string 
    ); 
} 

PS: También se puede sustituir fácilmente el {} para [], ya que me he dado cuenta de que en Poedit estas llaves dan advertencias a los traductores y recomiendan ellos no deben ser traducidos.

Cuestiones relacionadas