Manejo de formularios plurales en cadenas de localización de activity pub

He notado algunas cadenas en el plugin ActivityPub que, en mi opinión, necesitan pluralización.

La primera publicación de un nuevo tema se publicará %{delay_minutes} minutos después de ser publicada

discourse-activity-pub/config/locales/client.en.yml at a49ec5c4f5acac28bafbc1c57c57161c067e8f6e · discourse/discourse-activity-pub · GitHub
Si delay_minutes es 1, debería decir “1 minuto”.

“Publicar publicación #%{post_number} y entregarla a los seguidores de los Actores del Grupo en %{minutes} minutos.”

discourse-activity-pub/config/locales/client.en.yml at a49ec5c4f5acac28bafbc1c57c57161c067e8f6e · discourse/discourse-activity-pub · GitHub
Lo mismo que arriba.

“Publicar %{count} publicaciones no publicadas en el Tema #%{topic_id}. Las publicaciones no se entregarán a los seguidores de los Actores del Grupo.”

discourse-activity-pub/config/locales/client.en.yml at a49ec5c4f5acac28bafbc1c57c57161c067e8f6e · discourse/discourse-activity-pub · GitHub

Si solo 1 publicación no está publicada, diría “Publicar %{count} publicación no publicada en el Tema #%{topic_id}. La publicación no se entregará a los seguidores de los Actores del Grupo.”

“%{min_length} a %{max_length} letras, números, guiones o guiones bajos.”

discourse-activity-pub/config/locales/client.en.yml at a49ec5c4f5acac28bafbc1c57c57161c067e8f6e · discourse/discourse-activity-pub · GitHub
Creo que esto depende de max_length. Si max_length es 1, diría “letra, número, guion o guion bajo”. Pero no estoy seguro si hay otros idiomas donde min_length también sea relevante.

“El nombre de usuario debe tener entre %{min_length} y %{max_length} letras, números, guiones o guiones bajos.”

discourse-activity-pub/config/locales/server.en.yml at a49ec5c4f5acac28bafbc1c57c57161c067e8f6e · discourse/discourse-activity-pub · GitHub
Lo mismo que arriba.

“%{count} de %{total} publicaciones en este tema están publicadas.”

discourse-activity-pub/config/locales/client.en.yml at a49ec5c4f5acac28bafbc1c57c57161c067e8f6e · discourse/discourse-activity-pub · GitHub
Este es un poco más complejo porque depende de dos variables: count y total. Por ejemplo:

  • 1 de 1 publicación en este tema está publicada
  • 1 de 3 publicaciones en este tema está publicada
  • 2 de 3 publicaciones en este tema están publicadas
4 Me gusta

Disculpa la demora, Moin, esto debería abordar la mayoría de los puntos: DEV: Update pluralization for some strings by pmusaraj · Pull Request #262 · discourse/discourse-activity-pub · GitHub

Para estos dos, dejo las cadenas como están. Un sitio estaría mal configurado si tuviera nombres de usuario limitados a 1 carácter… no es necesario cambiar.

1 me gusta

¿Qué pasa con los sitios que tienen un nombre de usuario de 11 caracteres? Hay idiomas en los que la versión para 1 también se usa para 11. ¿Y cómo funciona para los idiomas con más de una forma plural si no ofreces una en inglés? ¿Pueden los traductores introducir esas diferentes versiones plurales?

1 me gusta

Hmm, ¿se consideraría 11 singular en estos idiomas?

1 me gusta

Existen idiomas que utilizan una versión para “uno” en los números que terminan en uno. (No estoy seguro de si 11 fue el mejor ejemplo). Y también tienen más versiones que “uno” y “otro”, por lo que incluso con solo recuentos diferentes mayores que 1, estos necesitan traducciones diferentes según el recuento exacto.

El alemán no es uno de ellos, así que supongo que algunos de tus colegas sabrán mejor que yo.

1 me gusta

Tengo algunas dificultades con la traducción: ¿Discourse elige el singular y el plural basándose en count o total?
Por lo que entiendo, normalmente es count.
Pero no puedo averiguar cómo manejar el caso en que count es 1 y total es 3. Obtengo algo como “1 de 3 post en este tema está publicado”. Puedo arreglar eso usando “posts”: “1 de 3 posts en este tema está publicado”. Pero entonces no funciona si total es 1. :exploding_head:

¿Quizás necesitamos Message Format support for localization en este caso?

Eso es algo que llamamos inglés de ingeniería. Tal forma nunca debería usarse. Debería ser algo como la/esta publicación está publicada. O tema si es posible, las siguientes publicaciones se publicarán automáticamente.

Situación similar, al menos en finlandés, es que el número uno (en realidad, todos los números entre 0 y 9) debe escribirse, sin usar números. Pero un concepto bastante común es escribir one en lugar de 1 y los más grandes son números.

Algo como 1 post está siempre condenado a ser algo que usan los desarrolladores de habla inglesa, porque son demasiado perezosos para usar el estilo humano, casi me da pena decirlo en voz alta. Y, en general: se considera una forma estadounidense en lugar de usar esta forma en encabezados, textos :smirking_face:

No se trata de pereza. Usar el marcador de posición para el número es muy importante. Como expliqué anteriormente, hay idiomas en los que también se dice “21 post”, al igual que se dice “1 post”. Si el texto en inglés usara “one” en lugar de %{count}, sería muy fácil para un traductor traducirlo, y luego el número no sería reemplazado por el recuento real, lo que resultaría en “one post” cuando el recuento es en realidad 21.
Por lo tanto, hay una razón por la que se usan los números. Ver también: Always use %{count} variable when translating pluralized strings

Por cierto, también es muy útil en alemán porque evita problemas como este.

Me cuesta creer que la codificación esté a un nivel tan bajo que sea imposible reemplazar %(count) por una palabra cuando %(count) = 1. Estoy bastante seguro de que he cambiado ese marcador de posición a texto puro cuando la traducción local ofrece diferentes opciones para singular y plural.

Eso es a lo que me refiero con pereza e inglés de ingenieros. Internamente se deben usar variables y marcadores de posición, pero estos deben transformarse en una forma legible por humanos y nativa. Después de todo, los usuarios finales son quienes usan el software, no los ingenieros…

Sí, lo sé. Esa es una pregunta más amplia y grande que solo considerar cómo traducir 1 de 3... o 1 de 1.... Pero mi punto más profundo es que no debería haber necesidad de preguntarse tales cosas (fuera de otras diferencias de un millón de idiomas).

Pero claro, tal vez vivimos en un mundo donde podemos tener IA complejas pero no hay solución para evitar situaciones como 1 de 1 :joy:

Es bastante fuera de tema, ya que este tema trataba de permitir cualquier forma de tener una versión singular y plural diferente para estos textos.

Pero tal vez podrías reemplazar 1 con “one” en todas partes de la interfaz en inglés.
Sin embargo, eso no funcionará tan fácilmente en alemán. El problema es que en alemán, la palabra para “uno” cambia dependiendo del caso, género y rol gramatical.

Por ejemplo:

  • El tema permanecerá abierto durante un mes. → Das Thema ist noch einen Monat geöffnet.
  • El tema se cerrará en un mes. → Das Thema wird in einem Monat geschlossen.
  • Ha pasado un mes. → Ein Monat ist vergangen.

Así que, si bien también es común en alemán escribir los números como palabras, manejar esto correctamente es gramaticalmente complejo.
No puedes simplemente reemplazar el número “1” con la palabra “eins”, porque esa forma nunca se usa antes de un sustantivo y la forma correcta de la palabra depende del caso gramatical.

En otras palabras, usar palabras en lugar de dígitos crearía mucho más trabajo para los traductores.
No podrías simplemente usar un marcador de posición como %{duration} que se expanda a “un mes”, “una semana” o “un día” en todos los contextos.
En lugar de tres duraciones y tres oraciones, necesitarías una versión separada para cada combinación gramatical posible, lo que potencialmente multiplicaría la cantidad de texto varias veces.

1 me gusta

Gracias por el enlace. Puedo ver, al leer el código y mirar otros idiomas como el árabe, que los idiomas pueden proporcionar sus propias anulaciones incluso si la cadena en inglés es la misma en todas las variantes. Por ejemplo, el árabe tiene reglas separadas cuando el recuento es 2, y veo two: usado en cadenas en árabe que no están definidas en inglés. Así que para 1/11, el idioma que tiene una regla puede proporcionar esa variante. No es necesario definirlo en inglés, por lo que puedo decir.

Gracias por investigar esto. No tengo el contexto para esta cadena, pero si quieres enviar un PR con el cambio, estaré encantado de echarle un vistazo. Gracias.

¿Puedes explicar cómo se puede hacer esto en Crowdin?
Esto es lo que veo en Crowdin si quiero traducir discourse_activity_pub.actor.warning.invalid_username al árabe

He visto el menú para introducir las versiones plurales antes. Por ejemplo, en js.user.password.too_short

Pero, en mi experiencia, solo puedes añadir estas diferentes versiones si los plurales también están definidos en inglés.

Yo tampoco. La última vez que eché un vistazo a los textos de ActivityPub fue en abril, cuando creé este tema. Ahora, simplemente estaba reemplazando los marcadores de posición durante la traducción porque, de lo contrario, es muy difícil elegir las palabras. Fue entonces cuando noté que “1 de 3 publicaciones en este tema se ha publicado” me parecía incorrecto, no solo en alemán sino también en inglés.