2011-10-01 12 views
5

He rescatado un viejo proyecto que originalmente fue escrito solo para el público español y ahora tengo que internacionalizarlo.¿Cómo implementar la traducción en un proyecto web existente?

Este proyecto cuenta con 3 tipos de cadenas de texto:

  • Cuerdas escritos desde PHP: Por ejemplo: echo "Hello World"
  • cadenas cortas en campos de la base: campos de bases de datos que contienen texto , por ejemplo, listas de nombres de países.
  • cadenas HTML incrustado (archivos estáticos): Por ejemplo, un archivo estático que contiene un archivo HTML: <html>...<body>...<p>Hello world</p> ...
  • HTML incrustado cuerdas (base de datos): Igual que el anterior, pero el archivo HTML se inserta en una campo de texto en la base de datos.

Primero no hay problema, porque hay muy pocos hilos y muy localizados. El segundo caso también está muy localizado, por lo que no es realmente un gran problema. Pero los últimos dos casos son inmanejables: cientos de archivos HTML (estáticos + base de datos) con cientos de cadenas dentro.

Por lo tanto, estoy buscando un método automatizado para extraer todas las cadenas en un formato reconocible, entregárselo a los traductores y luego tener mis páginas en otros idiomas.

¿Existe algo similar o debería crear una solución personalizada? En este caso, ¿alguna idea?

Respuesta

8

Ok. El I18n (Internacionalización) es algo bastante extraño. Debe hacer muchos cambios en su código para hacerlo multilingüe.

Para mí, la mejor solución es moverlo en CakePHP que ya admite el I18n en muchas capas. Pero esta solución te hará pasar mucho tiempo. Así que ....

Un método rápido para la traducción de textos internos como

echo "Hello World" 

o

<p>Hello World</p> 

es crear un archivo de lenguaje apropiado con extensión php para cada idioma (es decir: ES. php, el.php, en.php, un etc.) que contendrá un array con claves y valores que se ve así:

$l = array(
    'WEB_TITLE' => 'My web site title', 
    'GEN_HELLO' => 'Hello World', 
    'MENU_HOME' => 'Home', 
    'MENU_PRODUCTS' => 'Products', 
    ... 
); 

luego en su sitio web que tendrá que cargar el archivo de lenguaje apropiado en el comienzo de cada página y en su página que tiene que hacer algo así:

echo $l['GEN_HELLO']; 

y

<p><?php echo $l['GEN_HELLO']; ?></p> 

Es decir el lado frontal de tu aplicación. Ahora, para que sus datos sean multilingües, debe cambiar la estructura de la base de datos de alguna forma.

Digamos que tiene esa mesa

ARTICLES 
id Title Content Date Active 

En la estructura anterior que tiene que hacer Título y I18n contenido compatibles. Con el fin de traducir que las columnas que tiene que crear otra tabla llamada en el ejemplo ARTICLES_L que se verá como que

ARTICLES_L 
ID POST_ID COLUMN LANGUAGE CONTENT 

en la tabla anterior se tienen que almacenar el id de artículo, la columna que la traducción pertenece (es decir: el título) el idioma y el contenido traducido.

Así que si usted tiene que los registros en los artículos

ARTICLES 
id Title Content   Date     Active 
1  Title 1 This is content 1 2011-10-01 13:28:45 1 
2  Title 2 This is content 2 2011-10-01 13:28:45 1 
3  Title 3 This is content 3 2011-10-01 13:28:45 1 

El ARTICLES_L tabla contendrá que los registros

ARTICLES_L 
ID POST_ID COLUMN LANGUAGE CONTENT 
1  1   title  es_ES  Título 1 
2  1   content es_ES  Este es el contenido 1 
3  1   title  el_GR  Τίτλος 1 
4  1   content el_GR  Αυτό είναι το περιεχόμενο 1 
5  2   title  es_ES  Título 2 
6  2   content es_ES  Este es el contenido 1 
.... 

En realidad hay muchas, muchas otras tareas que tienen que hacer, pero este es el idea detrás de la solución que te estoy dando :)

Buena suerte

PN: Aún mejor para la parte frontal de su aplicación es utilizar http://php.net/manual/en/book.gettext.php De esta manera es la forma en que se utiliza desde WordPress y CakePHP, pero en un nivel muy bajo:? Solo echa un vistazo. Esto será mejor que crear archivos para cada idioma.

+0

¿Le sirvió de algo? –

+1

Realmente, gracias !! – Ivan

+0

De nada :) –

Cuestiones relacionadas