¿Existe alguna manera fácil de convertir el número 1, 2, 3, ... en "1 °", "2 °", "3 °", ..., y en tal forma en que puedo darle a la función un idioma y hacer que me devuelva la forma correcta para el idioma al que estoy apuntando? Ya sea C++ estándar (stl o boost OK), MFC o ATL, api win32 o una biblioteca pequeña, de un solo propósito y gratuita que puedo descargar de algún lado. Gracias.Cómo convertir números cardinales en Ordinales
Respuesta
Here es la pieza de código en CodeProject que hace el trabajo. No lo he probado solo.
He pasado bastante tiempo investigando esto, porque es un proyecto demasiado grande para hacerlo bien. Parece que la biblioteca de la ICU es la única que proporciona esta funcionalidad de una manera algo integral (http://www.icu-project.org/apiref/icu4c/classRuleBasedNumberFormat.html). Sin embargo, no estoy muy interesado en incorporar una gran biblioteca como esa. Seguiré buscando y todavía estoy abierto a sugerencias.
Dudo que sea posible, ya que en muchos idiomas este formulario dependerá del contexto, como el género o el caso del nombre que describe y los diferentes idiomas requerirán diferentes tipos de información de contexto para permitir determinar el correcto formar.
EDITAR: E.g. en polaco es "5-ta klasa" (5ª clase) vs. "5-ty miesiąc" (5º mes) vs. "w 5-tym miesiącu" (en el 5º mes).
¿Buscó el repositorio CLDR en el sitio Unicode? No sé si tienen este tipo de cosas, pero dado que es probablemente el repositorio de datos de localización más completo que hay, probablemente valga la pena echarle un vistazo. http://www.unicode.org/cldr/
Sí, CLDR tiene información ordinal y la UCI lo usa como fuente de datos. Sin embargo, tendría que escribir mi propio código o dividir el código relacionado con el ordinal de ICU en una sub biblioteca diferente. Ambos no son muy atractivos. – Roel
Dado que usa C++, supongo que podría utilizar GNU gettext (también hay un puerto de Windows) para todas las traducciones, o al menos obtener la idea de cómo lo resolvieron. Aquí está la página del manual pertinente sobre las formas plurales que explica el problema (que ya ha encontrado, pero con más detalle) y su solución:
http://www.gnu.org/software/automake/manual/gettext/Plural-forms.html
La única funcionalidad que pude encontrar en gettext es para plurales, no ordinales. Podría construir mi propia solución usando algo similar a su enfoque, pero no quiero eso; Necesitaría acceso a muchos hablantes nativos. No estoy tan motivado :) Además, gettext es GPL que lo hace inadecuado para mi uso. – Roel
- 1. localizar números ordinales
- 2. ¿Cómo puedo convertir números en notación científica?
- 3. Java enumeración establecer ordinales personalizados
- 4. cómo convertir números de endian grande a números nativos delphi
- 5. DataReader - ordinales de código duro?
- 6. Convertir cadena que contiene varios números en números enteros
- 7. ¿Cómo puedo convertir cadenas hexagonales en números en Perl?
- 8. números de convertir en palabras C#
- 9. Cómo convertir números decimales en cuando o viceversa
- 10. ¿Cómo convertir números de cadenas a enteros en una lista?
- 11. ¿Cómo convertir números entre hexadecimal y decimal en C#?
- 12. ¿Cómo convertir una cadena de números clojure en enteros separados?
- 13. ¿Cómo puedo convertir números hexadecimales a binarios en C++?
- 14. secuencia de números Convertir a array de números
- 15. Cómo direccionar los ordinales enteros enumurated personalizado con hibernación
- 16. ¿Cómo convertir una cadena de números separados por comas a una matriz de números enteros?
- 17. Convertir bytes en números de coma flotante en Python
- 18. Cómo escribir números formateados como números en JExcel (jxl)
- 19. Números binarios en Python
- 20. Convertir números a grados en la lista de Python
- 21. ¿Cómo cambiar los datos de relación discreta en datos ordinales en R?
- 22. positivos valores de latitud y longitud/negativos en comparación con los puntos cardinales
- 23. Cómo convertir cadena en número en gnuplot
- 24. Cómo convertir null en 0
- 25. Convertir números de nota MIDI Para Nombre y Octave
- 26. ¿Convertir la secuencia de números a ID de aspecto aleatorio?
- 27. ¿Cómo convertir los nombres de columna de hoja de Excel en números?
- 28. ¿Cómo puedo convertir una columna de factores que contiene números decimales en numéricos?
- 29. ¿Cómo puedo convertir números hexadecimales a decimales en calc de Emacs?
- 30. ¿Cómo formatear números en JavaScript?
¿Tiene alguna idiomas o ejemplos específicos en mente? AFAIK, pero mi experiencia práctica se limita a los idiomas de Europa occidental, el ordinal (1 °, 2 °) es siempre el mismo, y solo la forma completamente deletreada está conjugada (por ejemplo, el secundo mano/la secunda dia en español). – Roel
Interesante, gracias por eso. Parece que usaré la biblioteca de la ICU para obtener los ordinales, pero no sé cómo manejan esto. Voy a probar eso. – Roel
@Roel: Es "el segundo día/la segunda mano" y son diferentes incluso cuando no están completamente detallados: el 2º día/la 2ª mano – MikMik