
Laravel 的 __() 辅助函数仅支持对字符串型翻译项进行占位符替换,若传入路径指向数组(如 'key.b.c'),将因 strtr() 接收数组而报错;必须精确指定到含占位符的字符串键(如 'key.b.c.0.text')。
laravel 的 `__()` 辅助函数仅支持对字符串型翻译项进行占位符替换,若传入路径指向数组(如 `'key.b.c'`),将因 `strtr()` 接收数组而报错;必须精确指定到含占位符的字符串键(如 `'key.b.c.0.text'`)。
在 Laravel 本地化系统中,__() 函数(即 trans())的设计初衷是解析并返回单个翻译字符串,并支持通过关联数组替换其中的占位符(如 :num_replace 或 {num_replace})。它不支持直接对嵌套数组路径执行参数替换——因为底层调用 strtr() 时要求第一个参数必须是字符串,而 __('key.b.c') 返回的是一个数组(例如 [['title' => 'Extract ', 'text' => ':num_replace some text']]),从而触发 strtr() expects parameter 1 to be string, array given 错误。
✅ 正确做法是:将翻译路径精确指向最终包含占位符的字符串字段。例如,根据你提供的翻译结构:
// resources/lang/en/messages.php
return [
'key' => [
'b' => [
'c' => [
[
'title' => 'Extract ',
'text' => ':num_replace some text',
],
],
],
],
];
你需要定位到数组中第一个元素的 'text' 字段,路径应为:
PHP中文网提供Laravel 13.2.0版本下载,Laravel框架 是基于 PHP 8.3+ 的高性能框架,官方推荐通过 Composer 安装。它内置 AI SDK、JSON:API Resources 及原生向量搜索,支持属性驱动开发与队列路由,大幅提升开发效率。相比旧版,13.2.0 优化了缓存 TTL 管理与实时通信,无需 Redis 即可横向扩展。作为现代 Web 开发首选,它兼顾安全与极速体验,助您快速构建企业级应用。
$result = __('key.b.c.0.text', [
'num_replace' => $num > 0
? number_format($totalModelsPositionsCount)
: '',
]);
⚠️ 注意事项:
- 数组索引(如 .0)不可省略,Laravel 翻译器不支持通配符或自动展开数组;
- 若需动态遍历多条记录(如渲染多个 c 项),应分别调用 __('key.b.c.'.$i.'.text', [...]) 或在 Blade 中结合 @foreach 处理;
- 占位符语法兼容两种风格::param(旧式)和 {param}(推荐,支持类型提示与更安全的解析),建议统一使用 {num_replace} 并配合 __() 的命名参数(Laravel 9+):
__('key.b.c.0.text', ['num_replace' => $formattedCount]);
// 或(Laravel 9.27+ 支持命名参数)
__('key.b.c.0.text', num_replace: $formattedCount);
? 总结:Laravel 翻译系统本质是“键→字符串”映射,所有参数替换均作用于叶子节点的字符串值。确保翻译路径以字符串结尾(如 .text、.title、.label),而非中间数组节点(如 .c 或 .b),即可避免类型错误并正确启用占位符功能。










