为什么使用astrotomic/laravel可翻译返回的数据具有无效语言?

yhived7q  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(117)

在laravel 9网站上,我添加了astrotomic/laravel-translatable并获取一组数据,我看到了与预期有点不同的结果因为我在config/translatable. php中定义了2种语言,默认为'en':

'locales' => [
    'en',
    'fr',
...
    'locale' => 'en',
...

我确实请求使用'fr'语言环境:

$banners           = Banner
    ::translatedIn(app()->getLocale())
    ->get(function ($banner);

我检查日志:

[id] => 5
            [text] => laravel library site
            [description] => laravel is a powerful php library
            ...
            [translations] => Array
                (
                    [0] => Array
                        (
                            [id] => 13
                            [text] => laravel library site
                            [description] => laravel is a powerful php library
                            ...
                        )

                    [1] => Array
                        (
                            [id] => 15
                            [text] => site de la bibliothèque laravel
                            [description] => laravel est une puissante bibliothèque php
                            ...
                        )

                )


文本中的文本、描述字段(横幅,而不是翻译]子数组...)是"en",而不是"fr",正如我所预期的...
在文件app/Models/banner.php中,我有:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Astrotomic\Translatable\Contracts\Translatable as TranslatableContract;
use Astrotomic\Translatable\Translatable;

class Banner extends Model implements HasMedia, TranslatableContract
{
    use InteractsWithMedia;
    use Translatable;

    protected $table = 'banners';
    protected $primaryKey = 'id';
    public $timestamps = false;

    protected $fillable = [/*'text', 'description',*/ 'url', 'active', 'ordering', 'banner_bgimage_id', 'updated_at'];
    public $translatedAttributes = ['text', 'description'];

        "laravel/framework": "^9.19",
        "astrotomic/laravel-translatable": "^11.11",

在app/应用程序/

<?php
namespace App\Models;

use DB;
use Illuminate\Database\Eloquent\Model;

class BannerTranslation extends Model
{
    public $timestamps = false;
    protected $fillable = ['text', 'description', 'updated_at'];
}

似乎我没有错过任何配置选项,但什么是错的?

    • 附加示例:**

Looking at this docs : https://docs.astrotomic.info/laravel-translatable/package/scopes#translatedin-string-usdlocale-null
我看到一些例子,比如:

Post::translatedIn('en')->get();

以及

$post = Post::first();

但举例来说:

$banner = Banner::first();
 $bannerText = $banner->translate('fr')->text;

也返回"en"中的默认值,而不是"fr"
在我的模型中
app/Models/Banner.php
我补充道:

protected $translationForeignKey = 'banner_id';

但这没有帮助,我得到了所有的文本值在默认'en'。我想我在我的模型定义中配置错误的东西,但什么?

"astrotomic/laravel-translatable": "^11.11",
"laravel/framework": "^9.19",

先谢了!

cigdeys3

cigdeys31#

1.我发现一些奇怪的我的决定,以正常工作,我需要在文件config/translatable.php设置
'区域设置' =〉空,
使用此选项,则获取数据为

$bannersInFrench = Banner
    ::translatedIn('fr')
    ->orderBy('id', 'asc')
    ->get();

我有法国商标。
1.为什么我得到了'翻译'子数组在数据的结果列表?这不是我真正需要的...

相关问题