c++ - texto - traductor de numeros
Cómo convertir números Cardinal en Ordinales (5)
¿Existe una manera fácil de convertir el número 1, 2, 3, ... a "1º", "2º", "3º", ..., y de tal manera que pueda darle a la función un idioma y tener me devuelve la forma correcta para el idioma al que me dirijo? 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.
He invertido 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 completa ( 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 si es posible en absoluto, ya que en muchos idiomas esta forma dependerá del contexto, como el género o el caso del nombre que describe, y diferentes idiomas requerirán diferentes tipos de información de contexto para permitir determinar la forma correcta.
EDITAR: Por ejemplo, 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/
Como usas C ++, supongo que puedes usar 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 relevante sobre formas plurales que explica el problema (que ya encontraste, pero con más detalle) y su solución:
http://www.gnu.org/software/automake/manual/gettext/Plural-forms.html
Aquí está la pieza de código en CodeProject que hace el trabajo. No lo he probado solo.