Laravel 5.2多语言与dimsav / laravel可翻译

时间:2016-04-19 14:44:53

标签: php laravel laravel-5 laravel-5.2

我正在使用dimsav进行多语言,我从guid一步一步地解决了这个问题。 (dimsav

我有一个模型类别:

use Illuminate\Database\Eloquent\Model;
use Dimsav\Translatable\Translatable;
class Category extends Model {
        use Translatable;
        public $translatedAttributes = ['name'];
 }

CategoryTranslation:

use Illuminate\Database\Eloquent\Model;
class CategoryTranslation extends Model {
         public $timestamps = false;
}

在Controller中,当我尝试使用特定语言保存时,我收到错误。这是我的控制者:

$language = App::getLocale();
$user = Auth::user();
$category = new Category();
$category->translate('en')->name = Input::get('name');  //line 35
$category->save()) 

错误:

  

at HandleExceptions-> handleError('2','从中创建默认对象)   空值',   'C:\工作空间\应用\瓦帕\ WWW \鲁兹-PALETTEN \应用\ HTTP \控制器\ CategoryController.php',   '35',数组('language'=>'en','user'=> object(User),'category'=>   对象(类别)))在CategoryController.php第35行

PS:这是我的迁移:

Schema::create('categories', function (Blueprint $table) {
    $table->increments('id');
   $table->integer('categoryId');
   $table->integer('user_id');
   $table->timestamps();
});

Schema::create('category_translations', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('category_id')->unsigned();
    $table->string('name');
    $table->string('locale')->index();

    $table->unique(['category_id','locale']);
    $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
});

我错过了什么? 如果我使用它,它可以工作:

$category->name = Input::get('name');

它将与设置为AppLocale的内容一起保存,但如何将其与translate()一起使用?

2 个答案:

答案 0 :(得分:0)

我不知道你是否解决了这个问题,但我认为你应该检查一下:

1 - 在启动Category对象时删除圆括号,使其变为: $category = new Category;

2 - 在保存功能之后更改额外的括号,因此它将是: $category->save();

3 - 确保您的输入正确命名。

这就是我所能看到的,希望你已经解决了:)。

是的,你不需要那个 迁移中的$table->integer('categoryId');不是必需的,因为$table->increments('id);正在扮演这个角色!

快乐的编码:)

答案 1 :(得分:0)

如果您创建了一个类别的新记录,则最后一个记录将使用您当前的区域设置保存记录(默认值:en)。

您只需按$category->translate('en')$category->getNewTranslation('en')更改$category->translateOrNew('en')即可。

对于你的例子:

使用默认语言环境创建一个类别(config / app.php ==> locale =>' en'):

// CategoryController
public function createCategory(Request $request)
{
    // Save record in *categories* table 
    // And save the default language (config/app.php ==> locale) in *category_translations* table.
    $category = new Category::create($request);
}

在现有类别中创建翻译:

public function createCategoryTranslation(Request $request, $id)
{
    $category = Category::find($id)

    // Solution 1 : If you want to explain the fields to be saved.
    $category->getNewTranslation('en')->name = $request->input('name');

    // Solution 2 : Mass assignement if you have multiple fields to be saved.
    $category->getNewTranslation('en')->fill($request);

    $category->save()
}

更新翻译

public function updateCategoryTranslation(Request $request, $id)
{
    $category = Category::find($id)

    // Solution 1 : If you want to explain the fields to be saved.
    $category->translate('en')->name = $request->input('name');

    // Solution 2 : Mass assignement if you have multiple fields to be saved.
    $category->translate('en')->fill($request);

    $category->save()
}

CreateOrUpdate翻译:

public function createOrUpdateCategoryTranslation(Request $request, $id)
{
    $category = Category::find($id)

    // Solution 1 : If you want to explain the fields to be saved.
    $category->translateOrNew('en')->name = $request->input('name');

    // Solution 2 : Mass assignement if you have multiple fields to be saved.
    $category->translateOrNew('en')->fill($request);

    $category->save()
}