如何为cms使用模板文字?

我想用我的“mini-cms”用他们自己的语言来问候用户。所有字符串都存储为“文本” - 不可能添加反引号。


因此我必须: 1st。将我的 cms 字符串转换为模板字符串("text ${value}" => text ${value}) 2nd。将值添加到此模板字符串中


我怎样才能做到这一点?


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 = ???? 


   return greetUserInHisLanguage;

}


catspeake
浏览 119回答 3
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。

侃侃无极

试试这个,你可以使用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(),因为它容易受到注入攻击
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript