【发布时间】:2020-04-26 14:57:09
【问题描述】:
我最近在 Laravel 中为一个德国客户开发和应用。现在客户想知道应用程序是否可以用德语而不是英语查看。我当然用英文设计了前端的所有视图。现在有没有一种方法可以将视图翻译成所需的语言?有没有一个包或其他方法来完成这个?
【问题讨论】:
我最近在 Laravel 中为一个德国客户开发和应用。现在客户想知道应用程序是否可以用德语而不是英语查看。我当然用英文设计了前端的所有视图。现在有没有一种方法可以将视图翻译成所需的语言?有没有一个包或其他方法来完成这个?
【问题讨论】:
Laravel 在 http://laravel.com/docs/4.2/localization 中提供本地化功能,尽管您需要重新创建视图以使用 lang 字符串并将语言检测添加到您的控制器。
我会避免“即时”翻译,因为它们很少可靠。
【讨论】:
我正在使用这个作曲家包:https://github.com/mcamara/laravel-localization
但是……它并不像在 Laravel 3 中那么简单。
您需要手动检查用户的语言并更改使用的语言。
首先,在 config/app.php 中设置默认语言环境:
'locale' => 'en',
然后,在同一个文件 (config/app.php) 中创建一个新的使用语言数组:
'languages' => array(
'en' => 'en_US',
'pt' => 'pt_BR',
'pl' => 'pl_PL',
'es' => 'es_LA',
'ru' => 'ru_RU',
'de' => 'de_DE',
'nl' => 'nl_NL',
'fi' => 'fi_FI',
'it' => 'it_IT',
'fr' => 'fr_FR',
),
在路由文件中,您将验证路由组中的用户语言:
Route::group(
array('prefix' => LaravelLocalization::setLocale(), //Set the language using the package
'before' => 'LaravelLocalizationRedirectFilter', //Change the URL to match the language
),
function () {
Route::controller('upload', 'ImageUploadController');
Route::controller('faviconit', 'CreateController');
Route::controller('download/{folder?}', 'DownloadController');
Route::controller('/', 'HomeController');
}
);
我有一个名为 LocalizationHelper.php 的助手类,代码如下:
<?php
class LocalizationHelper
{
/**
* To use localization in an easier way, it's set as 'pt' instead of 'pt_BR'. To get the correct Brazilian
* localization in aviary, this function return 'pt_BR' when locale is set to 'pt'
*
* @return string The correct Aviary locale string
*/
public static function getUserLanguageFromSupportedLanguages()
{
$userLanguages = Request::getLanguages();
$supportedLanguages = Config::get('app.languages');
$userLanguage = Config::get('app.locale');
foreach ($userLanguages as $language) {
$language = substr($language, 0, 2);
if (false !== array_search($language, $supportedLanguages, true)) {
$userLanguage = $language;
break;
}
}
return $userLanguage;
}
/**
* Returns html with language selector. This code removes languages without URL.
* @return \Illuminate\View\View
*/
public static function getLanguageSelector()
{
//START - Delete in v1.0
$languages = LaravelLocalization::getSupportedLocales();
$active = LaravelLocalization::getCurrentLocale();
foreach ($languages as $localeCode => $language) {
$langUrl = LaravelLocalization::getLocalizedURL($localeCode);
// check if the url is set for the language
if ($langUrl) {
$language['url'] = $langUrl;
} else {
// the url is not set for the language (check lang/$lang/routes.php)
unset($languages[$localeCode]);
}
// fill the active language with it's data
if ($active == $localeCode)
$native = $language['native'];
}
return View::make('templates.languagebar', compact('languages', 'active', 'native'));
}
}
上面代码中设置的选择器是header view中调用的blade文件:
<li class="dropdown">
{{ LocalizationHelper::getLanguageSelector() }}
</li>
然后,您必须在 config/packages/mcamara/laravel-localization/config.php 中设置配置文件。
只需将您将使用的语言复制到未注释的数组中即可。
有一点很糟糕……你必须在一些链接中添加使用的语言,如下所示:
{{ Form::open(array('url' => LaravelLocalization::getCurrentLocale() . '/faviconit', 'files' => true, 'class' => 'form-horizontal')) }}
最后,你所要做的就是添加翻译文本的代码:
<span class="help-block">
{{ trans('faviconit.formFileHelp') }}</strong>
</span>
语言位于 lang 文件夹中,带有国家代码。
希望对你有帮助:)
【讨论】: