2008-10-12 16 views
14

Estoy jugando con la configuración regional y las cosas I18N en C++ y he estado buscando ejemplos del mundo real. He leído el capítulo de Josuttis sobre I18N en su book (segunda edición para C++ 11 que se lanzará en abril de 2012), y lo encontré útil pero sin ejemplos del mundo real de los que sacar. No tengo idea de si estoy o no. Seguir las mejores prácticas es cometer errores de principiante. ¿Qué recursos puede apuntar StackOverflow hacia ambos en la web y en la impresión para hacer cosas I18N en C++?Recursos para I18N en C++

¿Qué bibliotecas están disponibles para C++ que hacen que i18n sea más fácil? ¿Qué no está en la biblioteca estándar que debe ser? A primera vista, parece que la compatibilidad con UTF8 no existe en la biblioteca estándar.

Editar:

Después de hacer un poco más de lectura, parece que C y C++ son tanto Unicode "agnóstico". También parece que para tratar con datos codificados en Unicode/UTF8/16/32 es necesario utilizar una biblioteca de terceros. El quid de esto es que la biblioteca estándar en sí misma solo piensa en ISO 8859 y las páginas de caracteres relacionadas, que cambian en función de la configuración regional en la que se establece. Eso significa que probablemente quiera usar la biblioteca de la ICU para cadenas en lugar de usar std::string o incluso std::wstring.

Respuesta

0

Tome un vistazo a GNU gettext

Sería interesante saber qué ++ biblioteca de C está usando, ya que algunas bibliotecas GUI ya ofrecen soporte de i18n.

0

I segundo GNU gettext. Sin embargo, si está utilizando Qt (y las posibilidades son buenas si quiere hacer GUI con C++), Qt viene con su propia versión de gettext y una fina herramienta de traducción (Qt Linguist) que facilita las cosas y también puede usarse desde aplicaciones que no son GUI sin gastos generales. Lo tenemos incluso en un servicio.

Sin embargo, respecto a lo que carece de C++, justo lo que viene a la mente:

  • Soporte completo para las configuraciones regionales con respecto a los números, las fechas o moneda. Y recuerde que las configuraciones regionales difieren en más que el separador decimal, incluido el orden, lo que me lleva al segundo punto:
  • C++ no tiene una función de formato que admita los argumentos ordenados (porque en otro idioma, el orden de las palabras podría ser diferente que en tu idioma). Puede usar el formato boost :: para esto. Qt por supuesto también lo admite.

También eche un vistazo a lo que tenía que hacer por usted mismo, incluso si estas cosas son compatibles. .NET, por ejemplo, viene con una lista completa de configuraciones regionales que están listas para usar.

9

Le han indicado GNU gettext, que le permite reemplazar cadenas literales con versiones localizadas en tiempo de ejecución, un aspecto de la localización (que es lo que sucede después de la internacionalización, cuando alguien realmente usa su código internacionalizado) en un lugar específico). También se lo ha señalado a las bibliotecas Boost (en particular Boost.Locale); esa suele ser una buena respuesta para todo lo relacionado con C++.

Otro lugar donde puede mirar es el proyecto ICU (Componentes internacionales para Unicode). Y como fuente de los datos, lo podría hacer en el CLDR (Común Locale depósito de datos) como fuente de información sobre los diferentes lugares; el sitio web Unicode también tiene mucha información sobre otros aspectos de diferentes culturas, ya que trata de muchos idiomas.

Y como recurso final por el momento, más bien especializado, existe el Olson Time Zone database, que se actualiza varias veces al año para realizar un seguimiento de cómo los diferentes países cambian sus reglas sobre cuándo cambiar entre el invierno y el verano (luz del día ahorro y estándar) tiempo.

1

Eche un vistazo a wxWidgets ejemplos de internacionalización. Tiene una implementación non-gnu del mecanismo de traducción utilizado en gettext (mencionado anteriormente). Puede usarlo incluso en aplicaciones comerciales porque la licencia de wxWidgets le permite hacerlo.

Si solo está buscando un método para internacionalizar la aplicación, gettext es el punto de partida.

0

Para la compatibilidad con UTF-8, eche un vistazo a la biblioteca UTF-8 CPP.

-2

No necesita bibliotecas para realizar esta tarea. Consulte la guía de MS para DLL Satellite here.

Si especifica usar Unicode en la configuración del proyecto y usa las funciones Unicode String (en lugar de char), será suficiente el uso estándar de Satellite Satellite para almacenar datos específicos de la configuración regional (cuadros de diálogo, cadenas, etc.).

Windows mismo se encargará de encontrar el recurso correcto, siempre que la DLL tenga el nombre correcto. Los sufijos necesarios para las DLL de satélite son here.