以其他语言呈现 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 package 并完成了那个 repo 中的所有安装步骤。

我的路由、服务提供商、别名、中间件、resources/lang/ 和 laravellocalization.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

我看到我的网站以英语正常加载,这很好。

它 return 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) 或特殊的 Blade 指令 @lang('texts.heading')

等翻译函数在任何地方检索这些字符串(前置文件名)

您的视图可能如下所示:

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

由于翻译后的字符串中有 HTML 标记,因此您必须使用 {!! ... !!}.

取消转义它们

为了减轻翻译的痛苦,有 Laravel Translation Manager,Barry vd 的很棒的插件。休维尔。您可以让您的用户修改这些字符串并自动捕获未翻译的字符串。

一般来说,如果您需要高质量的翻译,我不会推荐自动翻译服务。如果你不这样做,只需考虑 javascript 库。