本文介绍一种优雅的多语言 url 支持方案:保持控制器文件名(如 `usercontroller.php`)和内部逻辑不变,通过路由映射将翻译后的 url(如 `/gebruiker/mijn-account`)动态解析到原始控制器与动作,避免代码冗余与维护困境。
在 PHP MVC 框架中,URL 的可读性与本地化体验至关重要,但直接将控制器重命名为目标语言(如把 User 改为 Gebruiker)会破坏代码一致性、增加维护成本,并导致国际化扩展困难(例如新增法语 /utilisateur/mon-compte 时需重复创建控制器)。正确的做法是分离“路由展示层”与“业务逻辑层”:URL 可本地化,控制器命名与结构保持英文(行业标准),由路由系统完成翻译映射。
✅ 推荐方案:路由级语言映射(Route Translation)
在前端控制器(如 index.php 或路由器类)中,预先定义语言映射表,将本地化路径段映射回标准控制器/动作标识符:
// config/route-mappings.php
return [
'nl' => [
'gebruiker' => 'user',
'mijn-account' => 'my-account',
'instellingen' => 'settings',
// ... 更多荷兰语映射
],
'fr' => [
'utilisateur' => 'user',
'mon-compte' => 'my-account',
'parametres' => 'settings',
],
];
随后在路由解析阶段进行转换: