Laravel应用语言更改?

问题描述 投票:2回答:2

我最近在Laravel为德国客户开发和应用。现在,客户希望知道该应用程序是否可以用德语而不是英语查看。我当然使用英语用Blade设计了前端的所有视图。现在有一种方法可以将视图翻译成所需的语言吗?是否有软件包或其他方法可以完成此任务?

laravel laravel-4
2个回答
4
投票

Laravel提供http://laravel.com/docs/4.2/localization中提供的本地化功能,尽管您将需要重新执行视图以使用lang字符串并将语言检测添加到控制器。

我会避免“即时”翻译,因为它们很少可靠。


2
投票

我正在使用此作曲家软件包: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'));
    }
}

在上面的代码上设置的选择器是在头视图中调用的刀片文件:

        <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文件夹中,带有国家/地区代码。

希望它对您有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.