3 回答
TA贡献1875条经验 获得超3个赞
模板字符串是一种文字 - 这意味着,它们仅在编译步骤中可用(包括由eval和朋友编译,如另一个答案所示,该答案也警告不要使用它们)。
模板字符串的流式传输是一个 XY 问题。相反,考虑问题本身,您希望通过填充插槽来翻译模板。您可以使用正则表达式来做到这一点,只要您没有在插槽内进行计算(就像使用模板字符串那样)。您还可能希望将局部变量更改为对象属性,以便可以通过名称以编程方式访问它们,而无需eval.
const context = { name: "Tim" };
const textResponse = "Hi ${name}, how are you?";
const greetUserInHisLanguage =
textResponse.replace(/\${(.*?)}/g, (_, name) => context[name]);
console.log(greetUserInHisLanguage);
如果您需要更复杂的东西,请考虑使用现有的模板库,如 Handlebars。
TA贡献2051条经验 获得超10个赞
试试这个,你可以使用eval()
myFunction (language) {
const name = "Tim";
// call to the cms for translation
// returns "Hi ${name}, how are you?";
const textResponse = getTranslation(language);
// How to convert textResponse into a template string and fill in ${name}
// with "Tim"?
const greetUserInHisLanguage =eval('`'+textResponse+'`') // use eval()
return greetUserInHisLanguage;
}
工作小提琴-
function myFunction(language) {
const name = "Tim";
// call to the cms for translation
// returns "Hi ${name}, how are you?";
const textResponse = getTranslation(language);
// How to convert textResponse into a template string and fill in ${name}
// with "Tim"?
const greetUserInHisLanguage = eval('`'+textResponse+'`') // use template literals here
return greetUserInHisLanguage;
}
function getTranslation(language) {
return "Hi ${name}, how are you?"
}
console.log(myFunction("spanish"))
值得注意
不推荐使用 eval(),因为它容易受到注入攻击
添加回答
举报