主页/PHP笔记/PHP问答/框架Laravel/如何在 Laravel 中创建可本地化(i18n)的路由

如何在 Laravel 中创建可本地化(i18n)的路由

Bug编译狮

Bug编译狮

在 Laravel 中创建可本地化的路由,可以按照以下步骤进行:

1. 安装和配置 Laravel

首先,确保你已经安装了 Laravel。如果没有安装,可以通过 Composer 进行安装:

composer create-project --prefer-dist laravel/laravel my-laravel-app
cd my-laravel-app

2. 创建语言包目录

Laravel 使用语言包来管理不同国家的语言字符串。默认情况下,Laravel 的语言包位于 resources/lang 目录下。

3. 添加语言文件

resources/lang 目录下创建一个新的语言文件,例如 en.jsonzh-CN.json。这些文件将包含你的本地化字符串。

示例:en.json

{
    "hello": "Hello, World!"
}

示例:zh-CN.json

{
    "hello": "你好,世界!"
}

4. 配置语言包

编辑 config/app.php 文件中的 locale 设置,指定默认的语言包:

'locale' => 'en',

5. 指定语言包

你可以通过 URL 参数指定不同的语言包。例如,如果你想使用中文语言包,可以在 URL 中添加 ?locale=zh-CN

https://example.com/hello?locale=zh-CN

6. 创建路由

在控制器中使用 translate 方法来获取本地化字符串。例如:

namespace AppHttpControllers;

use IlluminateHttpRequest;
use AppServicesTranslationService;

class HelloController extends Controller
{
    public function index(Request $request)
    {
        // 获取当前语言包
        $locale = $request->input('locale', app()->getLocale());

        // 使用翻译服务获取本地化字符串
        $message = TranslationService::getMessage($locale, 'hello');

        return view('welcome', compact('message'));
    }
}

7. 编写视图

resources/views/welcome.blade.php 文件中使用变量显示本地化字符串:

<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{ __('messages.hello') }}</title>
</head>
<body>
    {{ $message }}
</body>
</html>

8. 测试路由

现在,你可以访问 /hello?locale=en 来查看英文版本的页面,访问 /hello?locale=zh-CN 来查看中文版本的页面。

示例代码

以下是一个完整的示例代码,展示了如何在 Laravel 中实现可本地化的路由:

// routes/web.php
Route::get('/hello', [HelloController::class, 'index']);

// app/Http/Controllers/HelloController.php
namespace AppHttpControllers;

use IlluminateHttpRequest;
use AppServicesTranslationService;

class HelloController extends Controller
{
    public function index(Request $request)
    {
        // 获取当前语言包
        $locale = $request->input('locale', app()->getLocale());

        // 使用翻译服务获取本地化字符串
        $message = TranslationService::getMessage($locale, 'hello');

        return view('welcome', compact('message'));
    }
}

// app/Services/TranslationService.php
namespace AppServices;

class TranslationService
{
    public static function getMessage($locale, $key)
    {
        if (file_exists(resource_path("lang/$locale/{$key}.json"))) {
            return json_decode(file_get_contents(resource_path("lang/$locale/{$key}.json")), true);
        } else {
            return null;
        }
    }
}

// resources/lang/en.json
{
    "hello": "Hello, World!"
}

// resources/lang/zh-CN.json
{
    "hello": "你好,世界!"
}

通过以上步骤,你可以在 Laravel 中成功创建并配置可本地化的路由。

黑板Bug讲师

黑板Bug讲师

介绍

在多语言的网络应用中,使用反映选择语言的URL可以提升用户体验并可能改善SEO。Laravel 是一个流行的PHP网络应用程序框架,它提供了全面的国际化(i18n)工具包。在这篇教程中,我们将学习如何使用Laravel创建具有本地化功能的国际路由。

在Laravel中理解本地化(Localization)

Laravel的本地化功能让你能够创建多语言网站,通过提供一种方便的方式来检索各种语言中的字符串。为了在路由之间管理语言选择,你也需要调整你的路由设计。这使得用户可以在同一页面上切换不同的语言。

设置环境

在创建本地化路由之前,请确保您正在运行最新版本的Laravel,并且已经创建了一个新项目或正在处理一个现有项目。如果您尚未设置环境,请参阅Laravel安装文档。

composer create-project laravel/laravel your_project_name

基本的本地路由

首先,通过配置文件或环境变量内部定义一个支持的时区集合。在本教程中,假设我们的支持语言为英语(en)和西班牙语(es)。请打开‘config/app.php’并添加以下代码:

'supported_locales' => ['en', 'es'],

在你的 routes/web.php 文件中,设置一个路由组并为语言前缀:

Route::group(['prefix' => '{locale}'], function () {
    Route::get('/', function () {
        return view('welcome');
    });
});

现在,您的欢迎页面的访问路径可以通过‘/en’和‘/es’来实现,分别带有相应的语言内容。请确保您的应用能够检测并应用正确的语言。

定位检测的中间件

为了处理地区检测和应用程序,可以在Laravel中创建中间件。可以使用Artisan命令行工具:

php artisan make:middleware LocaleMiddleware

在 handle 方法中添加本地化检测逻辑:

public function handle($request, Closure $next)
{
    $locale = $request->route('locale');
    if (in_array($locale, config('app.supported_locales'))) {
        app()->setLocale($locale);
    }
    return $next($request);
}

在 app/Http/Kernel.php 文件的 $routeMiddleware 数组中注册中间件:

'setlocale' => AppHttpMiddlewareLocaleMiddleware::class,

应用我们的新‘setlocale’中间件到本地化路由组:

Route::group(['prefix' => '{locale}', 'middleware' => 'setlocale'], function() {
    // Your localized routes go here
});

生成本地化URL

使用路由本地化时,您通常需要生成具有适当本地化的URL。Laravel允许您使用“route”函数生成URL:

$localizedUrl = route('your_route_name', ['locale' => app()->getLocale()]);

为了保持模板的整洁,请考虑创建一个辅助函数来处理这一功能。

高级路线定位

为了实现更精细的控制,考虑对个别路线名称进行本地化处理,并确保从命名路线返回时尊重所选的方言或地区设置。

你可以这样定义命名路由:

Route::group(['prefix' => '{locale}', 'as' => '{locale}.'], function() {
    Route::get('/contact', function () {
        // Contact page logic
    })->name('contact');

    // More localized routes
});

按照这种方式,你可以通过使用语言前缀来引用路由,例如:

$localizedContactUrl = route(app()->getLocale().'.contact');

本地化开关

为了帮助用户在应用布局中切换语言,你可以创建一个语言切换器。遍历支持的语言和地区,生成切换链接:

<nav>
@foreach(config('app.supported_locales') as $locale)
    <a href="{{ route(Route::currentRouteName(), $locale) }}">{{ strtoupper($locale) }}</a>
@endforeach
</nav>

确保在当前路由未命名或locale参数不必要时,包含逻辑处理机制。

基于数据库的路由翻译

如果您的应用程序需要根据存储的内容进行动态路由翻译,可以考虑集成一个包或实现一个控制器来解析本地化slug以映射到模型实例。例如:

Route::get('{locale}/{slug}', 'ContentController@show');

ContentController@show 方法会根据语言查找 slug 并返回适当的视图和内容。

结论。

在Laravel应用程序中本地化路由不仅对用户体验有益,而且与框架提供的强大本地化功能相辅相成。正如我们所见,通过使用少量中间件和精心设计的路由约定,Laravel使得可以无缝地将国际化路由集成到您的应用中。

长工码奴1523

长工码奴1523

在 Laravel 中创建可本地化的路由,你可以使用 Laravel 的国际化 (i18n) 功能。这将帮助你在不同的语言环境中提供一致的用户体验。

1. 安装 Laravel 的 i18n 支持

首先,确保你已安装了 Laravel,并且已经正确配置了环境变量。然后,运行以下命令来安装 i18n:

composer require laravel/laravel-i18n

2. 创建国际化文件 (.po 文件)

你需要为每个语言添加 .po 文件。这些文件是 Laravel i18n 的核心。它们用于存储和管理各种字符串数据。

  • 在项目的 resources/lang 目录下,创建一个名为 en 的文件夹。
  • en 文件夹内,创建 .po 文件,例如 en/strings.po
  • 添加你的字符串到这个文件。例如:
    "name": "John Doe",
    "age": 30,

3. 编辑 .env 文件

在项目根目录下的 ./config/app.php 文件中,找到或编辑 app.i18n.translations 设置,将其替换为你刚创建的 .po 文件路径。例如:

'app.i18n.translations' => __DIR__ . '/lang',

这意味着现在你的应用程序可以访问任何 .po 文件,只要它位于当前目录及其子目录之下即可。

4. 配置 Laravel

打开项目的 config/app.php 文件并添加以下代码以启用 Laravel 的国际化支持:

'middleware' => [
    'web' => ['throttle:60,1'],
],

'aliases' => [
    //...
    'translator' => Translator::class,
],

接下来,启动应用并检查是否能显示正确的语言选择器。

5. 测试

测试一下 Laravel 是否能正确处理用户从浏览器选择的语言。在浏览器地址栏输入 http://yourdomain.com/yourlanguage/,你应该能看到相应的语言选择菜单。

通过以上步骤,你现在可以在 Laravel 应用程序中轻松地实现本地化功能,使你的应用程序能够根据用户的地理位置自动调整其界面和内容。