Javascript 如何为cms使用模板文本?
我想用我的“迷你cms”用他们自己的语言问候用户。所有字符串都存储为“文本”-不可能添加反勾号 因此,我必须: 第一。将我的cms字符串转换为模板字符串Javascript 如何为cms使用模板文本?,javascript,node.js,Javascript,Node.js,我想用我的“迷你cms”用他们自己的语言问候用户。所有字符串都存储为“文本”-不可能添加反勾号 因此,我必须: 第一。将我的cms字符串转换为模板字符串(“text${value}”=>text${value}) 第二。将值添加到此模板字符串中 我怎样才能做到这一点 myFunction (language) { const name = "Tim"; // call to the cms for translation // returns "Hi ${name},
(“text${value}”=>text${value})
第二。将值添加到此模板字符串中
我怎样才能做到这一点
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;
}
试试这个,你可以用
工作小提琴-
函数myFunction(语言){
const name=“Tim”;
//致电cms进行翻译
//返回“你好${name},你好吗?”;
const textResponse=getTranslation(语言);
//如何将textResponse转换为模板字符串并填写${name}
//和“蒂姆”在一起?
const greetUserInHisLanguage=eval('`+textResponse+'`')//在此处使用模板文本
返回希腊语;
}
函数getTranslation(语言){
return“你好${name},你好吗?”
}
log(myFunction(“西班牙语”))
试试这个,你可以用
工作小提琴-
函数myFunction(语言){
const name=“Tim”;
//致电cms进行翻译
//返回“你好${name},你好吗?”;
const textResponse=getTranslation(语言);
//如何将textResponse转换为模板字符串并填写${name}
//和“蒂姆”在一起?
const greetUserInHisLanguage=eval('`+textResponse+'`')//在此处使用模板文本
返回希腊语;
}
函数getTranslation(语言){
return“你好${name},你好吗?”
}
console.log(myFunction(“西班牙语”)
模板字符串是一种文字-这意味着它们只能在编译步骤中使用(包括由eval
和friends编译,如另一个答案所示,这也警告不要使用它们)
模板字符串的流是一个XY问题。相反,考虑问题本身,您希望通过填充槽来转换模板。您可以使用正则表达式来实现这一点,只要插槽中没有计算(就像使用模板字符串一样)。您还需要将局部变量更改为对象属性,以便通过名称以编程方式访问它们,而无需eval
const context={name:“Tim”};
const textResponse=“你好${name},你好吗?”;
希腊语常量=
textResponse.replace(/\${(.*)}/g,(\ux,name)=>context[name]);
console.log(希腊语)代码>模板字符串是一种文字-这意味着它们仅在编译步骤可用(包括由eval
和friends编译,如另一个答案所示,这也警告不要使用它们)
模板字符串的流是一个XY问题。相反,考虑问题本身,您希望通过填充槽来转换模板。您可以使用正则表达式来实现这一点,只要插槽中没有计算(就像使用模板字符串一样)。您还需要将局部变量更改为对象属性,以便通过名称以编程方式访问它们,而无需eval
const context={name:“Tim”};
const textResponse=“你好${name},你好吗?”;
希腊语常量=
textResponse.replace(/\${(.*)}/g,(\ux,name)=>context[name]);
console.log(希腊语)
在这种方法中,我将变量引用保存到对象中,而不是它们自己的var
或let/const
等
这样,您可以使用方括号
符号,通过通过Regex获取的字符串键
访问变量
通过匹配原始字符串(来自CMS)中的所有${key\u name}
实例,我们可以循环遍历它们,并在迭代实例时逐步替换字符串的每个部分
const详细信息={
姓名:'弗兰克',
年龄:27
}
const replacer=(intpl='')=>{
常量key=intpl.match(/[A-z]+//gm)[0]
if(!(输入详细信息))console.warn(${intpl}中的'key${key}未在详细信息对象`)中找到)
返回详细信息[键]| | intpl
}
常量插值=字符串=>{
const matches=string.match(/\${([A-z]*)}/gm)
返回匹配项。减少((上一个,当前)=>{
返回上一个替换(当前,替换)
},字符串)
}
const replaced=interpolate(“你好${name},你好吗?你是${age},失败${foo}”)
log(已替换)
在这种方法中,我将变量引用保存到对象中,而不是它们自己的var
或let/const
等
这样,您可以使用方括号
符号,通过通过Regex获取的字符串键
访问变量
通过匹配原始字符串(来自CMS)中的所有${key\u name}
实例,我们可以循环遍历它们,并在迭代实例时逐步替换字符串的每个部分
const详细信息={
姓名:'弗兰克',
年龄:27
}
const replacer=(intpl='')=>{
常量key=intpl.match(/[A-z]+//gm)[0]
if(!(输入详细信息))console.warn(${intpl}中的'key${key}未在详细信息对象`)中找到)
返回详细信息[键]| | intpl
}
常量插值=字符串=>{
const matches=string.match(/\${([A-z]*)}/gm)
返回匹配项。减少((上一个,当前)=>{
返回上一个替换(当前,替换)
},字符串)
}
const replaced=interpolate(“你好${name},你好吗?你是${age},失败${foo}”)
console.log(已替换)
您需要的是模板引擎,而不是模板文本。您需要的是模板引擎,而不是模板文本。
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;
}