Laravel Breeze 为开始一个全新的 Laravel 应用程序提供了一个很好的起点,包括登录、注册、密码重置、电子邮件验证和密码确认等基础功能。

Laravel Breeze 默认的验证提示信息、重置密码邮件内容等都是英文的,想要设置成中文的方法也很多,这里我们分享官方推荐的也是最简单的方式-本地化。

首先在 /resources/lang 目录中创建 zh_CN.json 文件,内容如下:

{
    "A fresh verification link has been sent to your email address.": "新的验证链接已发送到您的 E-mail。",
    "All rights reserved.": "版本所有。",
    "Before proceeding, please check your email for a verification link.": "在继续之前请先验证您的 E-mail。",
    "click here to request another": "点击重新发送 E-mail",
    "Confirm Password": "确认密码",
    "E-Mail Address": "E-mail",
    "Error": "错误",
    "Forbidden": "访问被拒绝",
    "Forgot Your Password?": "忘记密码?",
    "Go Home": "回首页",
    "Hello!": "您好:",
    "hi": "嗨",
    "If you did not create an account, no further action is required.": "如果您未注册帐号,请忽略此邮件。",
    "If you did not receive the email": "如果您没有收到",
    "If you did not request a password reset, no further action is required.": "如果您未申请重设密码,请忽略此邮件。",
    "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser: [:actionURL](:actionURL)": "如果您点击「:actionText」按钮时出现问题,请复制下方链接到浏览器中开启: [:actionURL](:actionURL)",
    "Login": "登录",
    "Logout": "注销",
    "Name": "姓名",
    "Oh no": "不好!",
    "Page Expired": "页面会话已超时",
    "Page Not Found": "页面不存在",
    "Password": "密码",
    "Please click the button below to verify your email address.": "请点击下面按钮验证您的 E-mail:",
    "Regards": "致敬",
    "Register": "注册",
    "Remember Me": "记住我",
    "Reset Password": "重设密码",
    "Reset Password Notification": "重设密码通知",
    "Send Password Reset Link": "发送重设密码链接",
    "Service Unavailable": "暂时不提供服务",
    "Sorry, you are forbidden from accessing this page.": "很抱歉,你没有权限访问此页面。",
    "Sorry, the page you are looking for could not be found.": "很抱歉!您浏览的页面不存在。",
    "Sorry, you are making too many requests to our servers.": "很抱歉!您向我们的服务器发出太多请求了。",
    "Sorry, you are not authorized to access this page.": "很抱歉!您没有权限浏览此页面。",
    "Sorry, your session has expired. Please refresh and try again.": "很抱歉!您的 Session 已过期,请刷新后再试一次。",
    "Sorry, we are doing some maintenance. Please check back soon.": "很抱歉!我们正在维护网站,请稍候再回来。",
    "Toggle navigation": "切换导航",
    "Too Many Requests": "太多请求",
    "Unauthorized": "未授权",
    "Verify Email Address": "验证 E-mail",
    "Verify Your Email Address": "验证 E-mail",
    "You are receiving this email because we received a password reset request for your account.": "您收到此电子邮件是因为我们收到了您帐户的密码重设请求。",
    "Whoops!": "哎呦!",
    "Whoops, something went wrong on our servers.": "哎呀,我们的服务器出了问题。",
    "This password reset link will expire in :count minutes.": "此密码重置链接将会在:count分钟内失效。"
}

然后还是在 /resources/lang 目录中创建 zh_CN 目录,在里面创建 auth.php、validation.php、passwords.php 三个文件,具体内容分别如下:

auth.php

<?php

return [
    /*
    |--------------------------------------------------------------------------
    | Authentication Language Lines
    |--------------------------------------------------------------------------
    |
    | The following language lines are used during authentication for various
    | messages that we need to display to the user. You are free to modify
    | these language lines according to your application's requirements.
    |
    */

    'failed'   => '用户名或密码错误。',
    'throttle' => '您的尝试登录次数过多,请 :seconds 秒后再试。',
];

validation.php

<?php

return [
    /*
    |--------------------------------------------------------------------------
    | Validation Language Lines
    |--------------------------------------------------------------------------
    |
    | The following language lines contain the default error messages used by
    | the validator class. Some of these rules have multiple versions such
    | as the size rules. Feel free to tweak each of these messages.
    |
    */

    'accepted'             => '您必须接受 :attribute。',
    'active_url'           => ':attribute 不是一个有效的网址。',
    'after'                => ':attribute 必须要晚于 :date。',
    'after_or_equal'       => ':attribute 必须要等于 :date 或更晚。',
    'alpha'                => ':attribute 只能由字母组成。',
    'alpha_dash'           => ':attribute 只能由字母、数字、短划线(-)和下划线(_)组成。',
    'alpha_num'            => ':attribute 只能由字母和数字组成。',
    'array'                => ':attribute 必须是一个数组。',
    'before'               => ':attribute 必须要早于 :date。',
    'before_or_equal'      => ':attribute 必须要等于 :date 或更早。',
    'between'              => [
        'numeric' => ':attribute 必须介于 :min - :max 之间。',
        'file'    => ':attribute 必须介于 :min - :max KB 之间。',
        'string'  => ':attribute 必须介于 :min - :max 个字符之间。',
        'array'   => ':attribute 必须只有 :min - :max 个单元。',
    ],
    'boolean'              => ':attribute 必须为布尔值。',
    'confirmed'            => ':attribute 两次输入不一致。',
    'date'                 => ':attribute 不是一个有效的日期。',
    'date_equals'          => ':attribute 必须要等于 :date。',
    'date_format'          => ':attribute 的格式必须为 :format。',
    'different'            => ':attribute 和 :other 必须不同。',
    'digits'               => ':attribute 必须是 :digits 位的数字。',
    'digits_between'       => ':attribute 必须是介于 :min 和 :max 位的数字。',
    'dimensions'           => ':attribute 图片尺寸不正确。',
    'distinct'             => ':attribute 已经存在。',
    'email'                => ':attribute 不是一个合法的邮箱。',
    'exists'               => ':attribute 不存在。',
    'file'                 => ':attribute 必须是文件。',
    'filled'               => ':attribute 不能为空。',
    'gt'                   => [
        'numeric' => ':attribute 必须大于 :value。',
        'file'    => ':attribute 必须大于 :value KB。',
        'string'  => ':attribute 必须多于 :value 个字符。',
        'array'   => ':attribute 必须多于 :value 个元素。',
    ],
    'gte'                  => [
        'numeric' => ':attribute 必须大于或等于 :value。',
        'file'    => ':attribute 必须大于或等于 :value KB。',
        'string'  => ':attribute 必须多于或等于 :value 个字符。',
        'array'   => ':attribute 必须多于或等于 :value 个元素。',
    ],
    'image'                => ':attribute 必须是图片。',
    'in'                   => '已选的属性 :attribute 非法。',
    'in_array'             => ':attribute 没有在 :other 中。',
    'integer'              => ':attribute 必须是整数。',
    'ip'                   => ':attribute 必须是有效的 IP 地址。',
    'ipv4'                 => ':attribute 必须是有效的 IPv4 地址。',
    'ipv6'                 => ':attribute 必须是有效的 IPv6 地址。',
    'json'                 => ':attribute 必须是正确的 JSON 格式。',
    'lt'                   => [
        'numeric' => ':attribute 必须小于 :value。',
        'file'    => ':attribute 必须小于 :value KB。',
        'string'  => ':attribute 必须少于 :value 个字符。',
        'array'   => ':attribute 必须少于 :value 个元素。',
    ],
    'lte'                  => [
        'numeric' => ':attribute 必须小于或等于 :value。',
        'file'    => ':attribute 必须小于或等于 :value KB。',
        'string'  => ':attribute 必须少于或等于 :value 个字符。',
        'array'   => ':attribute 必须少于或等于 :value 个元素。',
    ],
    'max'                  => [
        'numeric' => ':attribute 不能大于 :max。',
        'file'    => ':attribute 不能大于 :max KB。',
        'string'  => ':attribute 不能大于 :max 个字符。',
        'array'   => ':attribute 最多只有 :max 个单元。',
    ],
    'mimes'                => ':attribute 必须是一个 :values 类型的文件。',
    'mimetypes'            => ':attribute 必须是一个 :values 类型的文件。',
    'min'                  => [
        'numeric' => ':attribute 必须大于等于 :min。',
        'file'    => ':attribute 大小不能小于 :min KB。',
        'string'  => ':attribute 至少为 :min 个字符。',
        'array'   => ':attribute 至少有 :min 个单元。',
    ],
    'not_in'               => '已选的属性 :attribute 非法。',
    'not_regex'            => ':attribute 的格式错误。',
    'numeric'              => ':attribute 必须是一个数字。',
    'present'              => ':attribute 必须存在。',
    'regex'                => ':attribute 格式不正确。',
    'required'             => ':attribute 不能为空。',
    'required_if'          => '当 :other 为 :value 时 :attribute 不能为空。',
    'required_unless'      => '当 :other 不为 :values 时 :attribute 不能为空。',
    'required_with'        => '当 :values 存在时 :attribute 不能为空。',
    'required_with_all'    => '当 :values 存在时 :attribute 不能为空。',
    'required_without'     => '当 :values 不存在时 :attribute 不能为空。',
    'required_without_all' => '当 :values 都不存在时 :attribute 不能为空。',
    'same'                 => ':attribute 和 :other 必须相同。',
    'size'                 => [
        'numeric' => ':attribute 大小必须为 :size。',
        'file'    => ':attribute 大小必须为 :size KB。',
        'string'  => ':attribute 必须是 :size 个字符。',
        'array'   => ':attribute 必须为 :size 个单元。',
    ],
    'starts_with'          => ':attribute 必须以 :values 为开头。',
    'string'               => ':attribute 必须是一个字符串。',
    'timezone'             => ':attribute 必须是一个合法的时区值。',
    'unique'               => ':attribute 已经存在。',
    'uploaded'             => ':attribute 上传失败。',
    'url'                  => ':attribute 格式不正确。',
    'uuid'                 => ':attribute 必须是有效的 UUID。',

    /*
    |--------------------------------------------------------------------------
    | Custom Validation Language Lines
    |--------------------------------------------------------------------------
    |
    | Here you may specify custom validation messages for attributes using the
    | convention 'attribute.rule' to name the lines. This makes it quick to
    | specify a specific custom language line for a given attribute rule.
    |
    */

    'custom' => [
        'attribute-name' => [
            'rule-name' => 'custom-message',
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Custom Validation Attributes
    |--------------------------------------------------------------------------
    |
    | The following language lines are used to swap attribute place-holders
    | with something more reader friendly such as E-Mail Address instead
    | of 'email'. This simply helps us make messages a little cleaner.
    |
    */

    'attributes' => [
        'name'                  => '名称',
        'username'              => '用户名',
        'email'                 => '邮箱',
        'first_name'            => '名',
        'last_name'             => '姓',
        'password'              => '密码',
        'password_confirmation' => '确认密码',
        'city'                  => '城市',
        'country'               => '国家',
        'address'               => '地址',
        'phone'                 => '电话',
        'mobile'                => '手机',
        'age'                   => '年龄',
        'sex'                   => '性别',
        'gender'                => '性别',
        'day'                   => '天',
        'month'                 => '月',
        'year'                  => '年',
        'hour'                  => '时',
        'minute'                => '分',
        'second'                => '秒',
        'title'                 => '标题',
        'content'               => '内容',
        'description'           => '描述',
        'excerpt'               => '摘要',
        'date'                  => '日期',
        'time'                  => '时间',
        'available'             => '可用的',
        'size'                  => '大小',
    ],
];

passwords.php

<?php

return [
    /*
    |--------------------------------------------------------------------------
    | Password Reminder Language Lines
    |--------------------------------------------------------------------------
    |
    | The following language lines are the default lines which match reasons
    | that are given by the password broker for a password update attempt
    | has failed, such as for an invalid token or invalid new password.
    |
    */

    'password' => '密码至少是六位字符并且应与确认密码匹配。',
    'reset'    => '密码重置成功,请使用新密码登录!',
    'sent'     => '密码重置邮件已发送!',
    'token'    => '密码重置令牌无效。',
    'user'     => '找不到该邮箱对应的用户(不存在该邮箱)。',
];

注意名字不能更改,必须根据 ISO 15897 命名语言文件及目录。

刷新后 Laravel Breeze 已经设置为中文,其中的表单验证提示信息、邮箱确认及密码重置等邮件内容都显示为中文了。

(adsbygoogle = window.adsbygoogle || []).push({});