Utilizzare il multilingua con una classe php

Salve a tutti, in questo breve articolo voglio illustrarvi il funzionamento e l’utilizzo di una classe php che permette di mostrare testi diversi nelle vostre pagine web a seconda della lingua selezionata.

La classe è molto semplice e intuitiva ma esegue egregiamente il suo lavoro

class translate {
	public $language = "en";
	public $allowed_languages = array("en","it");

	function __construct($l = "en") {
		if(in_array($l,$this->allowed_languages)) $this->language = $l;
	}

	public function setLanguage($l) {
		if(in_array($l,$this->allowed_languages)) $this->language = $l;
	}

	public function putText($t,$l) {
		if($this->language == $l) 
		echo htmlentities($t);
	}

	public function setAllowed($arr) {
		if(is_array($arr))
		$this->allowed_languages = $arr;
	}

	public function active($l) {
		if($l == $this->language) return true;
		return false;
	}
}

Andiamo ad analizzare il codice:

public $language = "en";
public $allowed_languages = array("en","it");

I primi 2 attributi impostano la lingua standard e un array con le lingue che la nostra classe accetterà, ho messo l’inglese visto che è la più usata ma potete mettere qualsiasi altra lingua.

function __construct($l = "en") {
	if(in_array($l,$this->allowed_languages)) $this->language = $l;
}

Il metodo costruttore ci permette di cambiare la lingua nel momento in cui la classe viene inizializzata, La lingua verrà cambiata solo se presente nelle lingua da noi scelte, da notare la presenza di un assegnamento alla variabile $l nel metodo così da non restituire errori se la classe viene chiamata senza passare alcun valore.

public function setLanguage($l) {
	if(in_array($l,$this->allowed_languages)) $this->language = $l;
}

Il metodo setLanguage compie lo stesso lavoro del metodo costruttore ma permette di modificare la lingua anche in un secondo momento e quante volte vogliamo.

public function setAllowed($arr) {
	if(is_array($arr))
	$this->allowed_languages = $arr;
}

Il metodo setAllowed viene eseguita solo se il valore passato è un array e modifica la lista delle lingue accettate con quelle che abbiamo gli abbiamo appena passato

public function putText($t,$l) {
	if($this->language == $l) 
	echo htmlentities($t);
}

Il metodo putText ha la stessa funzione di un normale echo o printf ma al contrario di questi necessita di 2 valori, uno è il testo da stampare e l’altro è la lingua del testo, se la lingua non corrisponde a quella della classe il testo non verrà stampato. (Piccola nota: ho inserito la funziona htmlentities per sicurezza ma potete toglierla senza problemi)

public function active($l) {
	if($l == $this->language) return true;
	return false;
}

Il metodo active restituisce true se la lingua passata come argomento è uguale a quella della classe, altrimenti restituisce false.
Questo metodo è stato pensato per stampare testi molto grandi al contrario di putText che è stato pensato per piccole frasi.

Questione di classe

<?php
	$l = new translate("it");
	$l->putText("Salve a tutti, mi chiamo giacomo, per scoprire di più su di me cliccate su uno dei link qua sotto<br />","it");
	$l->putText("Hi everyone, my name is giacomo, to find more about me click one of the link below<br />","en");
	if($l->active("it")) {
?>
<a href="#works">Lavori</a> - <a href="#info">Info</a> - <a href="#contact">Contattami</a> - <a href="#aboutme">Su di me</a>
<?php } elseif($l->active("en")) {
?>
<a href="#works">Works</a> - <a href="#info">Info</a> - <a href="#contact">Contact me</a> - <a href="#aboutme">About me</a>
<?php
}

Il codice qua sopra non fa altro che inizializzare la classe translate con la lingua it (italiano) e successivamente usa i metodi putText e active per stampare solo il testo che ci interessa.
Se notate ho utilizzato putText per una frase corta e lineare mentre ho sfruttato il valore di ritorno di active per stampare qualcosa di più complesso come nel nostro caso una serie di link.
Se andiamo a provare il nostro codice ci verrà mostrato questo:

Salve a tutti, mi chiamo giacomo, per scoprire di più su di me cliccate su uno dei link qua sotto
LavoriInfoContattamiSu di me

Spero che questa breve guida vi sia di aiuto, per qualsiasi domanda o chiarimento non esitate a lasciare un commento.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Gesture icons
Up Next:

Icone "gesture" vettoriali gratuite

Icone "gesture" vettoriali gratuite