msgmerge:打印带有美元符号的价格时“无效的控制序列”

msgmerge: `invalid control sequence` when printing a price with a dollar sign

我想打印,例如 $10,其中数字存储在变量中,我还希望能够围绕价格本地化字符串。

这是我的代码:

__("I understand I will be charged ${$cost} for listing this item.");

这会打印:

I understand I will be charged  for listing this item.

如果我不在变量前使用 \$,我会得到以下不带美元符号或成本的内容:

我知道发布此项目需要付费。

好的,没关系。

除了当我 运行 msgmerge 生成用于翻译目的的本地化文件时,它会抱怨:invalid control sequence

似乎不​​喜欢“\$”部分,因为当我删除它时它就通过了。但我不确定如何安抚 msgmerge 并获得正确打印的成本。

恐怕这不是 gettext 的用途。 PHP 源代码中对国际化函数的调用需要具有静态字符串文字。否则,像 msgmerge 这样的辅助工具无法看到文本,因为它们不执行 PHP,它们只是读取源代码。

通常的做法是这样的:

// Print to stdout
printf(_('I understand I will be charged $%s for listing this item.'), $cost);

... 或:

// Save to a variable
$string = sprintf(_('I understand I will be charged $%s for listing this item.'), $cost);