Estoy desarrollando un sitio de redes sociales de nicho que se está volviendo multilingüe. Eso significa que nuestra estructura de URL actual pronto será necesario para empezar a utilizar palabras traducidas por las babosas como las siguientes:¿La mejor manera de lograr URL multilingües?
www.example.com/home
convierte www.example.com/inicio
www.example.com/profile
convierte www.example.com/perfil
www.example.com/help
convierte www.example.com/ayuda
Y así sucesivamente. Mi pregunta es: ¿cuál es la mejor manera de apoyar esto en una aplicación PHP? Para las solicitudes de entrada, pensé un diccionario como el siguiente en mi archivo router.php
sería suficiente:
<?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]];
}
}
...
Lo que básicamente tiene segmentos de URL y los compara con una contra-parte Inglés si es que existe. De lo contrario, continuará normalmente y probablemente genere un 404 ya que no existe un controlador para el segmento URL.
Aunque estas palabras, también necesito que sean compatibles con versiones anteriores. Por ejemplo, al construir URL en mi aplicación.
Naturalmente, como la aplicación solo es en inglés en este momento, solo están codificados. Así decir, al recuperar un objeto User
hago lo siguiente:
<?php
class User {
function __construct($id) {
// fetch user details
$this->profile_url = ROOT . "/profile/" . $this->username;
}
}
¿Cuál es el mejor método para reemplazar a continuación ejemplos de "/profile/"
ser codificados de forma rígida a conseguir la versión traducida, es decir "/perfil/"
en el sitio en español?
¿Está utilizando algún tipo de marco de PHP, o se trata de un sistema codificado auto? – mth
En el momento de la traducción, por lo general opto por almacenar páginas en una base de datos, haciendo referencia a ellas por identificación o nombre interno, y convertirlas en objetos completos con métodos como 'getUrl()' que pueden tener en cuenta la configuración regional. – Wrikken
Los fragmentos de ruta traducidos son muy poco comunes. Mi instinto es evitar que esto sea demasiado flexible. – mario