在Laravel框架中,翻译功能主要通过语言包文件实现,除了常规的长键翻译之外,短键翻译是一种更简洁的管理方式,适合键名简短、不需要复杂层级结构的翻译场景。短键翻译的核心是使用简短的字符串作为键名,直接对应翻译内容,能有效减少代码中的冗余写法。

短键翻译的定义方法
Laravel的短键翻译文件存放在resources/lang目录下,每个语言对应一个文件夹,比如中文简体对应zh_CN文件夹,英文对应en文件夹。短键翻译文件不需要额外的子目录,直接放在语言文件夹根目录下即可,文件名可以自定义,比如messages.php。
短键翻译文件的内容是一个返回键值对数组的PHP文件,键名就是短键,值是对应语言的翻译内容,示例如下:
<?php
// 中文简体短键翻译文件 resources/lang/zh_CN/messages.php
return [
'welcome' => '欢迎来到我们的网站',
'login' => '登录',
'logout' => '退出登录',
'error' => '操作失败,请重试',
];
英文对应的翻译文件resources/lang/en/messages.php内容如下:
<?php
// 英文短键翻译文件 resources/lang/en/messages.php
return [
'welcome' => 'Welcome to our website',
'login' => 'Login',
'logout' => 'Logout',
'error' => 'Operation failed, please try again',
];
短键翻译的调用方法
定义好短键翻译之后,在Laravel的不同场景中可以通过trans函数或者__辅助函数来调用,调用时需要指定翻译文件的文件名和短键,格式为文件名.短键。
在PHP代码中调用
在控制器、服务等PHP代码中,直接使用trans或者__函数即可,示例如下:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class HomeController extends Controller
{
public function index()
{
// 使用__函数调用短键翻译
$welcomeText = __('messages.welcome');
// 使用trans函数调用短键翻译
$loginText = trans('messages.login');
return view('home', compact('welcomeText', 'loginText'));
}
}
在Blade模板中调用
在Blade模板文件中,同样可以使用__函数或者trans函数,也可以直接使用@lang指令来调用短键翻译,示例如下:
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<!-- 使用__函数调用 -->
<h1><?php echo __('messages.welcome'); ?></h1>
<!-- 使用trans函数调用 -->
<p><?php echo trans('messages.login'); ?></p>
<!-- 使用@lang指令调用 -->
@lang('messages.logout')
</body>
</html>
传递替换参数
如果翻译内容中包含动态变量,可以在短键翻译的值中使用:placeholder作为占位符,调用时传递对应的参数数组,示例如下:
首先修改翻译文件,添加带占位符的短键:
<?php
// resources/lang/zh_CN/messages.php
return [
// 之前的短键...
'greeting' => '你好,:name,今天是:date',
];
调用时传递参数:
<?php
// 传递参数调用短键翻译
$greetingText = __('messages.greeting', ['name' => '张三', 'date' => '星期一']);
// 输出:你好,张三,今天是星期一
短键翻译的注意事项
- 短键翻译的键名不能包含
.符号,因为.在Laravel翻译系统中用来分隔文件名和短键,如果键名包含.会导致解析错误。 - 如果项目中同时存在短键翻译和长键翻译(长键通常是类似
auth.login.failed的层级键),短键翻译的优先级更高,只要键名匹配就会优先返回短键翻译的内容。 - 修改翻译文件之后,不需要清除缓存就可以生效,如果需要清除翻译缓存,可以运行
php artisan cache:clear命令。 - 如果调用的短键翻译不存在,Laravel会直接返回键名本身,比如调用
__('messages.unknown'),如果不存在该短键,会返回messages.unknown。
短键翻译与长键翻译的对比
两种翻译方式各有适用场景,以下是二者的核心区别:
| 对比项 | 短键翻译 | 长键翻译 |
|---|---|---|
| 键名格式 | 简短字符串,如welcome | 层级字符串,如auth.login.failed |
| 文件结构 | 翻译文件直接放在语言文件夹根目录 | 翻译文件可以放在子目录中,对应键名的层级 |
| 适用场景 | 键名少、不需要分组的简单翻译场景 | 键名多、需要按模块分组的复杂翻译场景 |
| 调用写法 | 文件名.短键 | 目录.子目录.文件名.键名 |
Laravel短键翻译translation语言包管理localization修改时间:2026-07-01 04:33:42