Foros del Web » Programando para Internet » PHP »

Sistema multilenguaje con manejo de placeholders

Estas en el tema de Sistema multilenguaje con manejo de placeholders en el foro de PHP en Foros del Web. Buenas tardes muchachos, si bien se que hay mucha documentación al respecto, no encontré nada que cumpla con mis expectativas, lo que estoy buscando es ...
  #1 (permalink)  
Antiguo 26/07/2015, 18:51
 
Fecha de Ingreso: agosto-2009
Ubicación: Buenos Aires
Mensajes: 13
Antigüedad: 14 años, 8 meses
Puntos: 0
Pregunta Sistema multilenguaje con manejo de placeholders

Buenas tardes muchachos, si bien se que hay mucha documentación al respecto, no encontré nada que cumpla con mis expectativas, lo que estoy buscando es un sistema de lenguajes facil de implementar en una web (o bien actualizar el que ya poseo) en el cual se puedan pasar variables / placeholder o como quieran llamarlo, con eso me refiero a poder tener cadenas de texto del estilo:

login_bienvenido = "Bienvenido %s, gracias por conectarte al sitio."

Adjunto el codigo que tengo actualmente, para ver si alguien me puede ayudar a implementar esto, de paso tambien quisiera saber que es mas efectivo, si utilizar arrays o defines (en terminos de rendimiento).

Muchas gracias!!!

Clase de Lenguajes:
Código PHP:
$LANG_LIST = array(
'en' => array('English','us.gif'),
'es' => array('Español','AR.gif'),
);

class 
Lang{
    private 
$language;
    
    public function 
__construct()
    {
        
$this->SetLang();
    }
    private function 
CheckLangArchive($DirLang){
        
$language "modules_/languages/".$DirLang.".php";
        if(
file_exists($language))
            return 
TRUE;
        else
            return 
FALSE;    
    }
    
    private function 
DetectLang(){
        global 
$LANG_LIST;
        if (
$_SERVER['HTTP_ACCEPT_LANGUAGE']){
            
$this->language_temp substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
        }
        else{
            
$this->language_temp language_default;
        }
        
        
$this->language ereg_replace("[^a-z]","",$_GET['changelang']);
        if(empty(
$_COOKIE[language_cookie])){
            if(empty(
$this->language)){
                
$this->language $this->language_temp;
            }
            else{
                if(
array_key_exists($this->language,$LANG_LIST) == FALSE){
                    
$this->language $this->language_temp;
                }
            }
        }
        else{
            if(empty(
$this->language)){
                
$this->language $_COOKIE[language_cookie];
            }
            else{
                if(
array_key_exists($this->language,$LANG_LIST) == FALSE){
                    
$this->language $_COOKIE[language_cookie];
                }
            }
        }
        return 
$this->language;
    }
    
    function 
SetLang(){
            
$this->DetectLang();
            
setcookie(language_cookie,$this->language,time() + 3600 24);
            if(
$this->CheckLangArchive($this->language)){
                require_once(
"modules_/languages/".$this->language.".php");
            }
            else{
                require_once(
"modules_/languages/".language_default.".php");
            }
    }

Archivo de lenguaje:
Código PHP:
//LOGIN
define("lang_login_username""Usuario");
define("lang_login_password""Contraseña");
define("lang_login_process""Conectar");
define("lang_login_lostpassword""Perdiste tu contraseña?"); 
Como lo llamo en el index.php:
Código PHP:
require_once('modules_/class/language.class.php');
$Lang = new Lang(); 
  #2 (permalink)  
Antiguo 26/07/2015, 21:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Sistema multilenguaje con manejo de placeholders

Lo placeholders se implementan fácilmente con sprintf(), consulta el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/07/2015, 07:49
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Sistema multilenguaje con manejo de placeholders

Lo unico a considerar no son los problemas de rendimiento, ni los problemas de rendimiento provienen de que uses arrays o defines
Sobre lo primero, tienes que considerar quién va a realizar las traducciones.Si, por ejemplo, quieres tener un intefaz desde donde otra persona pueda introducir las cadenas traducidas, guardarlas en "defines" o "arrays" quizás no sean las mejores o únicas opciones.
Dónde vas a usar esas traducciones? Sólo por el lado del servidor? O también por el lado del cliente (javascript)?
Sobre el rendimiento, las cadenas traducidas cuentan como contenido estático.Tu estructura permite generar cachés de código, según idioma, donde ese contenido estático ya esté traducido? O es que vas a traducir las cadenas en cada request?
  #4 (permalink)  
Antiguo 27/07/2015, 20:10
 
Fecha de Ingreso: agosto-2009
Ubicación: Buenos Aires
Mensajes: 13
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Sistema multilenguaje con manejo de placeholders

Cita:
Iniciado por pateketrueke Ver Mensaje
Lo placeholders se implementan fácilmente con sprintf(), consulta el manual.
Tenes razon, en su momento lo habia probado pero se ve que estaba quemado y no me di cuenta que estaba copiando mal los define's y por eso no me salia como queria jajaja, ahora lo acomode y sale bien.

Respecto a la respuesta de @dashtrash
Las traducciones solo las realizo yo (o en su defecto algun administrador del sitio que hable el idioma a traducir, ya que se trata de un sitio para un juego y el texto no es mucho), no cuento con sistema de cache, actualmente cada pagina se traduce al momento de ser cargada.

Etiquetas: lenguaje, sistema
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 20:10.