我正在使用laravel4构建电子商务应用程序(多语言)
我添加了此捆绑包来管理翻译: https://github.com/dimsav/laravel-translatable 因此,当我添加新产品时,我使用默认语言环境来存储翻译:
$products->translate(App::getLocale())->name = 'my product name';
$products->save();
我有点困惑如何管理其他翻译,我应该创建一个ProductTranslationController并在可用于构建文本输入的所有语言环境中使用foreach吗?
EN:我的产品名称 FR:空白输入 DE:空白输入 等等。
欢迎提出意见
谢谢,
此致
答案 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()中设置的语言环境中
希望让你顺利前行。