- fix:
$&,$`,$'and$$inside a nested value ($t(key)) now stay literal.nest()handed the resolved value straight toString.replaceas the replacement argument, so those sequences were read as replacement patterns:$&re-inserted the$t(...)match,$`/$'inserted the text before / after it, and$$collapsed to$. Throught()the$&case was worse than a wrong string: the nested lookup resets the shared nesting regexp, so the re-inserted$t(...)was matched again on every pass andt()never returned — also under the defaultescapeValue: truewhen the value arrives via a variable forwarded through nesting options ($t(key, { "name": "{{name}}" })with a name containing$&). The value is now$-escaped at theString.replacecall, the same guardinterpolate()already has, and a non-string value returned by a formatter in the nesting chain ($t(key, myFormat)) is stringified before that. Nested values are still not HTML-escaped (#854). Thanks @mahirhir (#2447).