Cita:
Iniciado por pateketrueke 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 originalfunction lang($key, $base) {
static $cached;
// no hay nada en $cached así que inicializamos todo
$sql = "SELECT * FROM language_strings";
$cached = [];
// creamos un registro en $cached con cada palabra y variante
$cached[$row->texto] = [
'es' => $row->texto_es,
'en' => $row->texto_en,
];
}
}
// usamos el caché en lugar de hacer una consulta nueva
return $cached[$key][$base];
}
// uso
echo lang('usuarios', 'es'); // usuarios
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<%
SESSION("IDIOMA") = "_es"
PRIVATE FUNCTION TEXTO_MULTILENGUAJE(PVAR_CODIGO_ORIGEN, PVAR_CODIGO_TEXTO)
'ON ERROR GOTO ERROR_CATCH
DIM VAR_ObjConn,VAR_ObjRst,VAR_StrSql
DIM VAR_TEXTO_AUXILIAR
SET VAR_ObjConn=SERVER.CREATEOBJECT("ADODB.Connection")
%>
<!--#include file="conexion.asp"-->
<%
VAR_ObjConn.OPEN
VAR_StrSql="SELECT * FROM _multilenguaje WHERE ORIGEN = '" & PVAR_CODIGO_ORIGEN & "' AND TEXTO = '" & PVAR_CODIGO_TEXTO & "'"
SET VAR_ObjRst=SERVER.CREATEOBJECT("ADODB.Recordset")
'VAR_ObjRst.CursorType = adOpenKeyset
VAR_ObjRst.OPEN VAR_StrSql,VAR_ObjConn
IF VAR_ObjRst.EOF THEN
VAR_TEXTO_AUXILIAR = "***"
ELSE
VAR_TEXTO_AUXILIAR = VAR_ObjRst.fields("texto" & SESSION("IDIOMA")) & ""
END IF
VAR_ObjRst.CLOSE
SET VAR_ObjRst=NOTHING
VAR_ObjConn.CLOSE
SET VAR_ObjConn=NOTHING
TEXTO_MULTILENGUAJE = VAR_TEXTO_AUXILIAR & ""
EXIT FUNCTION
'ERROR_CATCH:
'RESPONSE.WRITE ERR.DESCRIPTION
'RESPONSE.END
END FUNCTION
%>
La db de esta function es de esta manera.