2011-09-26 13 views
12

En primer lugar - Sé que hay un montón de respuestas acerca de la funcionalidad multi-idioma, que no encontró la respuesta para lo que quieroLa mejor manera de poner en práctica en varios idiomas PHP

pensé en 3 maneras con el que puedo trabajar, necesito crear los archivos de idiomas usando PHP cada vez que agrego un nuevo valor a una interfaz de formulario web

Las primeras 2 son similares, usando matrices o definiciones en un archivo de idioma específico y incluirlo en el inicio de la ejecución, Pero en este caso podría cargar miles de definiciones o matrices solo para usar pocas en cada página.

La tercera forma es crear función que llama cada vez que la palabra o la frase completa y el uso de IF -s o switch para elegir el término correcto (o devolver la llave llamada si no puede competir

¿Cuál es el mejor manera de hacer eso


Edición:? me decidí a hacer algunas pruebas, he intentado 3 maneras diferentes y midieron el tiempo y la memoria se daba por:

  1. que define una matriz (22 valores) y es gestionada por encima de 1 a 1000000 - comprobado para llamar valor - 1 de tres usando el operador % para elegir qué usar y simplemente colocarlo en una variable

    • Tiempo tomó: ,476591110229 segundo
    • memoria: 6536 bytes
  2. he utilizado la misma matriz (22 valores) y lo llamó usando la función - return $arr[$string]; (sólo para modo conveniente de trabajo y la capacidad de cambiar a diferente alquilar manera si necesitaré)

    • Tiempo tomó: ,960635185242 segundo
    • Memoria: 6704 bytes
  3. creé una función con lista de cadenas y el uso de switch ->case Elegí la cadena de retorno

    • Tiempo que tardó: 1.46953487396 segundo
    • Memoria: 848 bytes

Bueno, ahora la pregunta es ¿cuál es la opción correcta - prefiriendo tiempo o prefiriendo memoria, Y en caso de que los sitios son grandes y sería tomó mucho de la memoria - que no podía cambiar porque es construido con matrices - Si funciona con la función siempre puedo cambiarlo

voy realmente aprecio su ayuda,

Gracias

+2

Posible duplicado: http://stackoverflow.com/ questions/2790952/php-localization-best-practices-gettext –

+3

posible duplicado de [Cómo hacer un sitio web multilenguaje en php y Mysql] (http://stackoverflow.com/questions/2487171/how-to-make-a- sitio web multilenguaje-en-php-y-mysql) – JJJ

+0

http://php.net/manual/en/function.gettext.php –

Respuesta

1

Agrupe sus cadenas en categorías, una global y otra, correspondientes a las vistas que tiene en el sitio web (por ejemplo, lang_global, lang_profile, lang_something_else) Incluya el archivo global y el archivo correspondiente a la vista actual. De esta forma, no cargará la traducción completa, sino solo un subconjunto de la misma. Y es más manejable, y puede proporcionar contexto, teniendo diferentes traducciones en la misma cadena.

+0

Lo necesito para un CMS, es un tipo de problema dividirlo en varias partes: el sistema puede cambiar en cada sitio y las cadenas de idioma se pueden invocar desde cualquier lugar. Es muy complicado interferir con la posición de cada cadena en las funciones/archivos cada vez que quiero llamarlos –

+1

Usted todavía tienen entidades en el CMS. Y las entidades pueden tener archivos de idiomas separados.Y cada módulo/complemento también puede tener un archivo de idioma. –

+0

Todavía es complicado trabajar con ... el sistema es solo la base y se necesita cambiar en cada sitio web, tratando de definir cada vez dónde ubicar la cadena actual no es una manera tan simple de trabajar –

5

En términos de código, algo como esto será genial para usted. Debe basarse en la elección del usuario (elegir un idioma de un botón o menú) o en el idioma de navegación (no es la mejor opción).

index.php

<?php 

// verify the user's choice 
if ($_POST[lang] == "en") 
{ 
    include_once("en_language.php"); 
} 

if ($_POST[lang] == "pt") 
{ 
    include_once("pt_language.php"); 
} 

// calling a lable in your page 
echo LABEL_MENU; 


// the rest of your file 
... 
?> 

en_language.php

<?php 
// ENGISH Language file 
define('LABEL_MENU','Main Menu'); 

// the whole file with the labels of your system 

?> 

pt_language.php

<?php 
// PORTUGUESE Language file 
define('LABEL_MENU','Menu Principal'); 

// the whole file with the labels of your system 

?> 

complementando

Si desea utilizar el tipo de matriz que los valores constantes con definir(), pero no estoy seguro de lo que es más rápido que ..

$arrays = array("MAIN_MENU" => "Main Menu", "LEFT_MENU" => "Left Menu"); 
echo $arrays["MAIN_MENU"]; 
+0

Como dije, pensé en eso (o en el uso de matrices), pero aun así, puedo definir muchas cadenas que no usaré en absoluto y cuando un sitio web recibe muchas visitas, se vuelve algo pesado (creo) –

+0

@Joe Polico - Genial, es la manera fácil. – B4NZ41

+0

Pero estoy buscando los dos: la forma más fácil y la más rápida (para el servidor) para trabajar. Y realmente, para la manera fácil es mejor usar una función para administrar todas las cadenas de idioma –

Cuestiones relacionadas