justo después de haber abordado este mismo recientemente (12 idiomas y contando) en un sistema de producción y de haber topado con algunos de los principales problemas de rendimiento a lo largo de la manera que sugeriría un sistema híbrido.
1) Almacene las cadenas de idioma y las traducciones en una base de datos; esto facilitará la interacción con/actualizar/eliminar elementos y será parte de sus rutinas de respaldo normales.
2) Guarde los idiomas en archivos planos en el servidor y sáquelos según sea necesario para mostrar en la página.
Los beneficios aquí son muchos, ¡sobre todo es rápido! No me ocupo de la sobrecarga de conexión para MySQL o de la ralentización del tráfico durante la transferencia. (especialmente importante si su servidor de base de datos no es localhost).
Esto también lo hará muy fácil de usar.Almacene los datos de su base de datos en el archivo como un conjunto serializado php y GZIP el contenido del archivo para reducir la sobrecarga de almacenamiento (esto también lo hace más rápido en mi evaluación comparativa).
Ejemplo:
$lang = array(
'hello' => 'Hallo',
'good_morning' => 'Guten Tag',
'logout_message' = > 'We are sorry to see you go, come again!'
);
$storage_lang = gzcompress(serialize($lang));
// WRITE THIS INTO A FILE SUCH AS 'my_page.de'
Cuando un usuario carga el sistema por primera vez hacer un file_exists('/files/languages/my_page.de')
. Si el archivo existe, cargue el contenido, descomprima y anule la serialización, y estará listo para funcionar.
Ejemplo
$file_contents = get_contents('my_page.de');
$lang = unserialize(gzuncompress($file_contents));
Como se puede ver que puede hacer que el almacenamiento en caché específica para cada página en el sistema de mantenimiento de la sobrecarga aún más pequeño y utilizar la extensión de archivo para indicar el lenguaje ... (my_page.en , my_page.de, my_page.fr)
Si el archivo NO existe, consulte el DB, construya su matriz, serialícela, gzip y escriba el archivo faltante, al mismo tiempo que acaba de construir el archivo. array que la página necesita, así que continúa para mostrar la página y todo el mundo está contento.
Finalmente, esto le permite crear páginas de actualización accesibles para quienes no son programadores, pero también controla cuándo aparecen los cambios al decidir cuándo eliminar los archivos de caché para que puedan ser reconstruidos por el sistema.
advertencias y errores
Mientras guardé todo en la base de datos directamente nos golpean algunas ralentizaciones PRINCIPALES cuando nuestro tráfico se disparó.
Tratar de mantenerlos en matrices de archivos planos fue un problema porque las actualizaciones eran dolorosas y propensas a errores.
No comprimir GZIP los contenidos de los archivos de caché ha hecho que el sistema de idioma sea un 20% más lento en mis puntos de referencia.
Asegúrese de que todos los campos de su base de datos que contienen los idiomas están configurados en UTF8-general-ci (o al menos una de las opciones de UTF8, considero general-ci el mejor para mi uso). Si no lo hace usted no será capaz de almacenar conjuntos de caracteres no Unicode en su base de datos (como el chino, japonés, etc.)
Extensión: En respuesta a un comentario más abajo, asegúrese de ajustar su base de datos tiene en cuenta las cadenas de idioma de nivel de página.
id string page global
1 hello NULL 1
2 good_morning my_page.php 0
Todo lo que aparece en los encabezados o pies de página puede tener un indicador global que será consultada en todos los archivos de caché creado, de lo contrario consultarlos por página para mantener su sistema de respuesta.
Duplicado. Consulte http://stackoverflow.com/questions/2275270/whats-the-simplest-php-alternative-to-the-php-gettext-extension-which-can-be-sup http://stackoverflow.com/questions/2149116/php-localization-question –