Foros del Web » Programando para Internet » PHP »

Múltiples idiomas en la web

Estas en el tema de Múltiples idiomas en la web en el foro de PHP en Foros del Web. Muy buenas. Tengo una dudilla. Si yo quiero tener un sitio en varios idiomas por lo que he leído lo ideal sería hacerlo mediante sesiones, ...
  #1 (permalink)  
Antiguo 19/04/2012, 02:31
Avatar de Jask  
Fecha de Ingreso: abril-2006
Ubicación: Madrid
Mensajes: 770
Antigüedad: 13 años, 10 meses
Puntos: 15
Múltiples idiomas en la web

Muy buenas.

Tengo una dudilla. Si yo quiero tener un sitio en varios idiomas por lo que he leído lo ideal sería hacerlo mediante sesiones, pero como tendría que ser la organización de archivos o variables. Es decir, me imagino que habrá una variable, que diga por ejemplo $welcoma y sera un array asociativo, rollo "es" => "Bienvenido", "en"=>"Welcome" y así para los idiomas que crea conveniente.

Ustedes que alternativa o que forma utilizan para hacerlo?

Gracias
__________________
Os iusti meditabitur sapientiam
Si te he ayudado, por qué no un poquito de Karma :) ?
  #2 (permalink)  
Antiguo 19/04/2012, 02:50
Avatar de TheScript  
Fecha de Ingreso: septiembre-2011
Ubicación: Spain
Mensajes: 164
Antigüedad: 8 años, 5 meses
Puntos: 30
Respuesta: Múltiples idiomas en la web

Hola Jask, hace tiempo tuve la misma necesidad que tu... como tu dices esta es una de las maneras:

Código PHP:

<?php
// averiguamos cual es el idioma configurado en el navegador del visitante 
if ($HTTP_ACCEPT_LANGUAGE != ''){
    
$idiomas explode(","$HTTP_ACCEPT_LANGUAGE);
    
// Convertimos HTTP_ACCEPT_LANGUAGE en array 
    
for ($i=0$i<count($idiomas); $i++){ 
        if (!isset(
$idioma)){
            if (
substr($idiomas[$i], 02) == "es"){$idioma "es";} 
            if (
substr($idiomas[$i], 02) == "en"){$idioma "en";} 
            if (
substr($idiomas[$i], 02) == "fr"){$idioma "fr";} 
        } 
    } 

// Si no averiguamos el idioma del visitante usamos un idioma por defecto
if (!isset($idioma)){$idioma "es";}  
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Mi web</title>
</head>
<body>
<?php
switch ($idioma) { 
case 
'es'
  echo 
"Bienvenidos a España"
  break; 
case 
'en'
  echo 
"Welcome to England"
  break;
case 
'fr'
  echo 
"Bienvenue à la France"
  break; 
default: 
  echo 
"Bienvenidos a España"
  break; 
}  
?>
</body>
</html>
También puedes ojear este enlace, en el que dan varias opciones:

http://web.ontuts.com/tutoriales/apl...multilenguaje/


Por otro lado, también vi que hay gente que trabaja con la api de google para traducir textos no muy exagerados.

Espero haberte ayudado aunque sea un poquiyo. Un saludo.
  #3 (permalink)  
Antiguo 19/04/2012, 03:16
Avatar de Jask  
Fecha de Ingreso: abril-2006
Ubicación: Madrid
Mensajes: 770
Antigüedad: 13 años, 10 meses
Puntos: 15
Respuesta: Múltiples idiomas en la web

Cita:
Iniciado por TheScript Ver Mensaje
Hola Jask, hace tiempo tuve la misma necesidad que tu... como tu dices esta es una de las maneras:

Código PHP:

<?php
// averiguamos cual es el idioma configurado en el navegador del visitante 
if ($HTTP_ACCEPT_LANGUAGE != ''){
    
$idiomas explode(","$HTTP_ACCEPT_LANGUAGE);
    
// Convertimos HTTP_ACCEPT_LANGUAGE en array 
    
for ($i=0$i<count($idiomas); $i++){ 
        if (!isset(
$idioma)){
            if (
substr($idiomas[$i], 02) == "es"){$idioma "es";} 
            if (
substr($idiomas[$i], 02) == "en"){$idioma "en";} 
            if (
substr($idiomas[$i], 02) == "fr"){$idioma "fr";} 
        } 
    } 

// Si no averiguamos el idioma del visitante usamos un idioma por defecto
if (!isset($idioma)){$idioma "es";}  
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Mi web</title>
</head>
<body>
<?php
switch ($idioma) { 
case 
'es'
  echo 
"Bienvenidos a España"
  break; 
case 
'en'
  echo 
"Welcome to England"
  break;
case 
'fr'
  echo 
"Bienvenue à la France"
  break; 
default: 
  echo 
"Bienvenidos a España"
  break; 
}  
?>
</body>
</html>
También puedes ojear este enlace, en el que dan varias opciones:

http://web.ontuts.com/tutoriales/apl...multilenguaje/


Por otro lado, también vi que hay gente que trabaja con la api de google para traducir textos no muy exagerados.

Espero haberte ayudado aunque sea un poquiyo. Un saludo.
Me has ayudado demasiado jajajaja muy bueno la verdad !

Mil gracias es na forma bastante sencilla de implementarlo !!
__________________
Os iusti meditabitur sapientiam
Si te he ayudado, por qué no un poquito de Karma :) ?
  #4 (permalink)  
Antiguo 19/04/2012, 05:04
Avatar de wsoul  
Fecha de Ingreso: octubre-2010
Mensajes: 190
Antigüedad: 9 años, 4 meses
Puntos: 13
Respuesta: Múltiples idiomas en la web

pues yo eso lo veo de una forma bastante mala.

cara a google eso es malo, yo prefiero ponerlo en carpetas o subdominios.

ejemplo

http://www.linkbuildingdb.com es una web que hice hace nada en 2 idiomas.

tiene dos carpetas /en y /es

en la raiz (sin en ni es) mira el lenguaje de tu navegador y te lleva a la carpeta correspondiente.

y en /es/index.php tengo el siguiente archivo:

Código PHP:
Ver original
  1. <?php
  2.     $lang = "es";
  3.     include("../inicio.php");
  4. ?>

y luego en inicio.php toda la web y esto:

Código PHP:
Ver original
  1. include("../idiomas/{$lang}.php");

así cargo el idioma que quiero (por que así, solo tengo que modificar una vez el código y se modifica en ingles y en español.

y el es.php lo tengo así

Código ASP:
Ver original
  1. $txt['menu'][0] = "Inicio";
  2.     $txt['menu'][1] = "Generador de Enlaces";
  3.     $txt['menu'][2] = "Enlaces en Comentarios";
  4.     $txt['menu'][3] = "Enlaces en Perfiles";
  5.     $txt['menu'][4] = "Enlaces en Firmas";

y así si quiero agregar otro idioma, es mucho mas fácil
__________________
Compra y Vender artículos en https://www.losredactores.com o una comunidad de webmasters ? https://webeamos.com
  #5 (permalink)  
Antiguo 19/04/2012, 05:17
Avatar de Jask  
Fecha de Ingreso: abril-2006
Ubicación: Madrid
Mensajes: 770
Antigüedad: 13 años, 10 meses
Puntos: 15
Respuesta: Múltiples idiomas en la web

Cita:
Iniciado por wsoul Ver Mensaje
pues yo eso lo veo de una forma bastante mala.

cara a google eso es malo, yo prefiero ponerlo en carpetas o subdominios.

ejemplo

http://www.linkbuildingdb.com es una web que hice hace nada en 2 idiomas.

tiene dos carpetas /en y /es

en la raiz (sin en ni es) mira el lenguaje de tu navegador y te lleva a la carpeta correspondiente.

y en /es/index.php tengo el siguiente archivo:

Código PHP:
Ver original
  1. <?php
  2.     $lang = "es";
  3.     include("../inicio.php");
  4. ?>

y luego en inicio.php toda la web y esto:

Código PHP:
Ver original
  1. include("../idiomas/{$lang}.php");

así cargo el idioma que quiero (por que así, solo tengo que modificar una vez el código y se modifica en ingles y en español.

y el es.php lo tengo así

Código ASP:
Ver original
  1. $txt['menu'][0] = "Inicio";
  2.     $txt['menu'][1] = "Generador de Enlaces";
  3.     $txt['menu'][2] = "Enlaces en Comentarios";
  4.     $txt['menu'][3] = "Enlaces en Perfiles";
  5.     $txt['menu'][4] = "Enlaces en Firmas";

y así si quiero agregar otro idioma, es mucho mas fácil
Me ha gustado esta opción. No termino de ver a la hora de que se cargue la web que te muestre un texto u otro pero está bastante interesante.

Cualquier aporte es más que bienvenido :)

Gracias
__________________
Os iusti meditabitur sapientiam
Si te he ayudado, por qué no un poquito de Karma :) ?
  #6 (permalink)  
Antiguo 19/04/2012, 05:58
Avatar de wsoul  
Fecha de Ingreso: octubre-2010
Mensajes: 190
Antigüedad: 9 años, 4 meses
Puntos: 13
Respuesta: Múltiples idiomas en la web

te hecho un tutorial :P

http://www.wsoulrc.com/como-crear-un...iomas-con-php/

haber si te queda mas claro
__________________
Compra y Vender artículos en https://www.losredactores.com o una comunidad de webmasters ? https://webeamos.com
  #7 (permalink)  
Antiguo 19/04/2012, 06:06
Avatar de Jask  
Fecha de Ingreso: abril-2006
Ubicación: Madrid
Mensajes: 770
Antigüedad: 13 años, 10 meses
Puntos: 15
Respuesta: Múltiples idiomas en la web

Cita:
Iniciado por wsoul Ver Mensaje
te hecho un tutorial :P

http://www.wsoulrc.com/como-crear-un...iomas-con-php/

haber si te queda mas claro
Qué nivel !! jeje mil gracias, ahora le echaré un vistazo :)
__________________
Os iusti meditabitur sapientiam
Si te he ayudado, por qué no un poquito de Karma :) ?
  #8 (permalink)  
Antiguo 19/04/2012, 06:29
 
Fecha de Ingreso: noviembre-2011
Ubicación: 127.0.0.1
Mensajes: 8
Antigüedad: 8 años, 3 meses
Puntos: 3
Respuesta: Múltiples idiomas en la web

Yo utilizo ésta clase para manipular un archivo xml donde almaceno las traducciones.


Código PHP:
class languages {
    
    public 
$tr$language;
    private 
$engine;
    
    function 
__construct() {
        
        
$this->xml=simplexml_load_file('inc/multilenguaje.xml');
        
$this->setLang();        

    }
    
    public function 
setLang() {
    
// select language
    
if (!isset($lang)) {
        if (isset(
$_GET['lang'])) {
            
$lang=$_GET['lang'];
        } else {
            
$langgetPreferredLanguage();
        }
        
        if (!
$this->validateLang($lang)) {
            echo 
sprintf("<h1>Language '%s' not supported!</h1>"$lang);
            die;
        }
        
$this->language=$lang;
        @
setcookie('lang'$lang); 
        } else {  @
setcookie('lang'$lang); $this->language=$lang; }
    }
    
    public function 
validateLang($language) {
      if (
strchr("ites"$language)) { 
        
$this->language=$language;
            return 
True;
        } else { 
            return 
False;
        } 
    }
    
    public function 
gets($key$item) {
        
$xpath='/translation2/pages/page[@key="' $item '"]/string[@key="' $key '"]/tr[@lang="' $this->language '"]';
        
$data=$this->xml->xpath($xpath);
        return 
$data;
    }
    
    public function 
getPage($key) {
        
$xpath='/translation2/pages/page[@key="' $key '"]/string/tr[@lang="' $this->language '"]';
        
$xpath2='/translation2/pages/page[@key="' $key '"]/string/@key';
        
$xmlitems=$this->xml->xpath($xpath);        
        
$xmlkeys=$this->xml->xpath($xpath2);

        
$pg=array();
        for (
$i=0;$i<=count($xmlitems);$i++) {
            
$pg["{$xmlkeys[$i]}"]=$xmlitems[$i];                        
        }    
        
        return (array)
$pg;
    }


Y en cada página puedes poner :

Código PHP:
$l=new languages(); 
más adelante, para obtener cada definición :

Código PHP:
$c=$l->getPage('cabecera'); 
muestras el contenido con:

Código PHP:
<?=$c["hola"]; ?>
la sintaxis del archivo xml es la siguiente :

Código:
<?xml version="1.0" encoding="UTF-8"?>
<translation2>
    <languages>
        <lang id='es'>
            <name>Castellano</name>
            <meta/>
            <error_text>No disponible</error_text>
            <encoding>UTF-8</encoding>
        </lang>
        <lang id='en'>
            <name>English</name>
            <meta/>
            <error_text>Not allowed</error_text>
            <encoding>UTF-8</encoding>
        </lang>
    </languages>
    <pages>
        <page key='cabecera'>
            <string key='hola'>
                <tr lang='es'>Bienvenido a nuestra página</tr>
                <tr lang='en'>Welcome to our home page</tr>
            </string>
            <string key='inicio'>
                <tr lang='es'>Inicio</tr>
                <tr lang='en'>Home</tr>
            </string>
            <string key='quienes_somos'>
                <tr lang='es'>Quienes somos</tr>
                <tr lang='en'>Who are we</tr>
            </string>
        </page>
     </pages>
</translation2>
El acceso se hace mediante un parámetro get : page.com?lang=es

Si necesitas más información, no dudes en preguntar.

Saludos!

Última edición por j4vitux; 19/04/2012 a las 06:36
  #9 (permalink)  
Antiguo 19/04/2012, 06:39
Avatar de wsoul  
Fecha de Ingreso: octubre-2010
Mensajes: 190
Antigüedad: 9 años, 4 meses
Puntos: 13
Respuesta: Múltiples idiomas en la web

no es mala idea, saludos ^^
__________________
Compra y Vender artículos en https://www.losredactores.com o una comunidad de webmasters ? https://webeamos.com

Etiquetas: traduccion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 01:36.