2012-10-04 24 views

Respuesta

12

Usted sólo puede usar una lang_XX.php e incluirlo en su aplicación.

$lang = array(
    "welcome" => "Welcome", 
    "bye" => "Bye" 
); 

Para otros idiomas, lang_fr.php decir, solo hay algo como:

$lang = array(
    "welcome" => "Accueil", 
    "bye" => "Au revoir" 
); 

Para un pequeño caso de uso, esto debe estar bien y no hay necesidad de ir con .po archivos. Además, puede definirlo de esta manera:

function _($l) 
{ 
    return $lang[$l]; 
} 
+6

+1 Buena solución para un sitio simple – Tchoupi

+6

Aunque la solución es buena, aún así recomendaría ir a la ruta gettext. Nunca se sabe a dónde irá su sitio. Puede aumentar de tamaño rápidamente y es posible que deba agregar idiomas adicionales. Gettext no tardará mucho más en implementarse que esta solución propuesta – eakkas

+0

Aún mejor que @NatlsGleek, ya que los archivos de traducción pueden enviarse a otras personas para completar –

1

Para contenido estático que nunca/extremadamente rara vez cambiará, seguro.

Para contenido dinámico, no en lo más mínimo. La compilación de los archivos .po, etc. está muy por encima, y ​​sugeriría algún tipo de solución JSON o XML y plantillas en su lugar, con plantillas compiladas en caché.

+2

¿Podría ampliar lo que quiere decir con "Compilar los archivos .po es mucho sobre la parte superior "? – dsas

+0

Para mí, se trata en gran medida de contenido estático. –

3

En cuanto al rendimiento, gettextExtension es más rápido que utilizar una cadena de matriz que se asigna como ID de cadena de texto localizado (por ejemplo "WelcomeText" => "Welcome to our homepage." se incluiría el uso de algo <?= $strings["WelcomeText"] >. La aplicación PHP puro de gettext es más lento y no se recomienda si puede utilizar la extensión PHP. Más detalles aquí Localizing PHP web sites using gettext y Benchmarking PHP Localization – Is gettext fast enough?

10

gettext es la mejor manera. Para un sitio pequeño con pocas cadenas que no se espera que crezca mucho, la implementación de algo similar a las soluciones publicadas puede ser más rápido que aprender a usar gettext y configurarlo.

tl; dr:

personas han estado pensando duro durante muchos años para crear un sistema de traducción que funciona, usted podría pasar las edades de reinventar la rueda, o usted podría pasar un poco de tiempo aprender a usar gettext .

En el mundo del código abierto, gettext es prácticamente un estándar de facto.

Estas son algunas razones por las gettext es mejor que la alternativa habitual de mantenimiento de grandes listas de matrices de traducción

  1. Es más rápido
  2. No requiere la carga de cada cuerda suelta en la memoria una vez al hilo
  3. Tiene una gran cantidad de herramientas de soporte para traductores, como poedit, por lo que no depende de que sus traductores entiendan cómo editar el código PHP.
  4. Tiene soporte de herramientas para usted, msgmerge y así sucesivamente, significa que puede enviar su archivo para traducir mientras todavía está trabajando y agregar nuevo texto traducible y combinarlos fácilmente
  5. Tiene que comentarle al traductor sobre el contexto de una cadena? gettext tomará un comentario del código donde se utiliza y lo copiará en el archivo de traducción
  6. Las claves de traducción son el texto en inglés, si aún no se ha traducido, el texto se muestra en inglés, ninguno de las soluciones dadas en esta respuesta hasta la fecha tienen este derecho.
  7. Es compatible con plurales, si una cadena depende de un entero, en inglés solo hay dos formularios if n != 1 "There was a person" else "There were n people". Para otros idiomas, la regla no es tan simple como si (n! = 1), el ruso tiene 3 variantes diferentes y la regla es n%100/10==1 ? 2 : n%10==1 ? 0 : (n+9)%10>3 ? 2 : 1;
+0

Para traducciones grandes, creo que esta es la mejor opción, pero en mi caso es exagerada. –

+1

¿Todavía se mantiene fiel a su recomendación a partir de hoy (febrero de 2015)? ¿Ha surgido algo más desde 2012? – alexw

+0

El componente de traducción de Symfony parece muy bien pensado, aunque nunca lo he usado. – dsas

Cuestiones relacionadas