用其他语言呈现Laravel网站的最佳实践


Best practice to render Laravel site in other language

描述

我有一个Laravel网站是英文的。我也想让它与荷兰语兼容。


我开始我的主页很小,它只包含3句话。

<h1 class="heading">My business WiFi</h1>
<p>Management via this page both your <a>private WiFi</a> as your <a>guest wifi</a>.</p>
<p>Or follow the use of your WiFi via our <a>statistics</a>.</p>

它将呈现这个

My business WiFi
Management via this page both your private WiFi as your guest wifi.
Or follow the use of your WiFi via our statistics.

尝试

我已经安装了这个Laravel包,并完成了该回购中的所有安装步骤。

我的路由、服务提供商、别名、中间件、resources/lang/和laravelocalization.php都已就位。


routes.php

Route::group(['prefix' => LaravelLocalization::setLocale(), 'middleware' => [ 'localeSessionRedirect', 'localizationRedirect','localize'] ], function(){
    Route::get('/homepage', 'homepageController@index');
}); 

更新提供商阵列

Mcamara'LaravelLocalization'LaravelLocalizationServiceProvider::class

更新别名

'LaravelLocalization'   => Mcamara'LaravelLocalization'Facades'LaravelLocalization::class

更新$routeMiddleware

'localize' => 'Mcamara'LaravelLocalization'Middleware'LaravelLocalizationRoutes::class,
'localizationRedirect' => 'Mcamara'LaravelLocalization'Middleware'LaravelLocalizationRedirectFilter::class,
'localeSessionRedirect' => 'Mcamara'LaravelLocalization'Middleware'LocaleSessionRedirect::class

/config/laravellocalization.php

<?php
return [
    'supportedLocales' => [
        'en'          => ['name' => 'English','script' => 'Latn', 'native' => 'English'],
        'nl'          => ['name' => 'Dutch','script' => 'Latn', 'native' => 'Nederlands'],
    ],
    'useAcceptLanguageHeader' => true,
    'hideDefaultLocaleInURL' => false,
];

结果

当我访问时

http://site/nl/homepage

http://site/en/homepage
http://site/homepage

我看到我的网站加载应该是英文的,这很好。

当我访问其他未声明的站点时,它返回404

中国

Ex. http://site/zh/homepage

这很好,因为它按预期工作。


但我的主要目标是,当我登陆时,我想看到我的荷兰语网站

http://site/nl/homepage

我应该在荷兰语中看到以下3句话

My business WiFi
Management via this page both your private WiFi as your guest wifi.
Or follow the use of your WiFi via our statistics.

问题

这是我需要申报/resources/lang/nl/texts.php的东西吗?

或者这是可以通过库/插件/框架实现的吗?

您需要创建适当的文件,并用转换后的字符串(或数组(填充它们。如果未找到任何已翻译的字符串,Laravel将回退到config('fallback_locale')

// resources/lang/nl/texts.php
<?php return [
   'heading' => 'Mijn zakelijke WiFi',
   'line1' => 'Beheer via deze pagina zowel uw <a>private WiFi</a> als uw <a>gast wifi</a>.',
   'line2' => 'Of volg het gebruik van uw WiFi via onze <a>statistieken</a>.'
];

// resources/lang/en/texts.php
<?php return [
   'heading' => 'My business WiFi',
   'line1' => 'Management via this page both your <a>private WiFi</a> as your <a>guest wifi</a>.',
   'line2' => 'Or follow the use of your WiFi via our <a>statistics</a>.'
];

您可以通过转换函数trans('texts.heading')trans_choice('texts.heading', $count)或特殊的刀片指令@lang('texts.heading') 在任何地方检索这些字符串(预处理文件名(

你的观点可能是这样的:

<h1 class="heading">@lang('texts.heading')</h1>
<p>{!! trans('texts.line1') !!}</p>
<p>{!! trans('texts.line2') !!}</p>

由于翻译后的字符串中有HTML标记,因此必须使用{!! ... !!}取消对它们的捕获。

为了缓解翻译的痛苦,有一个Laravel翻译经理,伟大的插件由Barry vd。Heuvel。您可以让用户修改这些字符串,并自动捕获未翻译的字符串。

一般来说,如果您需要高质量的翻译,我不会推荐自耦服务。若并没有,那个么就考虑一下javascript库。