PDA

Ver la Versión Completa : Sistemas multilenguaje


rcuevas
12-11-2006, 14:52:22
Buenos días a todos,

Tngo en mente realizar un sistema web en php y será necesario que este sea multilenguaje. El sitio encuestión tendrá mucha información, y no estoy del todo seguro sobre cómo conseguir que sea multisistema.
He leido por haí el truquillo de los archivos .php de traducción, o lo que es lo mismo, para cada idioma a traducir genero un fichero con todos aquellos textos traducidos al idioma correspondiente. Luego, en función del idioma seleccionao por el usuario, cargo un fichero de traducciones o otro.

Lo que no sé es si esta carga va a pesar mucho o no en el sistema. no tengo ni idea de cuanto me puede llegar a ocupar cada uno de estos archivos.

De momento me quedo con esta forma de traducir. Conozco otra, pero creo que aún va a penalizar más: consiste en poner todas las traducciones en una tabla donde existiran tantas columnas como idiomas quiera tener, y para cada texto que quiera traducir, realizar la corespondiente consulta a BD. la veerdad es que esta solución me parece lentísima.

Si alguien me aporta su opinión se lo agradecería muchísimo.

dec
12-11-2006, 15:48:43
Hola,

No sé si te sonará de algo GetText (http://www.gnu.org/software/gettext/). En el manual de PHP (http://es.php.net/gettext) tienes una serie de referencias a las funciones que pueden echarte una mano con GetText. Para usar GetText necesitarás de la correspondiente extensión en PHP, empero, existe un proyecto de nombre PHP GetText (http://savannah.nongnu.org/projects/php-gettext/) que te permitirá usar "la infraestructura" de GetText desde PHP sin necesidad de extensión alguna.

kayetano
13-11-2006, 10:09:13
Hola

Yo utilizo es sistema que comentas de meter las traducciones en diferentes archivos y cargar el del idioma correspondiente, eso si, cargo solo las traducciones de la página que se está visionando y no todas las traducciones de la página. Funciona muy bien y muy rápido.

rcuevas
19-11-2006, 14:23:32
Muchas gracias a los 2 por vuestra información. Agradezco el tiempo que me habéis dedicado. Supongo que finalmente optaré por seguir las traducciones medante los archivos php.

Crandel
08-01-2007, 01:23:49
Hola amigos, podrian comentar para novatos como yo un poco mas de como se hace el sistema con archivos, algun ejemplo basico para darme una idea.

dec
08-01-2007, 01:37:03
Hola,

Yo de ti me tiraría por el sistema GetText, puesto que da mucho juego, por ejemplo, a la hora de que pone sencillas las cosas a los traductores: hay herramientas para Windows y para Linux que les ayudan en la tarea.

Si quieres puedo explicar un poco el tema usando PHP-GetText. Por otro lado, si prefieres hacerlo mediante archivos... más o menos podría ser así:



// espanol.php

$_LENGUAJE['label-bienvenida'] = 'Bienvenido a esta página Web';
$_LENGUAJE['label-despedida'] = 'Esperamos verte pronto por aquí';

// ingles.php

$_LENGUAJE['label-bienvenida'] = 'Welcome to this Web page';
$_LENGUAJE['label-despedida'] = 'We hope see you here again';



Teniendo los dos archivos anteriores, es más o menos sencillo deducir que depende de qué archivo incluyamos en nuestro Script contaremos con un contenido en el array $_LENGUAJE.

Y eso es más o menos todo. Es decir, suponamos un Script como el siguiente:



// index.php

if(isset($_GET['lenguaje']))
{
switch($_GET['lenguaje']) {
case 'espanol':
include('espanol.php');
break;
case 'ingles':
include('ingles.php');
break;
default:
include('espanol.php');
break;
}
} else {
include('espanol.php');
}


echo $_LENGUAJE['label-bienvenida'];
echo '<br />';
echo $_LENGUAJE['label-despedida'];



En el Script "index.php" se mira por una variable "GET", a modo de ejemplo. Si existe la variable "GET" "lenguaje" miraremos el valor de dicha variable. En caso ser "espanol" incluiremos en nuestro Script el archivo "espanol.php", y en caso de ser inglés el correspondiente Script "ingles.php".

Por defecto, como puede verse, incluríamos el archivo "espanol.php", por lo que la instrucción:


echo $_LENGUAJE['label-bienvenida'];


Imprimiría: "Bienvenido a esta página Web".

Nota: He simplificado el código, y seguro que he omitido algunas cosas, o no he tenido en cuenta otras, pero, espero que sirva para coger la idea del asunto: complicarse se puede complicar lo que se quiera: guardar en una Cookie el lenguaje elegido, más lenguajes, Arrays de Arrays para las cadenas de los lenguajes... qué sé yo.

Sigo prefiriendo PHP-GetText. :)

Crandel
08-01-2007, 01:54:43
Muchas gracias DEC, muy rapido.

Te sigo molestando con un par de preguntas:

1. El servidor donde tengo alojado mi sitio no es mio, por lo que estuve viendo PHP-GetText son solo dos archivos que deben ir donde estan mis paginas y ninguna instalacion mas. Es asi no?

2. Respecto a los metodos de traduccion con archivo, como sabe la pagina index.php cual indioma estoy seleccionando, le debo pasar la palabra espanol como parametro?

igualmente ahora me voy a poner a probar todo esto.

dec
08-01-2007, 02:14:00
Hola Crandel,

1º Así es. PHP-GetText es una librería para PHP que hace innecesario el uso de la extensión GetText para PHP, con la que puede que no cuentes en tu sitio Web. Sin embargo, el uso de PHP-GetText no invalida que puedas valerte de herramientas como PO-Edit, por poner un ejemplo, de modo que puedes aprovecharte de toda la infraestructura creada alrededor de GetText.

2º "index.php" puede saber qué lenguaje utilizar de varias formas Crandel. Imagina que para establecer el lenguaje de la aplicación utilizas un formulario. Una simple lista de opciones puede bastar, pero el caso es que pertenezca a un formulario que pueda ser procesado.

Al procesar dicho formulario tú puedes guardar el lenguaje seleccionado por el usuario de varias formas: en una Cookie, en una variable de sesión, en una base de datos... de modo que luego en "index.php" puedes revisar el sitio que sea menester para averiguar qué lenguaje hay establecido.

De todos modos ya digo: el asunto puede complicarse lo que se quiera. La base es la misma: el mismo Array se define en varios archivos. Las claves del Array son las mismas, pero los valores no: corresponden cada uno a la cadena traducida correspondiente. Basta con incluir el archivo adecuado para que el Array en uso sea el que corresponde al lenguaje que nos interese.

En nuestro ejemplo el archivo "index.php" se entera del lenguaje a utilizar mediante una variable "GET", es decir, que para que "index.php" mostrase las cadenas en español habría que llamar al Script tal que así:


http://www.tusitio.com/index.php?lenguaje=espanol


O así:


http://www.tusitio.com/index.php?lenguaje=ingles


Para establecer/utilizar el inglés.

Así que lo de guardar el lenguaje en una variable de sesión o en una Cookie, por ejemplo, sirve, precisamente, para no tener que llamar al Script incluyendo la variable lenguaje en la URL. Es decir, tenemos un Script que establece un lenguaje: guarda "espanol" en una Cookie, y luego, cuando queramos averiguar qué lenguaje está establecido (y qué archivo debemos incluir) bastaría con mirar el valor de dicha Cookie para averiguarlo.

Crandel
08-01-2007, 02:28:13
Gracias de nuevo. Estuve probando el sistema de archivos y funciona muy bien.

Ahora estoy probando PHP-gettext y tambien parece interesante, voy a hacer un par de pruebas mas y me voy a dormir que no le vanto para trabajar mañana :D

ya seguire molestando mañana. :p

dec
08-01-2007, 02:32:02
Hola,

No molestas, hombre. Que sueñes con los angelitos. :D

kayetano
09-01-2007, 11:59:47
Hola

Yo el sistema multilenguaje lo realizo de otra forma:
- Primero, en vez de pasar siempre por metodo GET el idioma, lo cargo en una cookie y asin me dura toda la sesion.
- Para cargar los archivo nada mas facil que esto:

<?
...
include( "idiomas/". $_COOKIE['lang'] ."/". basename( $_SERVER['PHP_SELF'] ) );
...
?>

Sinedo $_COOKIE['lang'] el idioma en el que estoy (esp, eng, fra, deu, ...)
De esta forma cargo la traducción correspondiente a la página que estoy visualizando.

Yo en vez de utilizar arrays para guardar las traducciones utilizo constantes.

rcuevas
16-01-2007, 18:19:38
Buenas tardes, noches, días, mañanas o madrugadas (qué grande es esto de internet):

Tan sólo quería agradecer nuevamente las valoraciones aportadas por cada uno de vosotros, y siento no poder haber aportado nada nuevo más al tema desde hace ya mucho tiempo.