Я попытался сделать свое собственное многоязычное приложение, используя slim framework. Я создал группы маршрутов для всех языков, которые содержат все стандартные маршруты приложений следующим образом:
$this->app->group($base_folder, function () use ( $base_folder ) {
include 'includes.php';
$availableLangs = explode(",", USE_MULTILINGUAGES);
if(strlen($availableLangs['0']) > 0){
foreach($availableLangs as $availableLang) {
$this->app->group('/'.$availableLang, function () {
include 'includes.php';
});
}
}
});
Мой файл include.php содержит мои стандартные маршруты:
//Redirect to Home
$this->app->map('/', function () {
echo '/'.'<br/>';
$this->app->redirect('home');
})->via('GET');
//Homepage
$this->app->map('/home', function () {
$data = new Admin\GetController( 'home' );
$data->send("Home/home.template.html");
})->via('GET');
//Others
require 'Routes/Login.php';
require 'Routes/Logout.php';
require 'Routes/Users.php';
Созданные маршруты хороши, когда я показываю его:
project/
project/en
project/fr
project/home
project/en/home
project/fr/home
и т.д...
Но когда я пытаюсь в браузере, работают только стандартные (проект/проект/дом). Пользовательский $this->app->notFound
с /fr или /en переходит к $this->app->notFound
Я переписывал переменную Slim ['PATH_INFO'] при извлечении lang из url. Вот почему он не работал. Так что теперь все хорошо, но мне все же интересно узнать, есть ли лучший способ добавить многоязычное приложение в тонкое приложение.
Полезные ресурсы