2009-10-25 9 views
5

Estoy buscando una forma compatible con los estándares para almacenar contenido en varios idiomas para una aplicación web. Hasta ahora, he empleado mis propias funciones de "translate (translate)" que leen datos de un archivo o una tabla de diccionario en una base de datos. Sin embargo, mantener los diccionarios actualizados en una tabla de base de datos es muy engorroso si trabaja con diferentes copias de la aplicación web.i18n con gettext pero sin la molestia de la configuración regional?

Me gusta gettext porque hay una multitud de herramientas disponibles para ello. Sin embargo, desarrollo aplicaciones para diferentes plataformas. No estoy absolutamente dispuesto a lidiar con las malas maneras de setlocale() y las consortes, es decir, las docenas de diferentes variaciones de cadenas locales que difieren de sistema a sistema que necesita proporcionar para que funcione. Nunca jamás. Tengo un conjunto de idiomas, por ejemplo, de, en y es, y deseo cargar el diccionario apropiado y trabajar con _() sin tocar setlocale() o bindtexdomain() una vez.

¿Es de alguna manera posible usar gettext? ¿O alguien sabe otra solución simple, pequeña, rápida (!) I18n para PHP que puede funcionar con archivos .po/.mo, preferiblemente sin requerir una extensión PHP?

+2

No es posible usar gettext en PHP sin usar la extensión gettext, pero no se preocupe, esta es una extensión bastante común/estándar de PHP y la mayoría de las instalaciones ya lo tienen activado. – sorin

+1

@Sorin: es posible, hay una implementación PHP nativa con la mayoría, sino todas, las funciones de gettext. –

+0

@votingmeisfree wordpress y cakephp, por nombrar algunos, usan archivos po y mo sin usar la implementación de gettext. Abren el archivo directamente. – T0xicCode

Respuesta

2
+0

Y no requiere la extensión gettext :) También tienen adaptadores para fuentes más amigables: array, xml, csv, etc. –

+0

Gracias, esto parece interesante. Estuve mirando a Zend durante bastante tiempo y tal vez lo intente. Todavía preferiría una solución autónoma liviana, si alguien conoce una. –

+0

Oh, es más liviano de lo que parece. Puedes usar solo las clases que necesites: para Zend_Translate, solo necesitas Zend_Translate, Zend_Locale, Zend_Loader y Zend_Exception (tal vez estoy equivocado y necesitarás más o menos, solo pruébalo) –

3

Este método debería funcionar incluso con lugares no estándar:

$locale = 'someWeirdLocale'; 

putenv('LC_MESSAGES=' . $locale); 
bindtextdomain('domain', './locale'); 
textdomain('domain'); 

chat!

+1

No funciona en Windows 7 - PHP5 5.3.0 – Blaise

Cuestiones relacionadas