2008-09-25 8 views
9

¿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

-2

Here es la pieza de código en CodeProject que hace el trabajo. No lo he probado solo.

0

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.

5

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).

+0

¿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

+0

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

+1

@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

0

¿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/

+0

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

0

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

+0

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

Cuestiones relacionadas