2011-05-26 18 views
11

Estoy buscando una manera simple, propia y elegante para manejar el género gramatical con Gettext en una aplicación de Rails, de la misma manera que los plurales se manejan con el método n_().Manejando el género gramatical con Gettext

Esto no tiene ningún interés en inglés, ya que las palabras no varían con el género, pero sí al traducir al español. Su/es un buen caso de uso en inglés. Esto es realmente necesario cuando se traduce al español.

Un ejemplo:

usuarios Considerando Pablo (macho) y María (hembra).

_('%{user} is tall') & {:user => user.name} 

deben ser traducidos a

'Pablo es alto' 
'María es alta' 

Por supuesto, tenemos acceso a user.gender

¿Alguna idea?

¡Salud!

Respuesta

10

El uso de gettext características estándar esto se puede solucionar utilizando contextos. Como llamar apropiada:

p_('Male', '%{user} is tall') 

o

p_('Female', '%{user} is tall') 

Esto generará dos cuerdas separadas en catálogos gettext marcándolos con "macho" y "hembra" contextos.

+1

Creo que esta respuesta es más correcta que la marcada anteriormente. ¡Gracias! – dgilperez

3

Desafortunadamente no. Esta es una limitación del sistema gettext: aparte del número, las características lingüísticas se basan en el idioma que se utiliza. Si tuviera que escribir todas sus cadenas en español, funcionaría.

Otra opción sería agregar un carácter a la cadena por el bien de la traducción, y luego quitarlo.

No estoy familiarizado con Ruby, pero la idea básica en pseudo-código sería:

if (user.sex == male) { 
    strip_last_char(_('%{user} is tall♂') & {:user => user.name}) 
} else { 
    strip_last_char(_('%{user} is tall♀') & {:user => user.name}) 
} 
+0

Gracias por responder, por confirmar lo que ya sospechaba, y por proporcionarme una solución muy interesante. – dgilperez

+0

@dgilperez - ¡Bienvenido! – DougW

+0

+1 para la solución de personaje especial! –

1

¿Qué hay de usar el mecanismo plural form de gettext. Por lo general, un parámetro n se usa para distinguir entre formas singulares y plurales.

Ahora imagine usar n para definir su género en lugar de una cantidad. Por lo tanto p.ex. n = 1 significa femenino (y no singular) y n = 2 (o n> 1) significa femenino (y no plural).

n = user.male? ? 1 : 0 
n_('%{user} is tall', '%{user} is tall', n) & {:user => user.name} 
+0

thx para la sintaxis de ruby ​​correcta dgilperez. si usas user.gender en lugar de n, como propuse, entonces esto podría usarse también para otros idiomas con más las dos formas de género. También debes tener en cuenta configurar correctamente las formas plurales (aquí: Plural-Forms: nplurals = 2; plural = n == 1? 0: 1;) en su messages.po – Knut

+2

¡No! ¡Un millón de veces no!El objetivo de la función de formas plurales es que los diferentes idiomas tienen diferentes números de formas plurales o pueden no tener formas diferentes para singular y plural en absoluto. Nunca hagas eso! – CodeMonkey