Я занимаюсь разработкой нишевого сайта социальной сети, который будет многоязычным. Это означает, что нашей текущей структуре URL скоро потребуется начать использовать переведенные слова для слагов, как показано ниже:
www.example.com/home
становится www.example.com/inicio
www.example.com/profile
становится www.example.com/perfil
www.example.com/help
становится www.example.com/ayuda
И так далее. Мой вопрос: каков наилучший способ поддержать это в приложении PHP? Для входящих запросов я подумал, что в моем файле router.php
будет достаточно словаря, подобного следующему:
<?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]];
}
}
...
Который в основном берет сегменты URL и сопоставляет их с английским контрагентом, если он существует. Если нет, то он будет работать как обычно и, скорее всего, вызовет 404, поскольку контроллер не существует для сегмента URL.
Хотя эти слова мне нужны, чтобы они были обратно совместимы. Например, при создании URL-адресов в моем приложении.
Естественно, поскольку приложение на данный момент только на английском языке, оно жестко запрограммировано. Скажем, при извлечении объекта User
я делаю следующее:
<?php
class User {
function __construct($id) {
// fetch user details
$this->profile_url = ROOT . "/profile/" . $this->username;
}
}
Каков наилучший способ замены экземпляров "/profile/"
, которые жестко запрограммированы на получение переведенной версии, то есть "/perfil/"
на испанском сайте?