Laravel4管理db中的翻译

时间:2014-08-20 15:58:31

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

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

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

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

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

EN:我的产品名称 FR:空白输入 DE:空白输入 等等。

欢迎提出意见

谢谢,

此致

2 个答案:

答案 0 :(得分:1)

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

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

要一次分配多个翻译,您可以使用雄辩的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
 */

答案 1 :(得分:0)

所以你的问题是如何找到让管理员为实体添加翻译的好方法?

我也使用该捆绑包,我已经完成的方法是将区域设置放入我的URL并在routes.php中检测它。

然后我在管理员后端的标题中创建了一个切换语言按钮,以便他们可以轻松切换到其他语言环境。通过这种方式,他们可以在区域设置中创建实体' en'例如,然后只需点击切换语言即可直接拨打' nl'在实体的编辑表单上添加已翻译的内容以用于' nl' locale(不需要任何额外的控制器)。

我在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

然后在我的控制器中,我可以为我的实体分配值,而不必查看语言环境,也不使用 - &gt; translate()方法(因为App :: getLocale()已经设置为我的新语言环境)< / p>

控制器更新功能如下所示:

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

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

希望让你顺利前行。