如何使用dimsav / laravel-translatable包获取特定的值/名称

时间:2016-04-05 05:09:27

标签: laravel

我已经关注了doc。我创建了两个表:

  1. 国家/地区
  2. country_translations。
  3. enter image description here

    现在我更改了列name => keyvalue,因为我可以通过查询key获取值(lang文本)。

    比如说:

    $r = 'DE';//App::getLocale(); // 'fr'
    $germany = Country::where('code', $r)->first();
    
    // I want to get value where key= 'contacts-last-name'
    $translation = $germany->translate($r, true)->where('key', 'contacts-last-name')->value;
    
    print_r($translation);
    exit("----");
    

    我明白了:

    ERROR: Undefined property
    

    如何使用新查询/子查询(键)获取特定值。

    这里的示例是我的方法和视图

    更新了以下方法::

    $translation = $germany->translate($r, true)->where('key', 'contacts-last-name')->first();
    
        echo "<pre>"; print_r($translation->toArray()); exit("----");
    

    得到了答案:

    Array
    (
        [id] => 1
        [country_id] => 83
        [key] => contacts-last-name
        [value] => Achternaam
        [locale] => DE
    
    )
    

    在视图页面中,我有一个表单:

            <label class="col-sm-2 control-label">{{trans('labels.contacts-first-name')}}</label>
            <div class="col-sm-4">
                <input name="first_name" id="first_name" type="text" class="form-control" required disabled>
            </div>
    
           <label class="col-sm-2 control-label">{{trans('labels.contacts-last-name')}}</label>
            <div class="col-sm-4">
                <input type="text" id="last_name" name="last_name" class="form-control" disabled>
            </div>
    

    对于这一个我有一个问题,我如何能够传递翻译数据并始终制作可转换的视图{{trans('labels.contacts-last-name')}}

3 个答案:

答案 0 :(得分:0)

更改此行

$translation = $germany->translate($r, true)->where('key', 'contacts-last-name')->value;

到此,然后尝试

$translation = $germany->translate($r, true)->where('key', 'contacts-last-name')->get();

print_r($translation);
exit("----");

已更新

在你看来,{{trans('labels.contacts-last-name')}}这种方式意味着你试图从项目中存在的lang目录中获取翻译,实际上这是基于手动文件/数组(密钥/对)的方式。

虽然你想要基于Dynamic / DB,但你可以这样做

$translation变量传递到您的视图中,例如

return view('form-view', compact('translation'));

然后在您的view中,您可以执行此操作。

<label class="col-sm-2 control-label">{{$translation[0]->value}}</label>
<div class="col-sm-4">
    <input name="first_name" id="first_name" type="text" class="form-control" required disabled>
</div>

   <label class="col-sm-2 control-label">{{$translation[1]->value}}</label>
    <div class="col-sm-4">
        <input type="text" id="last_name" name="last_name" class="form-control" disabled>
    </div>

答案 1 :(得分:0)

您可以像这样访问它: $translation = $germany->{'contacts-last-name:'.$r};

https://github.com/dimsav/laravel-translatable/blob/master/src/Translatable/Translatable.php#L153

答案 2 :(得分:0)

之后

echo "<pre>"; print_r($translation->toArray()); exit("----");

结果:

Array
(
    [id] => 1
    [country_id] => 83
    [key] => contacts-last-name
    [value] => Achternaam
    [locale] => DE
)