OpenMandriva: Mageia (Mageia 9) 20/Agosto/2023 - Anuncio, Descargas.
Blogdrake recomienda descargar las imágenes de instalación (iso) vía torrent para evitar corrupción de datos, aprovechar mejor su ancho de banda y mejorar la difusión de las distribuciones.
Mi solución para crear paginas PHP multi idioma
Problema: Quieres hacer una pagina web mediante PHP y quieres que sea multi idioma
¿Solución?: Hay distintas soluciones, usar las capacidades gettext incluidas en php, los arreglos asociativos ( $Array["Cadena1"] = "traducción1" ), variables ( $Variable1="Texto1",...,$VariableN="TextoN" ), la "librería" externa php-gettext
Aunque alguna vez he usado la ultima, generalmente he optado por la segunda.
Pero ahora que he actualizado Tuningdrake y que me encuentro trabajando en actualizar otro de mis proyectos, se ha hecho evidente que es algo tedioso de mantener (al igual que el de las variables), así que evalué cambiar el método que uso.
Pero me encontré que la primer opción puede ser un infierno, ya que por lo que he investigado el sistema tiene que tener instalado todos los idiomas que la pagina vaya a soportar.
Así que me quedaba la ultima opción, pero no pude hacerla funcionar con cherokee, el servidor web que por comodidad y cantidad de dependencias estoy usando para mis pruebas.
Así que los cambios hechos en el código en la parte de web de TD se hubieran quedado en el limbo de no ser por que se me ocurrió buscar si existía alguna herramienta que me convirtiera los archivos .po, que ya había preparado, a un archivo .php que contuviera la definición de un arreglo asociativo.
No tuve que buscar mucho, ya que encontre un articulo llamado "Quicktip – Convert .po files to .php (PHP array)" publicado por Roger Dudler.
En ese articulo encontré un código que hacia casi lo que quería (en vez de crear un archivo muestra en pantalla el código php), he aquí la modificación que le hice.
Ya solo tuve que ejecutar po2php por cada archivo .po y modificar ligeramente el código php de la parte web de TD para que cargara el archivo .php adecuado según el idioma.
Para que no se preocupen de dependencias (php-cli), he creado un rpm que pueden instalar desde el repositorio de blogdrake, o sí lo prefieren descargarlo e instalarlo
Actualización He añadido soporte multilinea tanto para los textos originales (msgid) como para las traducciones (msgstr)
- Blog de katnatek
- Entra a tu cuenta o crea una para poder comentar.
<?php
/*
* po2php
*
* Improved from http://www.rogerdudler.com/?p=342
*/
if (!is_file ($argv[1]))
{
print "El primer argumento debe ser un archivo po
forma de uso po2php archivo.po
";
exit (1);
}
$valid=strpos ($argv[1],".po");
if ($valid == false )
{
print "Se esperaba un archivo .po";
exit (3);
}
$phpfile=str_replace (".po",".php",$argv[1]);
$pofile=file ($argv[1]);
$translations = array();
$current = null;
$line=current ($pofile);
do
{
if (substr($line,0,5) == 'msgid')
{
$current = trim (substr(trim(substr($line,5)),1,-1));
next ($pofile);
$line=current ($pofile);
while (strlen ($line)>1 && substr($line,0,6) != 'msgstr')// For multi line msgid
{
$current.=substr (trim ($line),1,-1);
next ($pofile);
$line=current ($pofile);
}
}
if (substr($line,0,6) == 'msgstr' && $current != "")
{
//print "msgid $current\n";
$translations[$current] = trim (substr(trim(substr($line,6)),1,-1));
next ($pofile);
$line=current ($pofile);
while (strlen ($line)>1) //For multi line msgstr
{
$translations[$current].=substr (trim ($line),1,-1);
next ($pofile);
$line=current ($pofile);
}
//print "msgstr ".$translations[$current]."\n";
}
next ($pofile);
}while ($line=current ($pofile));
$destfile=fopen ($phpfile,"w");
if ($destfile != NULL )
{
fwrite ($destfile,"<?php\n\n");
foreach ($translations as $msgid => $msgstr)
{
fwrite ($destfile,"\$Text['" . $msgid . "'] = '" . htmlentities ($msgstr,ENT_QUOTES,"UTF-8",false).
"';\n");
}
fwrite ($destfile,"\n?>");
}
else
{
print "No se pudo crear ".$phpfile;
exit (2);
}
fclose ($destfile);
print "Creado ".$phpfile."
";
exit (0);
?>