H2O es un sistema de plantillas para PHP que nos facilita la realización de la parte de vistas del desarrollo de nuestra aplicación con formato MVC.
La sintaxis es sencilla, ya que se basa en el uso de etiquetas para variables ( {{ variable }} ) y para bloques/instrucciones ( {% if condicion %} … {% endif %} ).
Yo no soy partidario de usar estos tipos de lenguajes de plantillas, porque no dan buen rendimiento y porque es aprender algo nuevo y diferente. Claro que, en algunos proyectos, la realización de las páginas las hacen personas sin conocimientos de desarrollo web o PHP, por lo que estos sistemas les facilitan la labor. H2O
En 456 Berea Street nos muestran una forma muy interesante para poder mostrar tu página con diferentes hojas de estilo. Tiene el inconveniente de que solo admite dos estilos entre los que elegir.
El funcionamiento es sencillo, disponemos de dos directorios, cada cual con las hojas de estilo que nos interesa. Habrá un enlace a una página que cuando accedemos a ella nos cambiará de directorio, guardará el valor en una cookie y nos devolverá a la página a la página desde la que hemos hecho la llamada o a la raÃz si no existÃa esa página. Y luego en cada página deberemos obtener el valor del directorio de las cookies y usarlo para recuperar la hoja de estilo correspondiente.
El script que se encarga de cambiar de directorio es el siguiente:
phpRemoteShell es una aplicación que permite ejecutar comandos de shell y código PHP en un host remoto sobre HTTP.
Además permite encriptarse y desencriptarse en la petición, PRS se puede alojar a sà mismo en en otro script PHP del servidor para poder restablecerse durante el tiempo de ejecución. Ademas permite modificar el crontab entre otras cosas. phpRemoteShell
VÃa / International PHP Magazine
Ahora viene la parte más complicada, y digo complicada porque sinceramente he tenido que mirar el código porque algo me fallaba cuando seguía lo que decía la documentación.
El nombre del fichero JSON tiene el siguiente formato [dominio de traducción]-[idioma]-[handler del fichero].json, total nada.
Dominio será el que usemos para traducir, en el ejemplo sería mi-plugin:
__( 'Hola que tal', 'mi-plugin' );
Idioma es el código del idioma, en este caso es_ES
Y por último el handler del fichero es el primer parámetro que usamos en wp_enqueue_script
Lo podemos ver todo en un ejemplo final:
wp_enqueue_script(
'mi-plugin-handler', // El handler mencionado anteriormente
$blocks_script, // Nuestro path
[
'wp-i18n', // De referenciar al menos a wp-i18n
],
);
wp_set_script_translations( 'mi-plugin-handler, 'mi-plugin', plugin_dir_path( __FILE__ ) . 'languages' );
O bien no me enteré, o bien la solución que plantean desde Contacto Form 7 para traducir formularios no me servía. Ellos proponen crear otro formulario en otro idioma y añadir cada formulario en la página correspondiente a su idioma. ¿Pero qué pasa cuando el formulario no está en una página sino en un widget dentro de un sidebar?, pues que necesitaremos traducir las cadenas de texto mediante WPML.
Para ello nos creamos un filtro que coge los values de la etiqueta, las registra en WPML y las traduce:
add_filter( 'wpcf7_form_tag', 'wpml_cf7_tags');
function wpml_cf7_tags($scanned_tag, $exec ) {
foreach($scanned_tag['values'] as $i=>$v) {
icl_register_string('Contact Form 7', $v, $v);
$scanned_tag['values'][$i] = icl_t('Contact Form 7', $v, $v);
}
return $scanned_tag;
}
header("Content-type: application/octet-stream");
// displays progress bar when downloading (credits to Felix ;-))
header("Content-Length: " . filesize('myImage.jpg'));
// file name of download file
header('Content-Disposition: attachment; filename="myImage.jpg"');
// reads the file on the server
readfile('myImage.jpg');
Codificar la salida: a diferentes formatos (html, javascript, …) usando esta librería