Sto sviluppando un sito di social networking di nicchia che sta diventando multilingue. Ciò significa che la nostra struttura URL corrente avrà presto bisogno di iniziare a utilizzare parole tradotte per lumache come la seguente:Il modo migliore per ottenere URL multilingue?
www.example.com/home
diventa www.example.com/inicio
www.example.com/profile
diventa www.example.com/perfil
www.example.com/help
diventa www.example.com/ayuda
E così via. La mia domanda è: qual è il modo migliore per supportarlo in un'applicazione PHP? Per le richieste in entrata, ho pensato che un dizionario come il seguente nel mio file router.php
sarebbe sufficiente:
<?php
$request = explode("/", trim($_SERVER['REQUEST_URI'], "/"));
// Dictionaries of page slugs.
$slugs = array(
'es' => array(
'inicio' => 'home',
'perfil' => 'profile',
'ayuda' => 'help',
)
// additional languages can be added here
);
// Rewrite any incoming (foreign) requests
if ($host=="www.example.es") { // to be made programmatic
$lang = "es"; // pick up from locale constant rather being hard-coded
if (array_key_exists($request[0], $slugs[$lang])) {
$request[0] = $slugs[$lang][$request[0]];
}
}
...
Quale è quasi esclusivamente segmenti di URL e li abbina contro un contro-parte in inglese, se esiste. In caso contrario, procederà normalmente e molto probabilmente causerà un 404 poiché un controller non esiste per il segmento URL.
Nonostante queste parole, ho bisogno che sia compatibile anche con le versioni precedenti. Ad esempio, quando si costruiscono URL nella mia applicazione.
Naturalmente, poiché l'applicazione è solo inglese al momento, questi sono solo hardcoded. Così dicono, quando va a prendere un oggetto User
ho effettuare le seguenti operazioni:
<?php
class User {
function __construct($id) {
// fetch user details
$this->profile_url = ROOT . "/profile/" . $this->username;
}
}
Qual è il metodo migliore per sostituire le istanze di "/profile/"
essere hard-coded per ottenere la versione tradotta, vale a dire "/perfil/"
nel sito spagnolo?
Si sta utilizzando un certo tipo di framework PHP, o si tratta di un sistema di auto codificato? – mth
Al momento della traduzione, di solito scelgo di memorizzare effettivamente le pagine in un database, facendo riferimento a esse tramite id o nome interno, e trasformandole in oggetti completi con metodi come 'getUrl()' che possono essere localizzati. – Wrikken
I frammenti di percorso tradotti sono molto rari. Il mio istinto è di evitare di renderlo troppo flessibile. – mario