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
相关产品推荐
相关产品推荐

