Internazionalizzazione PHP (i18n): Guida pratica per sviluppatori

Yee
Aug 03, 2024

Porta il tuo sito PHP nel mondo: una soluzione più efficiente per l’internazionalizzazione
Se sei come me e gestisci progetti PHP "vanilla" che non si appoggiano a grandi framework (come Laravel o Symfony), allora il supporto multilingua (i18n) è probabilmente sempre stato un piccolo, ma fastidioso, problema.
La soluzione tradizionale, gettext
, anche se potente, è piuttosto complicata da configurare. Soprattutto nei progetti piccoli, sembra proprio di "usare un cannone per uccidere una mosca". Quello che ci serve davvero è un metodo che si possa implementare al volo senza aggiungere troppa complessità.
Dopo tanti tentativi ed errori su diversi progetti, abbiamo sviluppato una soluzione leggera per l’internazionalizzazione basata su file array PHP e strumenti di traduzione online. Questo approccio non è solo semplice da implementare, ma ha anche costi di manutenzione davvero bassissimi. Oggi ti condivido tutta questa soluzione, senza nessun trucco.
Guida pratica: come ho risolto il multilingua in PHP con O.Translator
La nostra idea di base è molto semplice: Ogni lingua corrisponde a un file PHP, che contiene un’istruzione return
che restituisce un array associativo. Questo metodo è semplice, intuitivo e ha un impatto minimo sulle prestazioni.
Step 1: Pianifica la struttura delle tue cartelle
Una struttura delle cartelle chiara è già metà dell’opera. Per tenere tutto in ordine, metteremo tutti i file delle lingue nella stessa cartella e li chiameremo usando i codici delle lingue, così:
project_root/
├── index.php // Your main logic file
├── i18n/ // Folder for all language files
│ ├── lang.cn.php // Chinese language pack
│ ├── lang.en.php // English language pack
│ └── lang.fr.php // French language pack
Step 2: Crea il tuo "Arsenale di lingue"
Ora creiamo il file base della lingua. Prendiamo il cinese come esempio e creiamo un file lang.cn.php
. Il contenuto del file è un semplice array PHP, dove le chiavi sono identificatori unici e i valori sono le stringhe di testo corrispondenti.
Esempio di lang.cn.php: le chiavi restano uguali, i valori cambiano a seconda della lingua
Step 3: Entra in scena il mago delle traduzioni, O.Translator
Tradurre a mano decine o centinaia di voci? È proprio quel tipo di lavoro ripetitivo che i programmatori odiano di più. Ed è qui che entra in gioco la nostra arma segreta, O.Translator.
È una piattaforma professionale di traduzione online che supporta perfettamente i file PHP, permettendoti di leggere direttamente il tuo array e tradurlo in oltre 70 lingue.
Il procedimento è davvero semplicissimo:
- Vai sulla homepage di O.Translator e carica il tuo file di lingua base (ad esempio,
lang.cn.php
). - Scegli le lingue di destinazione, come inglese e francese.
- Clicca su traduci, aspetta un attimo, e i tuoi file tradotti
lang.en.php
elang.fr.php
saranno pronti per te.
Quello che mi ha colpito di più è che O.Translator ti permette di vedere in anteprima una parte della traduzione gratis. Se sei soddisfatto del risultato, puoi poi decidere se acquistare la traduzione completa. Per usare le loro stesse parole: "Non pagare mai per un prodotto che non ti convince."
Passo 4: Dai vita al codice
Tutto è pronto; manca solo il tocco finale. Adesso modifichiamo il file principale index.php
così da poter caricare dinamicamente il pacchetto lingua giusto in base alla scelta dell’utente.
<?php
// 1. Determine the current language (using a GET parameter for demonstration)
$supported_langs = ['en', 'cn', 'fr'];
$default_lang = 'en';
$lang = isset($_GET['lang']) && in_array($_GET['lang'], $supported_langs) ? $_GET['lang'] : $default_lang;
// 2. Load the corresponding language file
// Use a global variable like $_ or a specific variable like $TEXTS to store the strings
$_ = require_once __DIR__ . "/i18n/lang.{$lang}.php";
?>
Nel tuo template HTML, potrai poi richiamare facilmente le stringhe di testo così:
<!DOCTYPE html>
<html lang="<?php echo htmlspecialchars($lang); ?>">
<head>
<meta charset="UTF-8">
<title><?php echo htmlspecialchars($_['heading_home']); ?></title>
</head>
<body>
<header>
<h1><?php echo htmlspecialchars($_['heading_home']); ?></h1>
<nav>
<ul>
<li><?php echo htmlspecialchars($_['heading_about']); ?></li>
<li><?php echo htmlspecialchars($_['button_read_more']); ?></li>
</ul>
</nav>
</header>
</body>
</html>
Ed eccoci qua—è nato un sito multilingua in modo semplicissimo!
Considerazioni e spunti avanzati
Anche se questa soluzione è leggera, ci sono alcuni aspetti da valutare prima di metterla online:
- Come rilevare la lingua dell’utente? L’esempio usa un parametro GET come
?lang=en
. In un’applicazione reale, potresti anche usare$_SESSION
,$_COOKIE
oppure analizzare l’headerAccept-Language
della richiesta del browser per una rilevazione automatica. - Considerazioni sulle prestazioni: Per siti piccoli o medi, il carico aggiuntivo di
require_once
per un file PHP a ogni richiesta è praticamente trascurabile. Se il tuo sito ha molto traffico, valuta l’uso di tecnologie di caching del bytecode come APC o OPcache per ottimizzare ancora di più. - Scalabilità: Quando aumentano le lingue o le stringhe di testo, gestire i file manualmente può diventare un bel grattacapo. A quel punto, potresti dover esplorare soluzioni i18n più professionali, come l’estensione gettext di PHP o i componenti di localizzazione offerti dai framework.
- Coerenza nelle traduzioni: Per assicurare coerenza nei nomi dei brand e nella terminologia su tutte le versioni linguistiche, ti consigliamo caldamente di usare la funzione Glossario di O.Translator.
- Strategia ad alto livello: Questo articolo si concentra sull’implementazione tecnica. Se vuoi saperne di più sulla strategia generale per l’internazionalizzazione dei siti web, puoi leggere il nostro altro articolo approfondito.