Laravel本地化功能强大,使开发人员能够创建多语言网站。在Laravel实施Web 本地化,您可以为来自不同语言背景的访问者提供个性化的用户体验,最终扩大您的覆盖范围并提高用户参与度。
我们将引导您在Laravel应用程序中实现本地化,并向您介绍一个可以简化和增强本地化工作的工具!
为什么要本地化Laravel网站?
以下是您应该本地化Laravel网站的一些重要原因。
- 覆盖全球受众:通过本地化您的Laravel网站,您可以将应用程序的覆盖范围扩展到国际受众。这使得来自不同国家和语言背景的用户能够理解您的内容并与之互动。
- 改善用户体验:本地化允许用户以母语与应用程序交互,从而显着改善用户体验。这可以提高参与率、降低跳出率并提高转化率。
- 竞争优势:在竞争激烈的全球市场中,提供多种语言的应用程序可以比竞争对手提供显着的优势。它显示了您对国际市场的承诺,并可以帮助您更有效地进入新市场。
- 改善搜索引擎优化:本地化良好的网站往往在搜索引擎中针对特定语言的搜索排名更高。这可以通过多语言翻译增加您的博客流量
多语言Laravel本地化的要求
在Laravel中实现多语言本地化时需要考虑一些要求和步骤。
- 要获得最新的本地化功能,请确保您使用的是最新版本的Laravel (例如版本 10.x)。
- 对 PHP 和Laravel框架的基本了解将有助于实施过程。
- 设置支持Laravel本地开发环境或服务器,包括 Web 服务器和数据库。
- 从一开始就确定您的应用程序将支持的语言。
简单的Laravel翻译
在了解翻译Laravel应用程序或 Web 之前必须满足哪些要求后,我们将提供一些简单翻译Laravel的步骤。
为此,请打开要本地化的视图文件,例如 resources/views/welcome.blade.php。然后,将 body 标记替换为以下代码。
Welcome to Linguise website!
可以看到,上面的文字目前是直接写在代码中的。这效率较低,并且很难将网站翻译成不同的语言(国际化)。
我们将使上述文本更加灵活,以便它可以轻松适应不同的语言。 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',
按键上面的解释应该很清楚。总之,区域设置键保存应用程序的默认区域设置(如果代码中没有指定其他区域设置)。如果应用程序中请求不存在的区域设置,则会激活fallback_locale。
现在,让我们向该文件添加一个新键以提供所有受支持的区域设置的列表。
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
至此,我们已经尝试Laravel web支持三种语言,分别是英语、意大利语、法语。
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 文件中的默认消息({{ __('Welcome to Linguise website!') }})。无需创建 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');
});
在本例中,我们捕获一个可选的区域设置 GET 参数并根据它设置当前区域设置(如果支持请求的区域设置)。
现在,您可以访问您的网站并将任何支持的语言作为 URL 的第一段。例如,导航到 localhost/it 或 localhost/fr 将显示本地化内容。如果您未指定区域设置或选择不支持的区域设置, Laravel将默认为英语 (en)。
Laravel的本地化中间件
在每个 URL 中包含区域设置可能并不理想,并且可能会破坏网站的视觉吸引力。为了解决这个问题,我们将设置一个语言切换器并利用用户会话来显示翻译后的内容。您可以在 app/Http/Middleware/Localization.php 文件中创建新的中间件,或通过运行 artisan make:middleware Localization 命令生成它。
然后,在里面添加以下代码。
如果会话中存在此选项,此中间件将指示Laravel使用用户选择的位置。
由于我们需要在每个请求上运行该操作,因此将其添加到 web 中间件组的 app/Http/Kernel.php 中的默认中间件堆栈中。
/**
* 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`),货币将以美元 ($) 显示。
使用Linguise的替代解决方案Laravel本地化
了解了文章中描述的Laravel本地化的步骤后,这个过程涉及到很多步骤,需要用户深入理解Laravel程序代码。
这无疑会给想要本地化应用程序的新手用户带来困难。因此,需要一种更具创新性的解决方案,能够快速翻译,支持本地化,并且只需要几个简单的步骤即可实现。
Linguise是一种很有前景的解决方案。 Linguise提供了一种更简单、更高效的Laravel本地化方法,无需深入的编码知识。 Linguise的主要功能包括。
- 与Laravel轻松集成
- 无需编码即可自定义语言切换器
- 图片翻译
- 实时编辑器可根据本地上下文定制翻译
- 动态生成内容的动态翻译
- 多语言版本SEO优化
Laravel网站上安装Linguise的步骤也可以轻松完成。这是一个简短的解释。
- 创建Linguise帐户(免费使用 30 天免费试用)
- 注册您的Laravel网络域名并输入一些信息。您将获得一个 API 密钥。
- 上传Linguise翻译脚本并将其连接到您获得的Laravel文件夹。
- htaccess 文件中设置语言 URL。
- 将语言切换器脚本插入 HTML 的头部。
- 根据需要自定义语言切换器
- 语言切换器将出现在Laravel网页上,并且内容可以自动翻译。
如何?使用Linguise ,您只需注册并激活,就会出现语言切换器。之后,您可以自由地进行本地化,例如通过实时编辑器、翻译媒体、图像等。