Ver Mensaje Individual
  #5 (permalink)  
Antiguo 13/10/2015, 17:45
juanignaciob
 
Fecha de Ingreso: octubre-2015
Mensajes: 5
Antigüedad: 8 años, 6 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.