Laravel本地化是一种强大的功能,使开发人员能够创建多语言网站。通过在您的Laravel项目中实施网络本地化,您可以为来自不同语言背景的访客提供个性化的用户体验,最终扩大您的覆盖范围并提高用户参与度。
我们将指导您在 Laravel 应用中实施本地化,并向您介绍一种可以简化和增强本地化工作的工具!
为什么要本地化 Laravel 网站?

多语言 Laravel 本地化的要求

在 Laravel中实施多语言本地化时,需要考虑一些要求和步骤。.
- 要获取最新的本地化功能,请确保您使用的是最新版本的 Laravel (例如,版本10.x)。.
- 对PHP和 Laravel 框架的基本了解将有助于实施过程。.
- 设置支持 Laravel的本地开发环境或服务器,包括Web服务器和数据库。.
- 从一开始就确定您的应用程序将支持的语言。.
简单的 Laravel 翻译

在了解了在翻译 Laravel 应用程序或网络之前必须满足的要求之后,我们将提供一些简单的翻译 Laravel 的步骤。.
要做到这一点,请打开您要本地化的视图文件,例如resources/views/welcome.blade.php。然后,用以下代码替换body标签。.
Welcome to Linguise website!
如您所见,上面的文本目前直接写在代码中。这效率较低,并且使得将网站翻译成不同语言(国际化)变得困难。
我们将使上述文本更具灵活性,以便可以轻松适应不同的语言。 Laravel 为此提供了一个非常有用的功能,即本地化系统。第一步是用以下代码替换现有文本。.
{{ __('Welcome to Linguise website!') }}
Laravel 将默认显示上述文本,如果用户选择英语以外的语言,则查找翻译。在这种情况下,英语将用作应用程序的默认语言。.
在 Laravel 多语言Web中设置区域设置

但是 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',
键上的说明应该很清楚。总之,语言环境键保存应用程序的默认语言环境(如果代码中未指定其他语言环境)。如果在应用程序中请求不存在的语言环境,则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 翻译文件。.
- 传统方法涉及将文件存储在以下路径下:resources/lang/{en,fr,it}/{myfile.php}。.
- 现代方法使用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 尚未设置以覆盖本地语言,因此目前我们将在路由中直接处理翻译。像这样修改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');
});
在这种情况下,我们正在捕获一个可选的区域GET参数,并根据它设置当前区域(如果请求的区域得到支持)。.
现在,您可以访问您的网站,并在URL中将任何支持的语言作为第一个段。例如,导航到localhost/it或localhost/fr将显示本地化的内容。如果您没有指定区域或选择不受支持的区域, Laravel 将默认为英语(en)。.
Laravel的本地化中间件
在每个URL中包含语言环境可能并不理想,还可能破坏网站的视觉吸引力。为了解决这个问题,我们将设置一个语言切换器,并利用用户会话来显示翻译的内容。您可以在app/Http/Middleware/Localization.php文件中创建新的中间件,或者通过运行artisan make:middleware Localization命令生成它。.
然后,在里面添加以下代码。.
如果用户选择的位置选项存在于会话中,则此中间件将指示 Laravel 使用该位置。.
由于我们需要在每个请求上运行该操作,因此将其添加到app/Http/Kernel.php中的默认中间件堆栈中,用于Web中间件组。.
/**
* The application's route middleware groups.
*
* @var array>
*/
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在您的浏览器中处于活动状态),您应该看到翻译的内容。您可以导航该站点或刷新页面,所选语言将保持有效。.
语言切换器实现
@foreach($available_locales as $locale_name => $available_locale)
@if($available_locale === $current_locale)
{{ $locale_name }}
@else
{{ $locale_name }}
@endif
@endforeach
要在“欢迎”视图中包含新创建的语言切换器,只需将以下行添加到您的welcome.blade.php文件中,切换器就会出现在您希望的位置。.
@include('partials/language_switcher')
{{ __('Welcome to our website!') }}
打开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 显示本地化日期。.
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’]) }}
{{ trans_choice('{0} There :form :count apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
{{ $date_message }}
格式化数字和货币
不同国家有不同的数字格式化方式。例如。.
- 法国 → 123 123,12
- 德国 → 123.123,12
- 日本 → 123,123
要在您的 Laravel 应用程序中适应这些变化,您可以使用NumberFormatter。.
您还可以用特定语言拼出数字。.
以下是货币。对于法语语言环境(`fr`),货币将以欧元(€)显示,而对于美国语言环境(`en_US`),货币将以美元($)显示。.
替代解决方案 Laravel 本地化与 Linguise

了解文章中描述的 Laravel 本地化步骤后,这个过程涉及许多步骤,要求用户深入了解 Laravel 程序代码。.
这无疑会给想要本地化应用的新手用户带来困难。因此,需要一个更创新的解决方案,能够快速翻译,支持本地化,并且只需几个简单的步骤即可实现。.
一个有前途的解决方案是 Linguise。 Linguise 提供了一种更简单、更高效的 Laravel 本地化方法,无需深入的代码知识。 Linguise 的主要功能包括。.
- 与 Laravel轻松集成
- 无需编码即可自定义语言切换器
- 图像翻译
- 实时编辑器,可根据本地上下文自定义翻译
- 动态内容翻译
- 多语言版本的SEO优化
安装步骤Linguise于Laravel网站同样可以轻松完成。以下是简要说明。
- 创建一个 Linguise 账户(免费试用30天)
- 注册您的 Laravel 网站域名并输入一些信息。您将获得一个API密钥。.
- 上传并连接 Linguise 翻译脚本到您获得的 Laravel 文件夹。.
- 在htaccess文件中设置语言URL。.
- 将语言切换器脚本插入HTML头部。.
- 根据需要自定义语言切换器
- 语言切换器将出现在 Laravel 网站上,内容可以自动翻译。.
如何做?使用 Linguise,您只需注册并激活,语言切换器就会出现。之后,您可以自由本地化,例如通过实时编辑器,翻译媒体,图像等。.



