Fat-Free Framework多语言场景下含链接字符串单变量翻译实现方法
完全可以实现,不需要拆分多个翻译变量,有两种成熟的实现方案:
方案一:翻译字符串直接包含HTML标签(最简单)
你可以直接把完整的超链接HTML写在翻译变量里,只需要在模板输出时加上raw过滤器,避免F3默认的HTML转义机制把标签转义成纯文本:
- 翻译文件配置:
// 英文版本 $txt_HelpMeGetTranslated => 'Help me <a href="#">get</a> translated.' // 其他语言版本示例(中文) $txt_HelpMeGetTranslated => '帮我<a href="#">完成</a>翻译'
- 模板调用代码:
{{@txt_HelpMeGetTranslated|raw}}
这个方案适合链接地址固定的场景,操作成本最低。
方案二:占位符替换(适合链接地址动态的场景)
如果你的超链接地址是可变的,不想把链接硬写在翻译文件里,可以在翻译字符串里预留占位符,渲染时再替换成实际的HTML标签:
- 翻译文件配置:
// 英文版本 $txt_HelpMeGetTranslated => 'Help me {link_start}get{link_end} translated.' // 中文版本 $txt_HelpMeGetTranslated => '帮我{link_start}完成{link_end}翻译'
- 控制器中做占位符替换:
// 动态生成链接标签,这里的href可以是任意变量值 $linkStart = '<a href="' . $dynamicUrl . '">'; $linkEnd = '</a>'; // 替换占位符后赋值给模板变量 $f3->set('txt_HelpMeGetTranslated', strtr($f3->get('txt_HelpMeGetTranslated'), [ '{link_start}' => $linkStart, '{link_end}' => $linkEnd ]));
- 模板直接调用即可:
{{@txt_HelpMeGetTranslated|raw}}
注意:如果翻译工作由非技术人员协作完成,需要提前告知占位符的作用,避免误修改导致页面结构异常。
内容的提问来源于stack exchange,提问作者Ayam D Fynest
相关产品推荐
相关产品推荐

