Foros del Web » Programando para Internet » PHP »

Sitio Multilingue

Estas en el tema de Sitio Multilingue en el foro de PHP en Foros del Web. Creo que fui un poco ambiguo con el titulo, pero ahora me explico. Quiero hacer una funcion o varias que por ejemplo. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 19/10/2009, 03:27
Avatar de Animeonx  
Fecha de Ingreso: agosto-2009
Ubicación: Debajo de tu Cama
Mensajes: 56
Antigüedad: 14 años, 7 meses
Puntos: 3
Sitio Multilingue

Creo que fui un poco ambiguo con el titulo, pero ahora me explico.
Quiero hacer una funcion o varias que por ejemplo.

Código php:
Ver original
  1. function t($text){
  2.     $lang = $_COOKIE['lang'];
  3.     /* No se, se me ocurre que abriendo
  4.     un archivo .xml busque la cadena de texto
  5.     la compare y regrese su igual, pero en el idioma
  6.     seleccionado.
  7.    
  8.     Ejemplo.
  9.     <idioma lang="en">
  10.         <cadena>
  11.             <texto>Hola mundo</texto>
  12.             <traduccion>Hello world</traduccion>
  13.         </cadena>
  14.     </idioma>  
  15.     */
  16. }
  17. $welcome = t("Hola mundo");
  18. echo $welcome; // Lo cual deberia imprimir "Hello world"

Espero y me puedan orientar un poco.
__________________
Si te gusto/sirvió mi respuesta, dame un buen karma... no se que utilidad tenga en el foro, pero eleva mi ego. :D
--
Comunidad Anime | ikawaii.net
  #2 (permalink)  
Antiguo 19/10/2009, 04:54
Avatar de AnisDelMono  
Fecha de Ingreso: febrero-2007
Ubicación: Pas de la Casa
Mensajes: 247
Antigüedad: 17 años, 2 meses
Puntos: 7
Respuesta: Sitio Multilingue

Hola

Eso se consigue mediante la definicion de constantes. En base a un idioma, se carga un archivo u otro.

Código PHP:

//en un archivo con nombre castellano.php
define('SALUDO','Hola');

//en ingles.php
define('SALUDO','Hello');

//en frances.php
define('SALUDO','Bonjour');

//cargarias un archivo u otro segun el idioma. Y luego:

echo SALUDO
__________________
=>=>=>=>=>=>=>=>=>=>=>=>=>
¡Disidente!
Frente Popular de Judea, Life of Brian
  #3 (permalink)  
Antiguo 19/10/2009, 10:42
Avatar de dyegox  
Fecha de Ingreso: enero-2008
Mensajes: 173
Antigüedad: 16 años, 3 meses
Puntos: 7
Respuesta: Sitio Multilingue

hola justo estoy intentando lo mismo estoy haciendo algo asi

este archivo contiene la funcion que extrae del xml y genera un array
con la variable $over se obtienen los distintos textos
Código PHP:
<?php
session_start
();
error_reporting();

function 
fetch_xml($xml){ 

    if(
is_file($xml)){ 
        
$xml_data file_get_contents($xml); 
    } 
    else{ 
        
$xml_data $xml;     
    } 
    
$parser xml_parser_create(); 
    
xml_parse_into_struct($parser$xml_data, &$assoc_arr, &$idx_arr); 
    
xml_parser_set_option($parserXML_OPTION_CASE_FOLDING0); 
    
xml_parser_set_option($parserXML_OPTION_SKIP_WHITE1); 
    
$root_tag $assoc_arr[0]['tag']; 
    
$base_tag strtolower($assoc_arr[1]['tag']); 
    
$i 0
    foreach(
$assoc_arr as $key => $element){ 
        if(
$element['tag'] != $root_tag){ 
            if(!
preg_match('/^\s+$/'$element['value'])){ 
                
$tag strtolower($element['tag']); 
                
$items[$i][$tag] = $element['value']; 
                if(
$tag == $base_tag){ 
                    
$i++; 
                } 
            } 
            elseif(isset(
$element['attributes'])){ 
                
$items[$i]['id'] = $element['attributes']['ID']; 
            } 
        } 
    } 

    return 
$items


$over fetch_xml('lang/es_ES/default.xml'); 

$lang $over[0];

function 
__($value){
return 
$over[0][$value];
}

echo 
$over[0]["exit"];

echo 
__("exit"); // NO SE POR QUE NO FUNCIONA


?>
nos eporque no funciona una pequeña funcion que haria que para obtener el texto teng aque hacer algo asi

Código PHP:
<?php
echo __("exit");
?>
lo que imprimiria "logout"

mis archivo xml son asi

Código HTML:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xml:lang>
	<traslate id="es_ES">
		<home>Inicio</home>
		<register>Registro</register>
		<exit>Salir</exit>
	</traslate>
</xml:lang> 
  #4 (permalink)  
Antiguo 19/10/2009, 13:38
Avatar de Animeonx  
Fecha de Ingreso: agosto-2009
Ubicación: Debajo de tu Cama
Mensajes: 56
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Sitio Multilingue

He estado examinando la sugerencia de AnisDelMono y me parece una manera muy sencilla de implementar la traducción. También el trozo de script de dyegox se ve interesante, lo voy a probar... aunque creo que hay cosas que pueden simplificarse, pero hasta no probar no sabré.
Tratare de checar que es lo que genera el error. Saludos!
__________________
Si te gusto/sirvió mi respuesta, dame un buen karma... no se que utilidad tenga en el foro, pero eleva mi ego. :D
--
Comunidad Anime | ikawaii.net
  #5 (permalink)  
Antiguo 19/10/2009, 14:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Sitio Multilingue

Lo mejor es usar formas más oficiales, y una de ellas es usando gettext.

Saludos.
  #6 (permalink)  
Antiguo 20/10/2009, 16:29
Avatar de dyegox  
Fecha de Ingreso: enero-2008
Mensajes: 173
Antigüedad: 16 años, 3 meses
Puntos: 7
Respuesta: Sitio Multilingue

hola ya la funcion funciona :
Código PHP:
<?php 
function __($value){ 
return 
$GLOBALS['over'][0][$value]; 

echo 
__("exit"); 
?>
  #7 (permalink)  
Antiguo 20/10/2009, 16:40
 
Fecha de Ingreso: octubre-2009
Mensajes: 100
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Sitio Multilingue

Yo te recomendaria que hicieras independientes para cada idioma
Es decir
spanish.php, english.php, otroidioma.php

En cada uno declaras tus constantes

define(’HOLA’, ‘Hola mundo’); y asi sucesivamente en cada idioma.
Luego para mostrar el sitio segun el idioma que necesites a la url deberias agregarle
?language=en o ?language=es segun sea el caso.
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




La zona horaria es GMT -6. Ahora son las 15:08.