我需要在 Prestashop 中传递一个带有翻译字符串的变量。在后端可以这样做
sprintf($this->l('The number is %1$d'), $number);
但是我需要在使用 SMARTY 时在前端执行此操作?有人可以帮助我吗?
类似这样的:
{l s='The number is %1$d' sprintf=$number}
1 - 在 PrestShop v1.7.4 上,@skiplecariboo 回答
{l s='The number is %1$d' sprintf=$number}
我得到:
可捕获的致命错误:参数 2 传递给 PrestaShopBundle\Translation\TranslatorComponent::trans() 必须是 类型数组,给定的字符串,调用 /vagrant/httpdocs/config/smartyfront.config.inc.php 第 210 行和 定义
2 - 使用官方第3方模块翻译方法
{l s='The number is %1$d' sprintf=$number mod='my_module'}
,我遇到了同样的错误:
可捕获的致命错误:参数 2 传递给 PrestaShopBundle\Translation\TranslatorComponent::trans() 必须是 类型数组,给定的字符串,调用 /vagrant/httpdocs/config/smartyfront.config.inc.php 第 210 行和 定义
3 - 通过官方原生模块翻译方法
{l s='The number is %1$d' sprintf=$number d='Modules.my_module'}
,我得到:
无法翻译“The number is %1$d” 模块:my_module/my_module.tpl。 sprintf() 参数应该是 数组。
所以,我的解决方案是将
$number
变量设置为数组:
{l s='The number is %1$d' sprintf=[$number] mod='my_module'}
注意:
%1$d
标志代表十进制,对于字符串,使用:%1$s
(source)
这是在翻译后的字符串中传递变量的方法
{l s='Comment: # %id%' mod='ayalinecomments' sprintf=['%id%' => $comment.id_ayalinecomments_comment]}
prestashop 将用我的变量 $comment.id_ayalinecomments_comment 替换 %id%
蒂
这个适用于文本字符串:
{l s="Search in %s" sprintf=[$your_var] d="Shop.YourTextDomain"}