Foros del Web » Programando para Internet » PHP »

Interfaz Multilenguaje PHP

Estas en el tema de Interfaz Multilenguaje PHP en el foro de PHP en Foros del Web. Hola De nuevo, les traigo un nuevo problema que me tiene de cabeza. Estoy manejando un sitio PHP que necesito que sea multi lenguaje, y ...
  #1 (permalink)  
Antiguo 10/04/2013, 12:11
 
Fecha de Ingreso: enero-2013
Mensajes: 21
Antigüedad: 11 años, 3 meses
Puntos: 0
Interfaz Multilenguaje PHP

Hola De nuevo, les traigo un nuevo problema que me tiene de cabeza.

Estoy manejando un sitio PHP que necesito que sea multi lenguaje, y estoy utilizando el metodo de archivos lang_?? con constantes. El sistema usa un framework MVC parecido a ZEND pero disenado por mi grupo de trabajo, tenemos una pagina Master que contiene Menus e imagenes que siempre tienen que mostrarse sea cual sea la pagina a la que se entre, es decir ese Master se carga dentro de todas la interfaces creadas. En el master tengo el siguiente código:

Código PHP:
if(!isset($_SESSION)){
    
session_start();
}

$language "";
if (isset(
$_SESSION['lang'])) {
    
$language $_SESSION['lang'];
}
if (
$language == "") {
    
$language "es";
}

$langFileName "lang_".$language.".php";
if (!
file_exists('Recursos/Idiomas/'.$langFileName)) {
    
$langFileName "lang_es.php";
}
include_once(
'Recursos/Idiomas/'.$langFileName); 
y ya tengo mis variables constantes declaradas en 2 archivos Lang_es.php y Lan_en.php.
El problema es que mientras las constantes sean llamadas dentro del Master funcionan y me muestra el contenido segun el lenguaje pero cuando llamo a estas constantes desde las interfaces que se suponen llaman al Master (donde esta el include del Lang) no las reconoce y dice que la constante no esta definida entonces no se que hacer para que mis interfaces reconozcan las constantes pues mi lógica es que si la interfaz hace un include del master y el master del Lang las variables deberian poder ser reconocidas en la interfaz pero no esta sucediendo.

Gracias a todos...
  #2 (permalink)  
Antiguo 10/04/2013, 12:51
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Interfaz Multilenguaje PHP

seria ideal que nos mostrara uno de esos archivos de lenguaje (al menos una parte), para orientarte mejor
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 10/04/2013, 12:59
 
Fecha de Ingreso: enero-2013
Mensajes: 21
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Interfaz Multilenguaje PHP

Código PHP:
<?php
Lang_en
.php
/* 
------------------
Language: English
------------------
*/
define("_TITULO_","Title");
define("_DESCRIPCION_","Description");
define("_CLIENTES_","Customers");
define("_SEGUIMIENTO_","Tracking");
define("_CONTACTO_","Contact Us");
define("_ADMINISTRACION_","Management");


<?
php
Lang_es
.php
/* 
------------------
Language: Espanol
------------------
*/
define("_TITULO_","Título");
define("_DESCRIPCION_","Descripción");
define("_CLIENTES_","Clientes");
define("_SEGUIMIENTO_","seguimiento de paquetes");
define("_CONTACTO_","Contáctenos");
define("_ADMINISTRACION_","Administración");
define("_CONFIGURACION_","Configuración");
Aqui esta un pedazo de los dos que uso.
  #4 (permalink)  
Antiguo 10/04/2013, 21:29
Avatar de luis010182  
Fecha de Ingreso: julio-2009
Ubicación: Argentina - Capital Federal
Mensajes: 382
Antigüedad: 14 años, 9 meses
Puntos: 27
Respuesta: Interfaz Multilenguaje PHP

Modifica esta parte de tu codigo
Código PHP:
$langFileName "lang_".$language.".php"
if (!
file_exists('Recursos/Idiomas/'.$langFileName)) { 
    
$langFileName "lang_es.php"
}
else{
echo 
"NO ESTA EL ARCHIVO";

include_once(
'Recursos/Idiomas/'.$langFileName); 
  #5 (permalink)  
Antiguo 11/04/2013, 10:32
 
Fecha de Ingreso: enero-2013
Mensajes: 21
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Interfaz Multilenguaje PHP

Ok ya lo he hecho Luis y esta imprimiendo el mensaje de que no esta el archivo en todas las paginas pero sigue sin poder jalar las constantes del lang...
Este es mi pagina de bienvenida
Código PHP:
<?php
$g_tituloPagina 
'';
$g_formAction "Index.php?vista=Login";
ob_start();
if(
$status==0){
    echo 
"<center><h3>Usuario o contrasena incorrectos</h3><br/><input type='submit' name='b_volver' value='Volver'/></center>";
}else{
?>
<center>
    <h1> <?php echo _BIENVENIDO_?></h1><br/>
    <h1><?php echo $_SESSION['nombre'];?></h1>
    <h2>Mail Boxes Etc Online Traking</h2>

</center>
<?php
}
$g_contenido ob_get_contents();
ob_end_clean();
include 
"Master.php";
?>
la constante del lang es _BIENVENIDO_ mi menu horizontal se incrusta en el master y este si reconoce las constantes pero como ven las interfaces hacen el include del master al final y las constantes no le llegan...
  #6 (permalink)  
Antiguo 11/04/2013, 10:47
 
Fecha de Ingreso: junio-2012
Mensajes: 56
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: Interfaz Multilenguaje PHP

Tu file_exists esta mal la direccion por asi decirle.
Has esto si arrancas desde el mismo directorio pone asi:
Código:
if (!file_exists('./Recursos/Idiomas/'.$langFileName)) {  
    $langFileName = "lang_es.php";  
} 
else{ 
echo "NO ESTA EL ARCHIVO"; 
}
y en el include() igual.
de esta forma le marcas que inicie desde el directorio actual ./ para adentro
Si no otra cosa que puedes hacer es el directorio completo.
Con la variable $_SERVER document_root pero no me acuerdo si en la funcion file_exists lo acepta.

Un consejo siempre que pongas un condicional de tal cosa ponle el o sino }else{ y un error espesifico en este caso si el archivo no existe de esta forma ubicas exactamente el error o lo que esta mal porque no siempre es un error simplemente es algo que falto que siempre suele pasar.

Espero te halla podido ayudar por lo menos algo.
Un saludo, suerte.
  #7 (permalink)  
Antiguo 11/04/2013, 11:15
 
Fecha de Ingreso: enero-2013
Mensajes: 21
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Interfaz Multilenguaje PHP

No, lo he intentado y el resultado es el mismo. el metodo que les puse lo que hace es preguntar si no existe un archivo de idioma configurado configure espanol por defecto, en realidad no me dice si el archivo existe porque si existe y prueba de ello es que el menu que es una pagina aparte que esta al mismo nivel de mis interfaces si reconoce las constantes del archivo, la diferencia radica en que mi pagina de menu se incrusta en el master mientras el master es incrustado dentro de las interfaces y el include esta al final, no se si el servidor carga primero la interfaz y despues el master y por eso no reconoce las constantes...
  #8 (permalink)  
Antiguo 11/04/2013, 11:22
 
Fecha de Ingreso: enero-2013
Mensajes: 21
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Interfaz Multilenguaje PHP

Les voy a poner mi pagina Master completo para ver si me logro explicar de mejor manera.

Código PHP:
<?php 
include("../../MbeFramework/MbeFramework.php");
import("MbeFramework.Html.HtmlControles.HtmlControles");
import("MbeFramework.Configuracion.ConfigurationSettings");

if(!isset(
$_SESSION)){
    
session_start();
}
/*
if (isset($_GET['lang'])) {
    $_SESSION['lang'] = $_GET['lang'];
}*/

$language "";
if (isset(
$_SESSION['lang'])) {
    
$language $_SESSION['lang'];
}else{
    
$language "es";
    
$_SESSION['lang']=$language;
}

$langFileName "lang_".$language.".php";  
if (!
file_exists('Recursos/Idiomas/'.$langFileName)) {  
    
$langFileName "lang_es.php";  


include_once(
'Recursos/Idiomas/'.$langFileName);  

?>
<!DOCTYPE html PUBLIC "-//W3C//Dtd XHTML 1.1 Strict//EN" "http://www.w3.org/TR/xhtml1/Dtd/xhtml1-strict.dtd">
<html>
    <head>
         
        <html xml:lang="es" xmlns="http://www.w3.org/1999/xhtml">
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <title><?php echo $g_tituloPagina?></title>
        <link rel="stylesheet" href="<?php echo path('Recursos/Estilos/base.css');?>" type="text/css" media="all" />
        <link rel="stylesheet" href="<?php echo path('Recursos/Estilos/smoothness/jquery-ui-1.8.24.custom.css');?>" type="text/css" media="all" />
        <link rel="stylesheet" href="<?php echo path('Recursos/Estilos/jQueryValidationEngine/validationEngine.jquery.css');?>" type="text/css" media="all" />
        <link rel="stylesheet" href="<?php echo path('Recursos/Estilos/jQueryValidationEngine/template.css');?>" type="text/css" media="all" />
        <script type="text/javascript" src="<?php echo path('Recursos/Jslibs/jquery-1.8.2.min.js');?>"></script>
        <script type="text/javascript" src="<?php echo path('Recursos/Jslibs/jquery-ui-1.8.24.custom.min.js');?>"></script>
    <script type="text/javascript" src="<?php echo path('Recursos/Jslibs/jQueryValidationEngine/jquery.validationEngine.js');?>"></script>
        <script type="text/javascript" src="<?php echo path('Recursos/Jslibs/jQueryValidationEngine/languages/jquery.validationEngine-es.js');?>"></script>
        <script type="text/javascript" src="<?php echo path('Recursos/Estilos/menu.js');?>"></script>
        
        <script type="text/javascript" src="<?php echo path('Recursos/ajax.js');?>"></script>
        <script type="text/javascript" src="<?php echo path('Recursos/Imagenes');?>"></script>
    </head>
    <body>
        <?php import("RastreoDePaquetes.Web.Controles.MenuHorizontal");?>
        <?php import("RastreoDePaquetes.Web.Controles.MapaDeSitio", array('g_tituloPagina'=> $g_tituloPagina));?>
        <?php if (isset($menuVertical)) import("RastreoDePaquetes.Web.Controles.MenuVertical", array('menuVertical'=>$menuVertical));?>
        
        <script type="text/javascript">
     
    jQuery(document).ready(function(){
        //validar campos       
        jQuery("#ctl00").validationEngine();
        //mostrar mensaje    
        $(".mensajes").show();
        //setTimeout(function(){ $(".mensajes").fadeOut(1000).fadeIn(1000).fadeOut(500).fadeIn(500).fadeOut(500);},10000); 
        });  
        $(function() {
            $(".datepicker" ).datepicker();
            $('.datepicker').datepicker("setDate", new Date());
            $('.datepicker').datepicker('option', {dateFormat: 'dd/mm/yy'});
                     
        });
        </script>
        <div class="BarraDeIdioma">
            <?php //include_once 'Controles/Idiomas.php'; ?>
            <a href="javascript:return(false)" class="LangBar" lang="en"><img src="<?php echo path('Recursos/Imagenes/imagesidiomas/en.png');?>"/></a>
            <a href="javascript:return(false)" class="LangBar" lang="es"><img src="<?php echo path('Recursos/Imagenes/imagesidiomas/es.png');?>" /></a>
            <script type="text/javascript">
                 $(".LangBar").click(function(){
                     var idioma = $(this).attr("lang");
                     $.get("<?php echo path('Controles/CargarIdioma.php?lang=');?>" + idioma,function(data){
                         alert(data);
                         location.reload();
                     })
                 });
            </script>
        </div>
        <table style="height:20px">
            <tr>
                <td>
                    <img src="<?php echo path('Recursos/Imagenes/mbelogoblack.png');?>" width="100px" alt='MBE' />
                </td>
                <td>
                    <span class="nombreSitioMBE"><?php echo ConfigurationSettings::GetApplicationSetting("NombreDeLaEmpresa"); ?></span>
                    <span class="nombreSitioSistema"><?php echo ConfigurationSettings::GetApplicationSetting("NombreDelSistema"); ?></span>
                </td>
            </tr>
        </table>
        <div id="UIAyudaAusuario" style="display: none" title="Ayuda"> </div>
        <form method="post" action="<?php echo $g_formAction?>" id="ctl00" enctype="multipart/form-data" >
            <?php HtmlControles::Iniciar(); ?>
            <div id="wrapper">
                <br/>
                <br/>
                <br/>
                <br/>
                <h1 style="text-align:center"><?php echo $g_tituloPagina?></h1>
                <br/>
                <div id="content">
                    <?php
                    
if ($g_contenido != null) {
                        echo 
$g_contenido;
                    } else {
                        
header("location:Index.php");
                    }
                    
?>
                </div>
            </div>
        </form>
        <br/>
        <br/>
        <br/>
        
        <?php include_once 'Controles/PieDePagina.php'?>
    </body>
</html>
como ven mi pagina master no es mas que un montón de includes solo que de tipo html, estos estilos y validaciones de jquery si son reconocidos por todas las interfaces, y por eso me extrana muchisimo que un include de php no sea reconocido por la interfaces, de hecho intente hacer el include del archivo de idiomas dentro de la interfaz y sorpresivamente si cargo las constantes pero con una montana de errores que decian que las constantes ya habian sidp previamente definidas...

Etiquetas: interfaz, multilenguaje, variables
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 13:59.