在laravel中翻译输入字段的名称

时间:2015-06-06 21:48:48

标签: php laravel laravel-5 translation

我正在Laravel创建一个应用程序,我被困在翻译部分 我有一个表单字段,如下所示:

{!! Form::password('password') !!}

当用户将该字段留空时,我收到错误:

  

密码字段是必需的

这对于英文版本是正确的。

但是当我将我的申请改为荷兰语时,我希望看到

  

Het wachtwoord veld is verplicht

我已将此添加到翻译文件中,但因为此sentece将用于每个字段 例如用户名和电子邮件,以及它使用字段的名称

所以现在我收到了消息 'Het password veld is verplicht'而不是'Het wachtwoord veld is verplicht'

我知道我不应该更改输入字段的名称,因为我的控制器希望密码字段具有名称密码 这是创建用户的代码,因为您可以看到它使用$data->password

public function createUser($data)
{
    /* store the users email in variable */
    $email = $data->email;

    /* Creates a new user in the database with the filled in email and password */
    $this->create([
        'email' => $email,
        'password' => \Hash::make($data->password)
    ]);
}

我的问题是如何以所要求的语言获取字段的名称? 所以我仍然希望能够使用$data->password但我还希望以正确的语言查看字段名称。

有没有人知道如何做到这一点?

注意我知道如何在laravel中使用翻译选项我不想要任何答案,例如:
要翻译刀片使用@lang('translatefile.name')

2 个答案:

答案 0 :(得分:3)

当我查看了haakym在评论中发布的setAttributeNames方法时,我发现了解决问题的方法。

在validation.php底部的laravel 5中有一个名为attributes的数组 在数组中,您可以提供名称属性的转换。

这实际上是一个非常简单的解决方案,但我花了几个小时才找到

感谢haakym的建议,因为它帮助我找到答案!

答案 1 :(得分:3)

使用验证器

如果您直接使用验证器进行验证,则可以执行以下操作:

// set up the validator
$validator = Validator::make(Input::all(), $rules);

// set the attribute names
$validator->setAttributeNames(['password' => 'wachtwoord']);

或者我相信您可以在创建验证器实例时将其添加为最终参数。请参阅文档:http://laravel.com/api/5.0/Illuminate/Validation/Validator.html#method___construct

使用请求

如果您使用请求进行验证,则可以覆盖请求中的getValidatorInstance

protected function getValidatorInstance()
{
  $validator = parent::getValidatorInstance();

  $validator->setAttributeNames([
    'password' => 'wachtwoord'
  ]);

  return $validator;
}