cevin / laravel-multi-language
Laravel 多语言路由支持
v0.0.2
2024-06-12 05:26 UTC
Requires
- php: >=7.4
- laravel/framework: ^10.0|^11.0
README
警告
路由分发策略将受到影响,请在充分测试后才能应用于生产环境。
所有参数必须在方法参数列表中明确定义,并且参数名称必须与路由中定义的相匹配。
以下调用可能会有影响。
class SomeController extends Controller { // For route: /{a}/{b}/{c} // ❌ Method's parameter list is empty. public function method() { $a = func_get_args()[0]; $b = func_get_args()[1]; $c = func_get_args()[2]; } // For route: /{a}/{b}/{c} // ❌ Parameter name does not match the variable name defined in the route. public function method($aa, $bb, $cc) { // .... } // For route: /{a}/{b}/{c} // ❗️ The number of parameters does not match the number of variables defined in the route. public function method($a, $b) { $c = func_get_args()[2]; } // For route: /{a}/{b}/{c} // ✅ public function method($a, $b, $c) { // ..... } // For route: /{a}/{b}/{c} // ✅ public function method($c, $a, $b) { return $c.'-'.$a.'-'.$b; // /a/b/c // output: c-a-b } }
用法
// AppServiceProvider::boot URL::defaults(['locale' => 'en-us']); // route('home.test', ['name'=>'hello']) => /en-us/hello // route('home.test', ['name'=>'hello', 'locale'=>'fr']) => /fr/hello // global middleware ... app()->setLocale($request->route('locale', '...')) $request->setLocale($request->route('locale', '...')) ...
use \Illuminate\Support\Facades\Route; Route::prefix('/{locale?}') ->whereIn('locale', ['en-us', 'fr', 'zh-CN', 'zh-HK']) ->group(function (\Illuminate\Routing\Router $router) { $router->get('/{name}', 'Home@test')->name('home.test'); });
// Controller class Home extends Controller { public function test(\Illuminate\Http\Request $request, string $name) { $locale = $request->getLocale(); return $name; } }