Laravel本地化功能强大,使开发人员能够创建多语言网站。在Laravel实施Web 本地化,您可以为来自不同语言背景的访问者提供个性化的用户体验,最终扩大您的覆盖范围并提高用户参与度。
我们将引导您在Laravel应用程序中实现本地化,并向您介绍一个可以简化和增强本地化工作的工具!
以下是您应该本地化Laravel网站的一些重要原因。
在Laravel中实现多语言本地化时需要考虑一些要求和步骤。
在了解翻译Laravel应用程序或 Web 之前必须满足哪些要求后,我们将提供一些简单翻译Laravel的步骤。
为此,请打开要本地化的视图文件,例如 resources/views/welcome.blade.php。然后,将 body 标记替换为以下代码。
Welcome to Linguise website!
可以看到,上面的文字目前是直接写在代码中的。这效率较低,并且很难将网站翻译成不同的语言(国际化)。
我们将使上述文本更加灵活,以便它可以轻松适应不同的语言。 Laravel为此提供了一个非常有用的功能;定位系统。第一步,将现有文本替换为以下代码。
{{ __('Welcome to Linguise website!') }}
如果用户选择英语以外的语言, 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中,与许多其他框架一样,不同语言的翻译存储在单独的文件中。使用两种方法来组织这些翻译文件。
旧方法以以下结构存储文件:resources/lang/{en,fr,it}/{myfile.php}。较新的方法使用 JSON 文件,例如 resources/lang/{fr.json, it.json}。本文将重点介绍新方法,尽管除了翻译键的命名和访问方式不同之外,其原理与旧方法类似。
对于具有区域差异的语言,您应根据 ISO 15897 标准命名语言目录或文件。例如,英式英语将被命名为 en_GB 而不是 en-gb。
在Laravel中,与许多框架一样,不同语言的翻译存储在单独的文件中。组织Laravel翻译文件有两种主要方法。
本文将重点介绍第二种方法,尽管其原理适用于这两种方法(翻译键的命名和访问方式有所不同)。
对于因地区而异的语言,建议根据 ISO 15897 标准命名语言目录/文件。例如,英式英语将表示为 en_GB 而不是 en-gb。
为我们的应用程序配置了区域设置后,我们可以继续翻译默认的欢迎消息。
首先,我们在 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尚未设置为覆盖本地语言,因此目前我们将直接在路由内处理翻译。像这样修改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)。
在每个 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 在您的浏览器中处于活动状态),您应该会看到翻译的内容。您可以导航网站或刷新页面,所选语言将保持有效。
现在,我们需要为用户提供一个可点击的选项来更改Laravel Web语言切换器而不是要求他们手动在 URL 中输入区域设置代码。为了实现这一点,创建一个简单的语言切换器。在 resources/views/partials/language_switcher.blade.php 添加一个新文件并插入以下代码。
@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使用 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 }}
不同的国家/地区有不同的数字格式设置方式。例如。
为了适应Laravel应用程序中的这些变化,您可以使用 NumberFormatter。
您还可以用特定语言拼出数字。
这是货币。对于法国语言环境 (`fr`),货币将以欧元 (€) 显示,而对于美国语言环境 (`en_US`),货币将以美元 ($) 显示。
了解了文章中描述的Laravel本地化的步骤后,这个过程涉及到很多步骤,需要用户深入理解Laravel程序代码。
这无疑会给想要本地化应用程序的新手用户带来困难。因此,需要一种更具创新性的解决方案,能够快速翻译,支持本地化,并且只需要几个简单的步骤即可实现。
Linguise是一种很有前景的解决方案。 Linguise提供了一种更简单、更高效的Laravel本地化方法,无需深入的编码知识。 Linguise的主要功能包括。
Laravel网站上安装Linguise的步骤也可以轻松完成。这是一个简短的解释。
如何?使用Linguise ,您只需注册并激活,就会出现语言切换器。之后,您可以自由地进行本地化,例如通过实时编辑器、翻译媒体、图像等。
Laravel本地化是一项强大的功能,使开发人员能够创建多语言网站和应用程序。正如我们所见,内置的Laravel本地化过程涉及多个步骤,并且需要对框架有很好的理解。对于初学者或寻求更快解决方案的人来说,这可能具有挑战性。
Linguise这样的工具为那些寻求更简化方法的人提供了一种创新的替代方案。这些解决方案提供快速翻译功能、轻松集成以及用户友好的功能,例如可定制的语言切换器和图像翻译。现在,创建您的Linguise帐户Laravel本地化功能!
接收有关网站自动翻译、国际搜索引擎优化等的新闻!
不要不分享您的电子邮件就离开!
我们不能保证您会中奖,但我们可以承诺提供一些有关翻译和偶尔折扣的有趣信息。