【问题标题】:Laravel4 manage translation in dbLaravel4 在数据库中管理翻译
【发布时间】:2014-08-20 15:58:30
【问题描述】:

我正在使用 laravel4 构建一个电子商务应用程序(多语言)

我已添加此捆绑包来管理翻译: https://github.com/dimsav/laravel-translatable 因此,当我添加新产品时,我使用默认语言环境来存储翻译:

$products->translate(App::getLocale())->name = 'my product name';
$products->save();

我有点困惑如何管理其他翻译,我应该创建一个 ProductTranslationController 并在所有可用的语言环境上使用 foreach 来构建文本输入吗?

ZH : 我的产品名称 FR : 空白输入 DE : 空白输入 等等..

欢迎提出想法

谢谢,

问候,

【问题讨论】:

    标签: php laravel laravel-4 e-commerce translation


    【解决方案1】:

    首先,要设置/获取当前语言环境的翻译 (App::getLocale()),您可以省略 ->translate(App::getLocale()) 部分:

    echo $product->name; // 'my old product name'
    $product->name = 'my product name';
    $product->save();
    

    要一次分配多个翻译,可以使用 eloquent 的 create()fill() 方法:

    $product->fill(Input::get('translations'));
    
    /* Where Input::get('translations') would be defined in the view like this:
     * 
     * @foreach (Config::get('app.locales') as $locale)
     *     {{ $locale }}
     *     {{ Form::text("translations[{$locale}][name]") }}
     * @endforeach
     */
    

    【讨论】:

      【解决方案2】:

      那么您的问题是如何找到一种好方法让管理员为实体添加翻译?

      我也使用该捆绑包,我所做的方法是将语言环境放在我的 URL 中并在我的 routes.php 中检测它。

      然后我在我的管理员后端的标题中创建了一个切换语言按钮,这样他们就可以轻松地切换到不同的语言环境。这样他们就可以在语言环境“en”中创建实体,然后只需在实体的编辑表单上单击将语言切换为“nl”,然后为“nl”语言环境添加翻译内容(无需任何额外的控制器)。

      我的 routes.php 中的语言环境检测如下所示:

      $locale = Request::segment(1);
      if(in_array($locale, array('nl', 'zh'))){
          App::setLocale($locale);
      } else {
          // fall back to the default locale (en)
          $locale = null;
      }
      
      
      // Locale prefix group without setLocale filter
      Route::group(array('prefix' => $locale), function()
      {
          // Language switch
          Route::get('/switch-language/{locale}', array('as' => 'switchlanguage', 'uses' => 'DefaultController@switchLanguage'))->where('locale', '(en|nl|zh)');
      
      // other routes ....
      
      });
      

      在 switchLanguage 中,我只需将 url 中的旧语言环境替换为新语言环境。例如从 www.example.com/zh/blabla 到 www.example.com/nl/blabla

      然后在我的控制器中,我可以为我的实体分配值,而无需查看语言环境或使用 ->translate() 方法(因为 App::getLocale() 已设置为我的新语言环境)

      控制器更新函数如下所示:

      $article->title = Input::get('title');
      $article->save();
      

      title 是翻译后的字段,它会自动保存在我的 routes.php 中 App::getLocale() 中设置的语言环境中

      希望能助你一臂之力。

      【讨论】:

        猜你喜欢
        • 2013-01-02
        • 1970-01-01
        • 2011-03-25
        • 2021-06-28
        • 1970-01-01
        • 2015-12-08
        • 1970-01-01
        • 2012-04-30
        • 2010-11-23
        相关资源
        最近更新 更多