【问题标题】:Laravel application language change?Laravel 应用程序语言更改?
【发布时间】:2020-04-26 14:57:09
【问题描述】:

我最近在 Laravel 中为一个德国客户开发和应用。现在客户想知道应用程序是否可以用德语而不是英语查看。我当然用英文设计了前端的所有视图。现在有没有一种方法可以将视图翻译成所需的语言?有没有一个包或其他方法来完成这个?

【问题讨论】:

    标签: laravel laravel-4


    【解决方案1】:

    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'));
          }
      }
      

      上面代码中设置的选择器是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 文件夹中,带有国家代码。

      希望对你有帮助:)

      【讨论】:

        猜你喜欢
        • 2015-05-09
        • 1970-01-01
        • 1970-01-01
        • 2011-11-28
        • 1970-01-01
        • 2015-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多