Novedades
Música
 
María Becerra se presentó con orgullo en el festival de Suena En TikTok 2022
Las Cometas Siempre Vuelan En Agosto de Morat (Letra, Música)
El Dolor De Mi Vida (Versión Salsa) de Ezio Oliva, Daniela Darcourt (Letra, Música)
Medio Crazy Remix (feat. Rusherking, FMK & Juhn) de NoBeat, Khea, Ingratax (Letra, Música)
Jalo de Banda MS de Sergio Lizarraga (Letra, Música)
Migajas de Lana Oropeza (Letra, Música)
Amor Ordinario de Lana Oropeza (Letra, Música)
Cristo Rey de Sixto Rein (Letra, Música)
Mi Peor Error de Darell (Letra, Música)
Eme de Big Soto, Ryan Castro (Letra, Música)
XT4S1S de Danna Paola (Letra, Música)
Luna De Miel de HIT$ MUSIC, Kevin Roldan (Letra, Música)
Noche de Novela de Paulo Londra, Ed Sheeran (Letra, Música)
El Que Espera de Anitta, Maluma (Letra, Música)
Piensas En Mí de Chesca, Alejo (Letra, Música)
Ay Hombre! de Valentina Olguin, Jay Maly (Letra, Música)
Pa Que de Silvestre Dangond (Letra, Música)
CAUTY presenta «Ponle Dembow» junto al dúo internacional Zion y Lennox
Yo Toy Rulay Desacatao de JC La Nevula (Letra, Música)
Ponle Dembow de Cauty, Zion & Lennox, 574 (Letra, Música)
Somos Iguales (feat. Louchie Lou & Michie One) de Ozuna, Tokischa (Letra, Música)
Kapla y Miky presentan el sencillo musical de «Flete»
La Famosita de JC La Nevula (Letra, Música)
Flete de Kapla y Miky (Letra, Música)
Si Te La Encuentras Por Ahí de Feid (Letra, Música)
La Loto de TINI, Becky G, Anitta (Letra, Música)
TROPA de Anitta, Luck MUZIK (Letra, Música)
MUSA de Juan Avila (Letra, Música)
Personal (feat. Thyago) de Symon Dice, Latenightjiggy, Gigolo Y La Exce (Letra, Música)
Laguna de Neutro Shorty (Letra, Música)
FOLLOWS de Ankhal (Letra, Música)
Ojos Marrones de Lasso (Letra, Música)
Si Si de Tempo (Letra, Música)
Sin Novia de Nicky Jam (Letra, Música)
Conexiones de Miky Woodz (Letra, Música)
Todo My Love de Kenia Os (Letra, Música)
cómo dormiste? de Rels B (Letra, Música)
Contigo de Daniel Huen (Letra, Música)
Julieta de Paulo Londra (Letra, Música)
LOS APARATOS de El Alfa, Noriel, Trueno (Letra, Música)
Llorando En La Disco de st. Pedro, La Pantera, BDP Music (Letra, Música)
María Oliva y su canción «Eres» elegidas para «La canción del verano 2022»
La Tormenta de Lit Killah (Letra, Música)
Perro Fiel de Reykon (Letra, Música)
Brindaré de Las Villa (Letra, Música)
Jay Wheeler se une a Conep para presentar «Ese K»
Ese K de Jay Wheeler, Conep (Letra, Música)
Bésame Bonito (Micro TDH Remix) de Carmen DeLeon, Micro TDH (Letra, Música)
Biografías
 
Marcas Y Productos
 
Leng. De Program.
 
Listas De Páginas
 
Lo+ Visto
Lenguajes De Programación
  1. Enorable
  2. Lenguajes De Programación
  3. Php
11
 
27/02/2021 |  vistas:

Código php para páginas en diferentes idiomas o dirigidas a distintas regiones

Código php para páginas en diferentes idiomas o dirigidas a distintas regionesUna clase en php para trabajar con diferentes idiomas las páginas de nuestro sitio web tomando en cuenta las distintas regiones a las cuales se quiere llegar.

Ya es algo normal que los clientes nos exijan que las páginas de sus sitios web se puedan establecer correctamente en diferentes idiomas o que vayan dirigidas a distintas regiones, y la razón de ello es poder mostrar ciertos mensajes en las páginas que de acuerdo a la configuración regional del equipo que manejan los usuarios, estos puedan comprender enteramente el contenido que se les presenta.

Supongamos que un cliente establecido en la ciudad de Miami quiere un sitio web que se pueda mostrar en los idiomas inglés y español, y dependiendo de la versión que elijan los usuarios que visiten su negocio online se pueda mostrar la descripción de los productos que ofrecen en el idioma que puedan comprender. Es por ello que he creado un código en php que permite cumplir a cabalidad dicha funcionalidad.

Esto se puede lograr sin muchas complicaciones mediante el uso de una sesión y de un parámetro que ha de pasarse a través de la URL del navegador, y así mostrar la lógica y el funcionamiento del código que necesitamos implementar para satisfacer dicho requerimiento.

Para comprender el código es necesario conocer lo siguiente:

  • Se requieren conocimientos básicos de HTML y php.
  • El código implementado fue probado en la versión 7.3 de php y un entorno de prueba de Apache

El recurso consta principalmente de un archivo llamado «language.class.php», el cual contiene la clase «language» que se extiende de una clase genérica llamada «general».

Puede comprobar el resultado a través de una demostración en vivo.

Así debe ir nuestro archivo «language.class.php»

<?php

/////////////////////////
// language.class.php //
/////////////////////////

/**
* Clase que crea o mantiene una sesión con el idioma ("en", "es", "fr", "pt") de la página web
*
* @class language
* @constructor
* @extends general
* @methods language_session_start
* @variables public $hl
*/

class language extends general {

public $hl = '';

/**
* @resume constructor que llama función o método language_session_start( $lang )
*/

public function __construct( $lang = 'es' ) {
$this->hl = $this->language_session_start( $lang );
}

/**
* @resume establece el lenguaje de la sesión del usuario en el navegador
* @param $lang
* @return $_SESSION['hl']
* @variables array $optlang
*/

public function language_session_start( $lang = 'es' ) {

// Inicializar la sesión del usuario si no está activa

if ( session_id() == '' && !isset( $_SESSION ) ) { session_start(); }

// $optlang almacena las opciones de los lenguajes admitidos

$optlang = array( 'en' => 'en', 'es' => 'es', 'fr' => 'fr', 'pt' => 'pt' );

// Si se recibe una opción no existente en $optlang
// Entonces se asume la opción predeterminada en el parámetro $lang

if( in_array( $lang, array_keys( $optlang ) ) ) $default = $optlang[$lang];

// Controla el valor de la sesión según la variable ?hl pasada por la URL

if( empty( $_SESSION['hl'] ) ) {

// Si la variable ?hl no está definida y validada correctamente
// Entonces se asume el valor del parámetro $lang
// En caso contrario se asigna el valor de $lang a la $_SESSION['hl']

if( !$this->get_g_vars( 'hl' ) || !$this->validates( 'twoLetters', $this->get_g_vars( 'hl' ) ) ) {
$_SESSION['hl'] = $default; // Asignando el valor del parámetro $lang
} else {
if( in_array( $this->get_g_vars( 'hl' ), array_keys( $optlang ) ) ) {
$_SESSION['hl'] = $optlang[$this->get_g_vars( 'hl' )]; // Asignando ?hl a $_SESSION['hl']
} else {
$_SESSION['hl'] = $default; // Asignando el valor del parámetro $lang
}
}
} else {

// Si la sesión $_SESSION['hl'] está activa
// Y no ha cambiado el valor de ?hl a través de la URL
// Entonces se mantiene, de lo contrario, se limpia la sesión
// Se verifica el nuevo valor de ?hl
// Se asigna el nuevo valor a $_SESSION['hl'] o
// Se asume el valor predeterminado de $lang

if( $this->get_g_vars( 'hl' ) && $this->validates( 'twoLetters', $this->get_g_vars( 'hl' ) ) ) {
if( $_SESSION['hl'] !== $this->get_g_vars( 'hl' ) ) {
unset( $_SESSION['hl'] ); // Limpia la sesión
if( in_array( $this->get_g_vars( 'hl' ), array_keys( $optlang ) ) ) {
$_SESSION['hl'] = $optlang[$this->get_g_vars( 'hl' )]; // Asignando ?hl a $_SESSION['hl']
} else {
$_SESSION['hl'] = $default; // Asignando el valor del parámetro $lang
}
}
} else {
if( empty( $_SESSION['hl'] ) ) $_SESSION['hl'] = $default; // Asignando el valor del parámetro $lang
}
}
return mb_strtolower( $_SESSION['hl'], 'UTF-8' ); // Retorna el valor de $_SESSION['hl']
}
}

/**
* Clase de uso genérico con las funciones o métodos que necesitamos
* @class general
* @methods define_g_vars, get_g_vars, validates
* @variables private $gvars
*/

class general {

private $gvars = array();

protected function define_g_vars(){
if( isset( $_REQUEST ) ) {
foreach( $_REQUEST as $key => $val ) {
$this->gvars[$key] = $val;
}
}
}

protected function get_g_vars( $key ) {
$this->define_g_vars();
return ( isset( $this->gvars[$key] ) ) ? $this->gvars[$key] : false;
}

protected function validates( $type, $string, $is_nullable = 'NO' ) {
$empty = '';
if( !isset( $type ) || !isset( $string ) || !isset( $is_nullable ) ) return;
if( $is_nullable == 'YES' && empty( $string ) ) return true;
if( ($is_nullable == 'YES' && !empty( $string ) ) OR ( $is_nullable == 'NO' ) ) $empty = ( !empty( $string ) );
switch( $type ) {
case 'twoLetters':
if( $empty
&& isset( $string )
&& preg_match_all( '/^[a-z]{2}$/i',$string, $coin ) ) {
/* print_r($coin); */
return true;
} else { return false; }
}
}

}

?>

Ahora que ya tenemos creado el archivo con las clases, procedemos a crear dos archivos adicionales en php para poner a prueba la funcionalidad de nuestro recurso a través del navegador web.

Así deben ir nuestros dos archivos php (ej, archivo1.php y archivo2.php):

<?php

require_once( "./language.class.php" );
$lang = new language( 'en' );
$hl = $lang->hl;

var_dump( $_SESSION['hl'] );
echo "<br /><br />";
echo ( ( $hl == "es" )
? "Lenguaje del sitio establecido para español"
: ( ( $hl == "en" )
? "Site language set for english"
: ( ( $hl == "fr" )
? "Langue du site définie pour le français"
: ( ( $hl == "pt" )
? "Idioma do site definido para português"
: "No definido" ) ) ) );
echo "<br /><br />";

?>

Explicación de nuestros archivos de navegación php.

Los dos archivos php creados deben contener un objeto inicializado con el valor de la clase «language», no sin antes invocar el recurso principal «language.class.php».

require_once( "./language.class.php" );
Esta línea llama el archivo donde está ubicada nuestra clase.

$lang = new language( 'en' );
Inicializamos nuestro objeto.

$hl = $lang->hl;
Asignamos el valor de $lang->hl (propiedad de nuestro objeto) a la variable $hl.

Con archivo1.php y archivo2.php lo que buscamos es evaluar el valor de la sesión cuando pasemos de un archivo a otro; en el navegador podemos hacer uso de la variable «hl» de la siguiente manera: archivo.php?hl=en o archivo.php?hl=es o archivo.php?hl=fr o archivo.php?hl=pt.
Consulta Lo+ Top de Lenguajes De Programación
Todos los titulares en un solo lugar...