Laravel 本地化分步指南 [指南]

通过全球扩张将您的业务提升到新的水平。业务增长与发展。.
Table of Contents

Laravel 本地化是一项强大的功能,使开发者能够创建多语言网站。通过在您的 web localization in your Laravel 项目中实施 网站本地化 ,您可以为来自不同语言背景的访客提供个性化的用户体验,最终扩大您的覆盖范围并提高用户参与度。

我们将引导您在 Laravel 应用程序中实现本地化,并向您介绍一款能够简化和增强本地化工作的工具!

为什么要对 Laravel 网站进行本地化?

一名身穿橙色背心的男子手持一台显示世界地图的平板电脑。图中展示了各个国家的国旗。.

以下是您应该对 Laravel 网站进行本地化的一些重要原因。.

  • 触达全球受众: 通过本地化您的 Laravel 网站,您可以将应用覆盖范围扩展到国际受众。这使来自不同国家和语言背景的用户能够理解并与您的内容互动。
  • 改善用户体验: 本地化允许用户使用母语与应用交互,从而显著提升用户体验。这可以提高参与度、降低跳出率并提升转化率。
  • 竞争优势: 在竞争激烈的全球市场中,以多种语言提供应用可以带来显著的竞争优势。这体现了您对国际市场的承诺,并有助于您更有效地进入新市场。
  • 提升 SEO: 本地化良好的网站往往在特定语言的搜索中在搜索引擎上排名更好。这可以通过多语言翻译 提升你的博客流量 以及在各市场的在线可见度。

多语言 Laravel 本地化的要求

两个人正在一块显示各种应用的大屏幕前协作。他们看起来正在一起工作。.

在 Laravel中实施多语言本地化时,需要考虑一些要求和步骤。.

  • 要获取最新的本地化功能,请确保您使用的是最新版本的 Laravel (例如,版本 10.x)。.
  • 对 PHP 和 Laravel 框架有基本了解将有助于实施过程。.
  • 搭建一个支持 Laravel的本地开发环境或服务器,包括 Web 服务器和数据库。.
  • 从一开始就确定您的应用程序将支持哪些语言。.

简单的 Laravel 翻译

一名男子正在使用笔记本电脑工作。屏幕上显示着网页浏览内容。.

在了解翻译 Laravel 应用程序或网页之前必须满足哪些要求后,我们将提供一些简单翻译 Laravel 的步骤。.

为此,请打开您想要本地化的视图文件,例如 resources/views/welcome.blade.php。然后,用以下代码替换 body 标签。.

				
					<body class="antialiased">
    <div class="relative flex items-top justify-center min-h-screen bg-gray-100 sm:items-center py-4 sm:pt-0">
        <div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
            <div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
                Welcome to Linguise website!
            </div>
        </div>
    </div>
</body>
				
			

如您所见,上面的文本目前是直接写在代码中的。这种方式效率较低,并且难以将网站 翻译成不同语言 (国际化)。 

我们将使上述文本更加灵活,以便轻松适配不同语言。 Laravel 为此提供了一个非常有用的功能:本地化系统。第一步,用以下代码替换现有文本。.

				
					{{ __('Welcome to Linguise website!') }}
				
			

Laravel 默认会显示上述文本,如果用户选择了英语以外的语言,则会查找翻译。在这种情况下,英语将作为应用程序的默认语言。.

在 Laravel 多语言网站中设置区域设置

两个人正在电脑屏幕前工作。他们正在与大型显示器进行交互。.

但 Laravel 是如何确定当前语言,或者知道应用程序中有哪些可用语言的呢?它会检查 config/app.php 文件中的区域设置。打开该文件,查找以下两个键。.

				
					/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/

'locale' => 'en',

/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/

'fallback_locale' => 'en',

				
			

键上方的说明应该很清楚。总之,locale 键保存应用程序的默认区域设置(如果代码中未指定其他区域设置)。如果应用程序中请求了不存在的区域设置,则会激活 fallback_locale。.

现在,让我们向此文件添加一个新键,以提供所有受支持区域设置的列表。.

				
					/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/

'available_locales' => [
  'English' => 'en',
  'Italian' => 'it',
  'French' => 'fr',
],


				
			

目前,我们已经尝试让 Laravel 网站支持三种语言,即英语、意大利语和法语。.

Laravel 翻译文件概览

一位女士正指着一个显示各种彩色图标的大型电脑屏幕。屏幕背景为白色,上面有蓝色和紫色的图标。.

在 Laravel中,与许多其他框架一样,不同语言的翻译内容存储在单独的文件中。组织这些翻译文件有两种方法。.

旧方法将文件存储在以下结构中:resources/lang/{en,fr,it}/{myfile.php}。新方法使用 JSON 文件,例如 resources/lang/{fr.json, it.json}。本文将重点介绍新方法,不过旧方法的原理类似,只是在翻译键的命名和访问方式上有所不同。.

对于有地区差异的语言,您应按照 ISO 15897 标准来命名语言目录或文件。例如,英式英语应命名为 en_GB,而不是 en-gb。.

基本信息

在 Laravel中,与许多框架一样,不同语言的翻译存储在单独的文件中。组织 Laravel 翻译文件有两种主要方法。.

  1. 传统方法是将文件存储在以下路径下:resources/lang/{en,fr,it}/{myfile.php}。.
  2. 现代方法使用 resources/lang/{fr.json, it.json} 文件。.

本文将重点介绍第二种方法,不过这些原则对两种方法都适用(只是在翻译键的命名和访问方式上有所不同)。.

对于因地区而异的语言,建议按照 ISO 15897 标准命名语言目录/文件。例如,英式英语应表示为 en_GB,而不是 en-gb。.

创建 Laravel 翻译文件

为我们的应用程序配置好区域设置后,我们就可以继续翻译默认的欢迎消息了。.

让我们首先在 resources/lang 目录中创建 JSON 格式的新本地化文件。首先,我们将创建一个 resources/lang/it.json 文件,并填入相应的翻译内容。.

				
					{
  "Welcome to Linguise website!": "Benvenuti nel sito web di Linguise!"
}

				
			

接下来,添加一个 resources/lang/fr.json 文件。.

				
					{
 "Welcome to Linguise website!": "Bienvenue sur le site de Linguise"
}

				
			

如您所见,我们一直在引用 welcome.blade.php 文件中的默认消息({{ __(‘欢迎访问 Linguise 网站!’) }})。无需创建 en.json 文件,因为 Laravel 会自动识别默认消息为英文。.

在 Laravel 多语言应用中设置语言切换器

人们正在与一个大型电子邮件界面进行互动。.

此外, Laravel 尚未设置为覆盖本地语言,因此目前我们将在路由中直接处理翻译。像这样修改 routes/web.php 文件中的默认欢迎路由。.

				
					Route::get('/{locale?}', function ($locale = null) {
    if (isset($locale) && in_array($locale, config('app.available_locales'))) {
        app()->setLocale($locale);
    }
    
    return view('welcome');
});
				
			

在这种情况下,我们会捕获一个可选的 locale GET 参数,并据此设置当前区域设置(前提是所请求的区域设置受支持)。.

现在,您可以访问您的网站,并将任何受支持的语言作为 URL 的第一段。例如,访问 localhost/it 或 localhost/fr 将显示本地化内容。如果您未指定区域设置或选择了不受支持的区域设置, Laravel 将默认使用英语 (en)。.

Laravel 的本地化中间件

在每个 URL 中都包含区域设置可能并不理想,还可能影响网站的视觉吸引力。为解决这个问题,我们将设置一个语言切换器,并利用用户会话显示翻译后的内容。你可以在 app/Http/Middleware/Localization.php 文件中创建新的中间件,或通过运行 artisan make:middleware Localization 命令来生成它。.

然后,在其中添加以下代码。.

				
					<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;

class Localization
{
    /**
    * Handle an incoming request.
    *
    * @param  \Illuminate\Http\Request  $request
    * @param  \Closure  $next
    * @return mixed
    */
    public function handle(Request $request, Closure $next)
    {
        if (Session::has('locale')) {
            App::setLocale(Session::get('locale'));
        }
        return $next($request);
    }
}


				
			

如果会话中存在此选项,该中间件将指示 Laravel 使用用户选择的位置。.

由于我们需要该操作在每次请求时都运行,请将其添加到 app/Http/Kernel.php 中 web 中间件组的默认中间件栈中。.

				
					/**
* The application's route middleware groups.
*
* @var array<string, array<int, class-string|string>>
*/
protected $middlewareGroups = [
  'web' => [
    \App\Http\Middleware\EncryptCookies::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\VerifyCsrfToken::class,
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
    \App\Http\Middleware\Localization::class, // <--- add this
],


				
			

修改路线

接下来,在 routes/web.php 文件中定义一个用于更改区域设置的路由。这里我们使用的是闭包路由,但如果你愿意,也可以将相同的代码放在控制器中。.

				
					Route::get('language/{locale}', function ($locale) {
   app()->setLocale($locale);
   session()->put('locale', $locale);
   return redirect()->back();
});

				
			

此外,请移除之前添加到默认欢迎路由中的语言切换功能。您的根路由现在应如下所示。.

				
					Route::get('/', function () {
   return view('welcome');
});

				
			

完成此操作后,用户只能通过访问 localhost/language/{locale} 来切换当前语言。所选区域设置将保存在会话中,用户将被重定向回之前的页面(由本地化中间件处理)。. 

要测试它,请访问 localhost/language/it(假设您的浏览器中会话 cookie 处于活动状态),您应该会看到翻译后的内容。您可以浏览网站或刷新页面,所选语言将保持生效。.

语言切换器实现

现在,我们需要为用户提供一个可点击的选项来更改 语言切换器 Laravel web ,而不是要求他们手动在 URL 中输入区域代码。为此,请创建一个简单的语言切换器。在 resources/views/partials/language_switcher.blade.php 添加一个新文件,并插入以下代码。

				
					<div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
    @foreach($available_locales as $locale_name => $available_locale)
        @if($available_locale === $current_locale)
            <span class="ml-2 mr-2 text-gray-700">{{ $locale_name }}</span>
        @else
            <a class="ml-1 underline ml-2 mr-2" href="language/{{ $available_locale }}">
                <span>{{ $locale_name }}</span>
            </a>
        @endif
    @endforeach
</div>


				
			

要将新创建的语言切换器添加到“welcome”视图中,只需在 welcome.blade.php 文件中您希望切换器出现的位置添加以下代码行。.

				
					<body class="antialiased">
    <div class="relative flex items-top justify-center min-h-screen bg-gray-100 sm:items-center py-4 sm:pt-0">
        <div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
            @include('partials/language_switcher')

            <div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
                {{ __('Welcome to our website!') }}
            </div>
        </div>
    </div>
</body>


				
			

打开 app/Providers/AppServiceProvider.php 文件,并在 boot() 方法中添加以下代码,以便在使用语言切换器时与所有视图共享当前区域设置

				
					* Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    view()->composer('partials.language_switcher', function ($view) {
        $view->with('current_locale', app()->getLocale());
        $view->with('available_locales', config('app.available_locales'));
    });
}


				
			

Laravel PHP 中的高级翻译功能

人们正在开展项目的插图。一个团队正在协作。.

在本次讨论中,我们将接着处理其他本地化组件,即日期、数字和货币。以下是具体步骤。.

Laravel 中的本地化日期

在本地化过程中,处理日期和时间至关重要。 Laravel 使用 Carbon 来管理日期和时间。以下是如何使用 Carbon 显示本地化日期的方法。.

				
					<?php
Route::get('/', function () {
    $today = \Carbon\Carbon::now()
        ->settings(
            [
                'locale' => app()->getLocale(),
            ]
        );

    // LL is macro placeholder for MMMM D, YYYY (you could write same as dddd, MMMM D, YYYY)
    $dateMessage = $today->isoFormat('dddd, LL');

    return view('welcome', [
        'date_message' => $dateMessage
    ]);
});


				
			

这段代码根据应用程序的当前区域设置 Carbon 的区域设置,并相应地格式化日期。.

在视图中显示本地化日期:

				
					{{ __('Welcome to our website, :Name', ['name' => ‘Johb’]) }}
<br>
{{ trans_choice('{0} There :form :count apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
<br>
{{ $date_message }}


				
			

数字和货币格式化

不同国家有不同的数字格式。例如。.

  • 法国 → 123 123,12
  • 德国 → 123.123,12
  • 日本 → 123,123

为了在您的 Laravel 应用程序中适应这些变化,您可以使用 NumberFormatter。.

				
					<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);

$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
				
			

您还可以用特定语言拼写数字。.

				
					<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);

$num2 = NumberFormatter::create('it', NumberFormatter::SPELLOUT);
				
			

以下是货币。对于法语区域设置(`fr`),货币将以欧元(€)显示,而对于美国区域设置(`en_US`),将以美元($)显示。.

				
					<?php
$currency1 = NumberFormatter::create('it', NumberFormatter::CURRENCY);

$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
				
			
Break Language Barriers
告别语言障碍,迎接无限增长!今天就试试我们的自动翻译服务。.

使用 Linguise 进行 Laravel 本地化的替代方案

一个团队正在共同开展一个数字项目。他们周围环绕着各种数字工具和符号。.

在了解了文章中描述的 Laravel 本地化步骤后,这一过程涉及许多步骤,需要用户深入理解 Laravel 程序代码。.

这无疑会给希望本地化其应用程序的新手用户带来困难。因此,需要一种更具创新性的解决方案,能够实现快速翻译、支持本地化,并且只需几个简单步骤即可实施。.

一个很有前景的解决方案是 Linguise。 Linguise 为 Laravel 本地化提供了一种更简单、更高效的方法,无需深入的编码知识。 Linguise 的主要功能包括。.

  • 轻松集成 Laravel
  • 无需编码即可自定义语言切换器
  • 图片翻译
  • 实时编辑器,可根据本地语境自定义翻译
  • 针对动态生成内容的动态翻译
  • 多语言版本的 SEO 优化

在 安装 Linguise 的步骤 Laravel 网站上 也可以轻松完成。以下是一个简要说明。

  1. 创建一个 Linguise 账户(免费使用 30 天试用期)
  2. 注册您的 Laravel 网站域名并输入一些信息。您将获得一个 API 密钥。.
  3. 将 Linguise 翻译脚本上传并连接到您获取的 Laravel 文件夹。.
  4. 在 htaccess 文件中设置语言 URL。.
  5. 将语言切换器脚本插入到 HTML 的 head 中。.
  6. 根据需要自定义语言切换器
  7. 语言切换器将显示在 Laravel 网站上,内容可以自动翻译。.

如何实现?使用 Linguise,您只需注册并激活,语言切换器就会出现。之后,您就可以自由地进行本地化,例如通过实时编辑器翻译媒体、图片等。.

准备好探索新市场了吗?免费试用我们的自动翻译服务,享受 1 个月无风险试用。无需信用卡!

Conclusion

Laravel 本地化是一项强大的功能,使开发者能够创建多语言网站和应用程序。正如我们所见,内置的 Laravel 本地化流程涉及多个步骤,并且需要对框架有良好的理解。对于初学者或寻求更快速解决方案的人来说,这可能具有挑战性。.

像 Linguise 这样的工具为寻求更简化方法的人提供了一种创新替代方案。这些解决方案提供快速翻译能力、轻松集成以及可自定义的语言切换器和图像翻译等用户友好功能。现在, 创建您的 Linguise 账户 ,享受我们为您的 Laravel 进行本地化的功能!

您可能还感兴趣阅读

别错过!
订阅我们的新闻简报

获取有关网站自动翻译、国际SEO等的最新资讯!

Invalid email address
试一试吧。每月一次,您可以随时取消订阅。.

别走,留下您的邮箱!

我们无法保证您会中彩票,但我们可以承诺提供一些关于翻译的有趣资讯以及偶尔的折扣。.

别错过!
Invalid email address