2012-05-26 36 views
9

¿Es posible usar algo como gettext para traducir un script R.? ¿Si es así, cómo? Si no, ¿qué otras opciones tengo?Traducción del script R con gettext

+0

¿Qué quiere decir con "translate"? – Subs

+0

Quiero decir que tengo cadenas escritas en inglés. Necesito marcarlos de alguna manera, extraer a un archivo separado, traducirlos al ruso. Y al ejecutar el script con un parámetro, mostraría los mensajes en inglés, y con otros, los rusos. Justo cuando gettext funciona :) – Shark

+1

Eche un vistazo a '? Gettext' – Andrie

Respuesta

10

Puede usar las funciones base :: gettext/ngettext, base :: bindtextdomain y tools :: xgettext2pot.
Por ejemplo:

myFunction <- function() 
{ 
    bindtextdomain("R-myProgram","/my/translation/dir") 
    gettext("Hello",domain="R-myProgram") 
} 

Entonces, suponiendo que esta función está dentro de un archivo cuya ruta es el uso "/my/dir/R/myfile.R": tools::xgettext2pot("/my/dir", "/my/translation/dir/pot/R-myProgram.pot") a continuación, utilizar msginit, msgfmt, etc., para crear una archivo .mo /my/translation/dir/fr/LC_MESSAGES/R-myProgram.mo. myFunction() ahora debería imprimir "Bonjour" en lugar de "Hello" si su configuración regional es francesa.

Un par de otros puntos:

  • Parece que xgettext2pot supone que su proyecto es un paquete de R estándar y sólo busca * .R archivos dentro de la R/subdirectorio.
  • El argumento domain parece que por defecto el espacio de nombres de la función de llamar gettext()
  • stop(), el mensaje(), advirtiendo() y packupStartupMessage() también son detectados por xgettext2pot. También hay una función gettextf() disponible como una variante similar a sprintf de gettext().
  • Dado que la utilidad xgettext estándar no parece ser compatible con la sintaxis R, y dado que uno tiene que usar tools :: xgettext2pot, algunas cosas se perderán del enfoque estándar, como contextos de mensaje (pgettext()), indicadores indicando cadenas tipo printf y la posibilidad de escribir comentarios en código para los traductores (extraídos por xgettext -c) sin modificar el archivo .pot a mano.
+0

Si configuro mi locale con 'sys.getlocale (" LC_All "," fr ")' al francés I simplemente no recupere el 'msstr' traducido. Todavía todo hola. ¿Porqué es eso? –

Cuestiones relacionadas