Detectar idioma -> mostrar web en dicho idioma

VipeR_CS

Bueno, a raíz de un código que he visto mientras estudiaba mi lección diaria de php, me he preguntado si sería posible modificarlo de tal manera que afecte a toda una página web. El código es el siguiente:

<HTML>
<HEAD>
<TITLE>Detector de Lengua</TITLE>
</HEAD>
< BODY>
<?
//Antes de nada introducimos mensajes en forma de variables
$espanol="Hola";
$ingles="Hello";
$aleman="Hallo";

//Ahora leemos del navegador cuál es su lengua oficial
$idioma=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);

//Formulamos las posibilidades que se pueden dar
if ($idioma == "es")
{echo "$espanol";}
elseif ($idioma=="de")
{echo "$aleman";}
else
{echo "$ingles";}
?>
</ BODY>
</HTML>

Yo no sé como hacerlo debido a que en este ejemplo se meten las frases por medio de variables, y no vas a meter una web entera en una variable... pero me gustaría saber si es posible. Thx :D

Whose

A ver si esto te sirve
http://www.aeoris.net/escritos/php/construir-aplicaciones-multilenguaje-con-gettext.html

M

yo estoy buscando como poner las banderitas
en mi web, asi cuando entran les traduce la web.
vale, no será exacto pero asi gente de otros paises se entera

-nazgul-

Una web entera no. A ver:

Mensajes:

$msg1[es]="Hola";
$msg1[us]="Hello";
$msg1[de]="Hallo";

echo $msg1[$idioma];

Contenidos:

Usas un campo "Idioma"

No se si habrá una manera más fácil, imagino que si pero la desconozco.

erdanblo

Si el servidor web es apache, hay una manera para que creando los archivos index.html.es o algo asi era, te los abria según el idioma del navegador.

VipeR_CS

Bueno gracias, parece que no hay manera salvo el gettext y fácil precisamente no parece :P

SeiYa

Pues con ese ejemplo, en vez del echo "$espanol"; que le lleve a una página donde tengas todo en español, lo mismo el inglés lo mismo el alemán, es un modo muy cutre pero muy fácil si es lo que quieres.

Crawler

El idioma debería de ser escogido siempre por el usuario, y no en función a su sistema operativo.
Por qué? Bueno, aqui van algunos ejemplos:

1) Mi padre tiene su windows en inglés, mi hermano pequeño no tiene ni papa de inglés, pero quiere visitar tu página...

2) Estoy de vacaciones en Alemania, pero yo de alemán no se ni papa, entro a un ciber y llego a tu página... todo en alemán? :S

Como minimo, deberias tener un sistema MUY a la vista, para que el usuario pudiera poner la página en su idioma (aunque la hayas cargado en otro)

Es solo un poco de usabilidad/sentido común, pienso yo. ;)

Whose

Hay muchas formas, almacenandolas en un array o cosas de ese estilo pero parece que la forma mas correcta es la de gettext

VerXeR

soy new en esto del php pero si lo que quieres es que te aparezca la web en el idioma que sea, suponiendo que te lo detectara automaticamente "creo" que asi se podria, no me hagas mucho caso pq soy noob en esto del php:

<HTML>
<HEAD>
<TITLE>Detector de Lengua</TITLE>
</HEAD>
< BODY>
<?
//Antes de nada introducimos mensajes en forma de variables
$espanol="Hola";
$ingles="Hello";
$aleman="Hallo";

//Ahora leemos del navegador cuál es su lengua oficial
$idioma=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);

//Formulamos las posibilidades que se pueden dar
&nbsp;&nbsp;&nbsp;if ($idioma=="es") {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "<script> window.location = 'aqui la url para entrar al sitio en el idioma español' </script>";
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($idioma=="de") {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "<script> window.location = 'aqui la url para entrar al sitio en el idioma alemán' </script>";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "echo "<script> window.location = 'aqui la url para entrar al sitio en el idioma inglés' </script>";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
?>
</ BODY>
</HTML>

PD: seria una xapuza, pero creo que asi te redireccionaria segun el lenguaje del navegador (si es eso lo que detecta automaticamente) a la url donde hayas creado esa web en php, nose... yo que tu no me fiaria muxo de mi invento.. xDDDDDD

Crawler

si, VerXeR,un poco de lio si que es, tanto if/else :P
No es mejor que lo hagas mediante switch/case y acabarias antes?

tracker086

weno aora mismo hace mazo qno programo en php, y si en C++, asiq no se si la sintaxis stara bien exa..pero yo lo haria asi :P, con un switch e includes.

<HTML>
<HEAD>
<TITLE>Detector de Lengua</TITLE>
</HEAD>
< BODY>
<?
$idioma=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);

switch ($idioma);
{
case es:
include('index_es.php');
break;
case en:
include('index_en.php');
break;
default:
include('index_es.php');
}

?>
</ BODY>
</HTML>

tracker086

a ver, otra idea q e tenido para hacerla mas "dinamica" la web , seria:

<HTML>
<HEAD>
<TITLE>Detector de Lengua</TITLE>
</HEAD>
< BODY>
<?
$idioma=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);

if (file_exists("index".$idioma.".php"))
{
require_once("index
".$idioma.".php");
}else{
require_once("index_es.php");
}
}

?>
</ BODY>
</HTML>

Vale te hago una pekeña explicacion, lo q hace es pillar la variable idioma, y una vez q la pilla mira si existe algun archivo llamado index_$idioma.php(ejemplo: index_en.php), si lo hay, lo incluye, y si por lo contrario no existe...te pone uno predeterminado, como puede ser el español o ingles. ok?, asi es mas dinamico.....incluso podrias complicarlo un poco mas, para tb poner la seccion como una variable, ahi la seccion q e puesto seria index, ok? lo entiendes?

guner

-- lang.php

<?php

error_reporting(E_ALL); #dbg

define('LANG' , strtoupper(substr(@$SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)));
define('
LANG_DEFAULT_', 'ES');

$lang = file(file_exists('./lang/' . LANG . '.lang')
&nbsp;&nbsp;&nbsp;&nbsp;? ('./lang/' . LANG . '.lang')
&nbsp;&nbsp;&nbsp;&nbsp;: ('./lang/' . LANG_DEFAULT . '.lang')
);

if (!$lang) die('');

foreach ($lang as $key => $value) {
&nbsp;&nbsp;&nbsp;&nbsp;if (preg_match('#[A-Z_]{2,12}\=(.+)$#', $value, $coinc)) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$lang['LANG_' . $coinc[1]] = $coinc[2];
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;unset ($lang[$key]);
}

function printwl($lref)
{
&nbsp;&nbsp;&nbsp;&nbsp;for ($i = 1; $i <= func_num_args() - 1; $i++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tmp = (string) func_get_arg($i);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ret = str_replace('%' . $i, $GLOBALS['lang']['LANG_' . $tmp], $lref);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;return print $ret;
}

-- index.php

<?php

include 'lang.php';

printwl("%1 %2", 'SIOKE', 'MEDIA_VIDA');

-- ./lang/ES.php

SIOKE=Yuju!
MEDIA_VIDA=Comunidad de jugadores online

Según lo anterior debería imprimr:
Yuju! Comunidad de jugadores online

Esto es una librería que hice hace un tiempo está sin acabar, le he hecho algunos retoques, pero es demasiado lenta por el uso reiterado de expresiones regulares.

VipeR_CS

O_o Pues al final sí que se podía... y de 43456547 formas diferentes por lo que veo. Me será muy útil esto ^^

tracker086

Yo si kieres, a la ora de utilizar un metodo u otro....te puedo explicar mas o menos cual podrias usar...yo me decantaria por el segundo q e puesto yo, o el de guner.

El sistema q utiliza guner, es similar al q se usa en algun CMS como phpnuke.

Si lo q kieres es hacer una web, cuya traduccion sea solo la "interface", es decir, q traduzca el tema q si de menus, footer...header...cosas asi....pos sin duda utilizaria el metodo de guner.

Pero si lo q kieres es crear web, cuyo contenido (ejemplo, noticias, reviews...o lo q kieras), lo kieres poner tb en distintos idiomas....lo q creo q es mas facil sq lo hagas con mi segunda forma(sino es algo q ste cambiando diariamente)...

Aunq si te lo kieres currar bien, el metodo de guner es el mejor, si a eso luego le sumas, todas las noticias en la base de datos, en distintos idiomas...pos triunfa xD, luego solo tendrias q hacer un switch a la ora de mirar la info en la base de datos:

switch($idioma)
{
case es:
//sentencia MYSQL en la base de datos, q buske la noticia en español.
case en:
//sentencia MYSQ en la base de datos, q busque la noticia en ingles.

etc etc....me entiendes?

no se....si kieres complicarte la vida hay mil formas, si lo q kieres es una web de contenido q cambie constantemente, haria lo de guner, mas lo q te acabo de poner.... si tines una web cuyo contenido es mas bien estatico...q no cambie amenudo, kizas con hacer 3 index uno en cada idioma....valdria...no se...segun las necesidades q tngas tienes distintas opciones.

Enga saludos!!

Usuarios habituales

  • tracker086
  • VipeR_CS
  • guner
  • Crawler
  • Whose
  • -nazgul-
  • mccd