Ver Mensaje Individual
  #5 (permalink)  
Antiguo 26/05/2013, 12:05
geofran80
 
Fecha de Ingreso: septiembre-2006
Mensajes: 139
Antigüedad: 18 años, 3 meses
Puntos: 14
Respuesta: Pagina web multi idioma php o MySql

Buenas tardes,

Yo crearía una carpeta llamada lang/ en mi aplicación. Dentro de ellas iría agregando por ejemplo los siguientes ficheros.

settings_es.php //Para Español
settings_en.php //Para Inglés
settings_zh.php //Para chino

Dentro de ésta agregaría una matriz asociativa donde las claves sean los items a traducir y los valores la traducción en cada uno de los idiomas.

Ej.

settings_es.php
Código:
<?php
$settings_text = array
                (
                'txt_app_name' => 'Nombre de la Aplicación',
                'txt_app_slogan' => 'Slogan de la aplicación',
                'txt_app_tip1' => 'Tip 1',
                'txt_app_tip2' => 'Tip 2',
                'txt_btn_1' => 'Botón 1',
);
?>
settings_en.php
Código:
<?php
$settings_text = array
                (
                'txt_app_name' => 'Application Name',
                'txt_app_slogan' => 'Application Slogan',
                'txt_app_tip1' => 'Tip 1',
                'txt_app_tip2' => 'Tip 2',
                'txt_btn_1' => 'Button 1',
);
?>
settings_zh.php
Código:
<?php
$settings_text = array
                (
                'txt_app_name' => '应用程序名称',
                'txt_app_slogan' => '应用程序的口号',
                'txt_app_tip1' => '第 1',
                'txt_app_tip2' => '第 2',
                'txt_btn_1' => '按钮 1',
);
?>
Posteriormente lo que haría sería si el usuario debe loguearse, es poner un desplegable donde seleccione el idioma. Ese desplegable arrojará vía GET o POST o simplemente una variable de SESSION el valor seleccionado que será la variable que recoja la aplicación para seleccionar entre settings_es, settings_en o settings_zh. Una vez almacenado ese valor de las options del desplegable validaríamos con algo así:

Código:
<?php $lenguaElegida = session::get('lenguaje'); ?>
        <?php
        if (isset($lenguaElegida)) {
            require_once APP_LANG . 'settings_' . $lenguaElegida . '.php'; //Donde APP_LANG hace referencia a la carpeta donde está alojado cada fichero de traducción
        };
        ?>
Eso sí deberías hacer la labor de traducción de cada item de menú, texto de botón, etc.

Así aislas cada fichero de traducción de lo que a la página principal o páginas se refiere, y simplemente luego sólo tienes que referenciar a ese fichero que usas en require_once como vertebrador de los items que mostrarás ya que usarás la CLAVE del array para referenciarlos en todas las páginas. Y no debes cambiarlo en cada página o tener una por cada idioma. Simplemente usas un array asociativo con las mismas claves pero distintos valores según el idioma. Así si cambias un fichero por ejemplo el settings_zh.php en algún item su traducción no afectará ni a la aplicación ni al resto de traducciones.

Saludos cordiales.
Francisco J.