You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel数组翻译项执行占位符替换触发strtr类型报错咨询

结论

Laravel 9的__()翻译助手参数替换能力仅支持字符串类型的翻译值,无法直接作用于数组结构的翻译项。

错误触发原因

你调用__('key.b.c', ['num_replace' => ...])时,key.b.c对应的翻译值是嵌套索引数组,并非字符串。Laravel底层处理参数替换逻辑时会调用strtr()函数,该函数要求第一个入参必须为字符串,传入数组就会抛出你看到的strtr() expects parameter 1 to be string, array given报错。

解决方法

先获取完整的数组结构翻译内容,再遍历数组内的字符串项单独完成占位符替换即可,参考实现:

// 先拉取数组结构的翻译内容,此时不传入替换参数
$transList = __('key.b.c');

$replaceValue = $num > 0 ? number_format($totalModelsPositionsCount) : '';
// 遍历数组项,对包含占位符的字符串字段单独替换
$result = array_map(function ($item) use ($replaceValue) {
    $item['text'] = strtr($item['text'], [':num_replace' => $replaceValue]);
    return $item;
}, $transList);

如果你的翻译数组存在更深层级的嵌套,可以写递归遍历逻辑,定位到所有字符串类型的叶子节点后统一做替换,不要直接给数组类型的翻译节点传替换参数调用__()函数。

内容的提问来源于stack exchange,提问作者shorif2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 14:36:27