Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Tabla PHP multilenguaje MYSQL

Estas en el tema de Tabla PHP multilenguaje MYSQL en el foro de PHP en Foros del Web. Hola buenos dìas/tardes/noches. Estoy necesitando hacer un sitio multilenguaje con la posibilidad de que mi cliente pueda cambiar los textos segun el idioma. Necesito armar ...
  #1 (permalink)  
Antiguo 13/10/2015, 16:55
 
Fecha de Ingreso: octubre-2015
Mensajes: 5
Antigüedad: 8 años, 5 meses
Puntos: 0
Exclamación Tabla PHP multilenguaje MYSQL

Hola buenos dìas/tardes/noches.

Estoy necesitando hacer un sitio multilenguaje con la posibilidad de que mi cliente pueda cambiar los textos segun el idioma.

Necesito armar una db con una estructura similar a esta



Y que luego desde el PHP llame al texto con algo parecido a

Código PHP:
echo $texto['usuarios']; 
y que muestre el campo texto_es o texto_en segun el idioma que tenga seleccionado.

el idioma va a llegar mediante una variable de session y por default serà ES (Spanish)

Muchas gracias a todos los que puedan aportar algo!!

Estoy a ciegas!
  #2 (permalink)  
Antiguo 13/10/2015, 17:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: Tabla PHP multilenguaje MYSQL

¿Quieres decir un cliente tuyo te pidió algo que no sabes realizar?

Y vamos, ¿cuanto estás dispuesto a cobrarle si no sabes?

Que "estés a ciegas" no hará que alguien resuelva tu problema, básicamente se trata de hacer una consulta a la base de datos.

¿Qué tan complejo es para ti realizar una consulta?

Eso es básico y ya deberías saber hacerlo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 13/10/2015, 17:22
 
Fecha de Ingreso: octubre-2015
Mensajes: 5
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Tabla PHP multilenguaje MYSQL

Cita:
Iniciado por pateketrueke Ver Mensaje
¿Quieres decir un cliente tuyo te pidió algo que no sabes realizar?

Y vamos, ¿cuanto estás dispuesto a cobrarle si no sabes?

Que "estés a ciegas" no hará que alguien resuelva tu problema, básicamente se trata de hacer una consulta a la base de datos.

¿Qué tan complejo es para ti realizar una consulta?

Eso es básico y ya deberías saber hacerlo.

Jaja bueno, no es tan así.. en un principio era una web estática y ahora la quieren dinamica.

A ciegas completamente no estoy porque algo de php y mysql entiendo.

Lo que sucede es tengo estos codigos:

index.php

Código PHP:
<?php
session_start
();
$_SESSION['lang'] = 'en';
$s $_SESSION['lang'];




    require(
'conexion.php');
    
        
        
$rs mysql_query ($sql);
            
            while (
$registro mysql_fetch_array($rs)){
                        
                        
$texto=$registro['texto'];
                            echo 
'<td class="center">';
                                            echo 
$texto;
                                            echo 
'</td>';
                                            
                                            
                                            
                                            ;echo 
'</td>';
                                   
                                     echo 
'</tr> ';
                               }
?>

conexion.php

Código PHP:
<?php
    
    
    $mysqli
=new mysqli("localhost","root","","multilenguaje"); //servidor, usuario de base de datos, contraseña del usuario, nombre de base de datos

    
    
if(mysqli_connect_errno()){
        echo 
'Conexion Fallida : 'mysqli_connect_error();
        exit();
    }
    
    if(!(
$iden mysql_connect("localhost""root"""))) 
    die(
"Error: No se pudo conectar");
        
        if(!
mysql_select_db("multilenguaje"$iden)) 
    die(
"Error: No existe la base de datos");
$sql="SELECT * FROM $s";



 
?>
Pero claro, me trae toda la columna TEXTO y yo quiero traer solamente la palabra que deseo!!


Digamos que tengo la variable $rojo, en la web seria algo asi

Hola color $rojo

pero segun el idioma por el que este entrando esa variable $rojo tendria que traerme el texto_es o el texto_en

se entiende?
  #4 (permalink)  
Antiguo 13/10/2015, 17:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: Tabla PHP multilenguaje MYSQL

El error más grave que cometes es querer realizar una consulta por cada texto que uses, mal ahí.

Lo correcto sería inicializar sólo una ves al inicio de toda tu aplicación todas las cadenas de texto, porque vamos, no creo que cambie de un momento a otro.

Si pudieras centralizar todo en una función reutilizable sería lo mejor:
Código PHP:
Ver original
  1. function lang($key, $base) {
  2.   static $cached;
  3.  
  4.   if (!is_array($cached)) {
  5.     // no hay nada en $cached así que inicializamos todo
  6.     $sql = "SELECT * FROM language_strings";
  7.     $res = mysql_query($sql);
  8.     $cached = [];
  9.  
  10.     while ($row = mysql_fetch_object($res)) {
  11.       // creamos un registro en $cached con cada palabra y variante
  12.       $cached[$row->texto] = [
  13.         'es' => $row->texto_es,
  14.         'en' => $row->texto_en,
  15.       ];
  16.     }
  17.   }
  18.  
  19.   // usamos el caché en lugar de hacer una consulta nueva
  20.   return $cached[$key][$base];
  21. }
  22.  
  23. // uso
  24. echo lang('usuarios', 'es'); // usuarios
  25. echo lang('usuarios', 'en'); // users

Bueno, a mi se me ocurre algo así.

¿Se entiende la idea?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 13/10/2015, 17:45
 
Fecha de Ingreso: octubre-2015
Mensajes: 5
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Tabla PHP multilenguaje MYSQL

Cita:
Iniciado por pateketrueke Ver Mensaje
El error más grave que cometes es querer realizar una consulta por cada texto que uses, mal ahí.

Lo correcto sería inicializar sólo una ves al inicio de toda tu aplicación todas las cadenas de texto, porque vamos, no creo que cambie de un momento a otro.

Si pudieras centralizar todo en una función reutilizable sería lo mejor:
Código PHP:
Ver original
  1. function lang($key, $base) {
  2.   static $cached;
  3.  
  4.   if (!is_array($cached)) {
  5.     // no hay nada en $cached así que inicializamos todo
  6.     $sql = "SELECT * FROM language_strings";
  7.     $res = mysql_query($sql);
  8.     $cached = [];
  9.  
  10.     while ($row = mysql_fetch_object($res)) {
  11.       // creamos un registro en $cached con cada palabra y variante
  12.       $cached[$row->texto] = [
  13.         'es' => $row->texto_es,
  14.         'en' => $row->texto_en,
  15.       ];
  16.     }
  17.   }
  18.  
  19.   // usamos el caché en lugar de hacer una consulta nueva
  20.   return $cached[$key][$base];
  21. }
  22.  
  23. // uso
  24. echo lang('usuarios', 'es'); // usuarios
  25. echo lang('usuarios', 'en'); // users

Bueno, a mi se me ocurre algo así.

¿Se entiende la idea?

Gracias! Pero no quiero hacer una consulta por cada traducción y tampoco puedo centralizar todo en una funcion ya que necesito que este desde una db.

Mirá, yo ASP no entiendo, pero aqui tengo un codigo funcionando como lo necesito, solamente que esta en asp.

Código ASP:
Ver original
  1. <%
  2.  
  3. SESSION("IDIOMA") = "_es"
  4.  
  5. PRIVATE FUNCTION TEXTO_MULTILENGUAJE(PVAR_CODIGO_ORIGEN, PVAR_CODIGO_TEXTO)
  6. 'ON ERROR GOTO ERROR_CATCH
  7. DIM VAR_ObjConn,VAR_ObjRst,VAR_StrSql
  8. DIM VAR_TEXTO_AUXILIAR
  9.  
  10. SET VAR_ObjConn=SERVER.CREATEOBJECT("ADODB.Connection")
  11. %>
  12. <!--#include file="conexion.asp"-->
  13. <%
  14. VAR_ObjConn.OPEN
  15.  
  16. VAR_StrSql="SELECT * FROM _multilenguaje WHERE ORIGEN = '" & PVAR_CODIGO_ORIGEN & "' AND TEXTO = '" & PVAR_CODIGO_TEXTO & "'"
  17.  
  18. SET VAR_ObjRst=SERVER.CREATEOBJECT("ADODB.Recordset")
  19. 'VAR_ObjRst.CursorType = adOpenKeyset
  20. VAR_ObjRst.OPEN VAR_StrSql,VAR_ObjConn
  21.  
  22. IF VAR_ObjRst.EOF THEN
  23.  
  24.     VAR_TEXTO_AUXILIAR = "***"
  25.  
  26. ELSE
  27.  
  28.     VAR_TEXTO_AUXILIAR = VAR_ObjRst.fields("texto" & SESSION("IDIOMA")) & ""
  29.    
  30. END IF
  31.  
  32. VAR_ObjRst.CLOSE
  33. SET VAR_ObjRst=NOTHING
  34. VAR_ObjConn.CLOSE
  35. SET VAR_ObjConn=NOTHING
  36.  
  37. TEXTO_MULTILENGUAJE = VAR_TEXTO_AUXILIAR & ""
  38.  
  39. EXIT FUNCTION
  40. 'ERROR_CATCH:
  41. 'RESPONSE.WRITE ERR.DESCRIPTION
  42. 'RESPONSE.END
  43. END FUNCTION
  44.  
  45.  
  46. %>

La db de esta function es de esta manera.

  #6 (permalink)  
Antiguo 13/10/2015, 17:48
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: Tabla PHP multilenguaje MYSQL

Entendiste mal.

Cita:
Pero no quiero hacer una consulta por cada traducción
No necesitas hacer una consulta por cada traducción, sólo una consulta al inicio de todo.

El código hace eso, para eso es la verificación de la variable local "static", sólo se ejecuta una vez aún así la llames miles de veces.

Cita:
tampoco puedo centralizar todo en una funcion ya que necesito que este desde una db.
Obvio los datos vienen desde la BD, la función es sólo un atajo para que no hagas lo mismo siempre.

¿Qué no sabes trabajar con funciones pues?

Cita:
Mirá, yo ASP no entiendo, pero aqui tengo un codigo funcionando como lo necesito, solamente que esta en asp.
Sí, pero ahí precisamente cometes el error de hacer una consulta a la BD por cada texto.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 13/10/2015, 17:54
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 9 meses
Puntos: 263
Respuesta: Tabla PHP multilenguaje MYSQL

estas abordando todo mal alli y es tan simple como una consulta y un array, por ejemplo:

Código PHP:
Ver original
  1. //conecto con la base de datos
  2. include('../Connections/conexion.php');
  3.  
  4. //selecciono el idioma bien sea por sesion o cookie
  5. $idioma = "es";
  6.  
  7. //compruebo y asigno la columna de mi base que quiero que se muestre
  8. switch ($idioma) {
  9.   case 'es':
  10.   $ver = 'texto_es';
  11.   break;
  12.  
  13.   case 'en':
  14.   $ver = 'texto_en';
  15.   break;
  16.    
  17.   default:
  18.   $ver = 'texto_en';
  19.  
  20. }
  21.  
  22. //realizo la consulta a la base de datos y selecciono tanto la columna principal como la seleccionada por la comprobacion y asignada a la variable $ver
  23. $datos = $db->query("SELECT campo,$ver FROM fechas");
  24. $total = mysqli_num_rows($datos);
  25.  
  26. //creo un while con los campos seleccionados
  27. while($row = $datos->fetch_array()){
  28.    
  29.         //defino el campo y su respectiva traducción
  30.     define($row['campo'] , $row[$ver]);
  31. }
  32.  
  33. simplemente muestro la traducción donde la necesite basado en el nombre del campo al cual corresponde
  34.  
  35. echo nombre;

en este ejemplo esta realizado un una tabla que contiene los campos (campo, texto_es, texto_en)

espero te sirva
__________________
[email protected]
HITCEL
  #8 (permalink)  
Antiguo 13/10/2015, 17:54
 
Fecha de Ingreso: octubre-2015
Mensajes: 5
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Tabla PHP multilenguaje MYSQL

Cita:
Iniciado por pateketrueke Ver Mensaje
Entendiste mal.



No necesitas hacer una consulta por cada traducción, sólo una consulta al inicio de todo.

El código hace eso, para eso es la verificación de la variable local "static", sólo se ejecuta una vez aún así la llames miles de veces.



Obvio los datos vienen desde la BD, la función es sólo un atajo para que no hagas lo mismo siempre.

¿Qué no sabes trabajar con funciones pues?



Sí, pero ahí precisamente cometes el error de hacer una consulta a la BD por cada texto.
Ok, veré como hago para implementar la funcion que me das.

Mucho no la he entendido, disculpas! y gracias
  #9 (permalink)  
Antiguo 13/10/2015, 18:11
 
Fecha de Ingreso: octubre-2015
Mensajes: 5
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Tabla PHP multilenguaje MYSQL

Bueno, creo que encontre una solucion con el codigo de pateketrueke

Paso por variable $_SESSION el idioma seleccionado y lo almaceno en una variable mas simple llamada $s

Y el codigo quedo asì:

Si hay algo que acotar por favor diganme


Código PHP:
Ver original
  1. <?php
  2. $_SESSION['idioma'] = 'en';
  3. $s = $_SESSION['idioma'];
  4.  
  5. require ('conexion.php');
  6.  
  7.  
  8.  
  9. function lang($key, $base) {
  10.   static $cached;
  11.  
  12.   if (!is_array($cached)) {
  13.     // no hay nada en $cached así que inicializamos todo
  14.     $sql = "SELECT * FROM multilenguaje";
  15.     $res = mysql_query($sql);
  16.     $cached = [];
  17.  
  18.     while ($row = mysql_fetch_object($res)) {
  19.       // creamos un registro en $cached con cada palabra y variante
  20.       $cached[$row->texto] = [
  21.         'es' => $row->texto_es,
  22.         'en' => $row->texto_en,
  23.       ];
  24.     }
  25.   }
  26.  
  27.   // usamos el caché en lugar de hacer una consulta nueva
  28.   return $cached[$key][$base];
  29. }
  30.  
  31. // uso
  32. echo lang('despedida', $s);
  33.  
  34.  
  35.  
  36.  
  37.                                            
  38.                                ?>
  #10 (permalink)  
Antiguo 13/10/2015, 18:17
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 9 meses
Puntos: 263
Respuesta: Tabla PHP multilenguaje MYSQL

Cita:
Iniciado por xfxstudios Ver Mensaje
estas abordando todo mal alli y es tan simple como una consulta y un array, por ejemplo:

Código PHP:
Ver original
  1. //conecto con la base de datos
  2. include('../Connections/conexion.php');
  3.  
  4. //selecciono el idioma bien sea por sesion o cookie
  5. $idioma = "es";
  6.  
  7. //compruebo y asigno la columna de mi base que quiero que se muestre
  8. switch ($idioma) {
  9.   case 'es':
  10.   $ver = 'texto_es';
  11.   break;
  12.  
  13.   case 'en':
  14.   $ver = 'texto_en';
  15.   break;
  16.    
  17.   default:
  18.   $ver = 'texto_en';
  19.  
  20. }
  21.  
  22. //realizo la consulta a la base de datos y selecciono tanto la columna principal como la seleccionada por la comprobacion y asignada a la variable $ver
  23. $datos = $db->query("SELECT campo,$ver FROM fechas");
  24. $total = mysqli_num_rows($datos);
  25.  
  26. //creo un while con los campos seleccionados
  27. while($row = $datos->fetch_array()){
  28.    
  29.         //defino el campo y su respectiva traducción
  30.     define($row['campo'] , $row[$ver]);
  31. }
  32.  
  33. simplemente muestro la traducción donde la necesite basado en el nombre del campo al cual corresponde
  34.  
  35. echo nombre;

en este ejemplo esta realizado un una tabla que contiene los campos (campo, texto_es, texto_en)

espero te sirva
__________________
[email protected]
HITCEL
  #11 (permalink)  
Antiguo 13/10/2015, 20:00
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 13 años, 6 meses
Puntos: 56
Respuesta: Tabla PHP multilenguaje MYSQL

A modo de sugerencia te dire que te documentes de gettext, el cual te solucionara el problema y evitara que te comas los recursos del server por mal planteamiento, y mas si no sabes programar.

Este sistema no usa la base de datos, pero te permitira crear sistemas multilenguaje facilmente, y agregar nuevos idiomas incluyendo un solo archivo por idioma.

Te dejo el vinculo a la documentacion oficial
gettext
__________________
http://www.roglastudios.es

Etiquetas: multilenguaje, mysql, tabla, usuarios, variable
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:01.