Bot Framework Composer 1.1.1多语言选择项翻译实现咨询
解决方案:Bot Framework Composer 1.1.1 多语言Yes/No确认实现
嘿,我刚好在Composer 1.x版本里处理过几乎一模一样的多语言确认需求,给你分享下我是怎么搞定的,顺便解决你遇到的函数调用报错问题~
一、先搞懂为什么${AnswerYes()}会报错
你之前尝试的${AnswerYes()}写法是错的——Composer里的翻译文本不是自定义函数,而是存在语言资源文件里的键值对,必须通过${strings.xxx}的格式来引用,直接加括号会被当成函数调用,自然会报“没有 evaluator”的错误。
二、一步步实现多语言确认流程
1. 正确配置多语言资源文件
首先确保你的语言资源已经正确设置:
- 打开Composer的Project Settings > Languages,确认已添加目标语言(比如德语
de-de) - 切换到Content > Language Resources,为每种语言添加对应的键值对:
- 英文(
en-us):QuestionText: "Do you want to continue?" AnswerYes: "Yes" AnswerNo: "No" InvalidInput: "Please enter Yes or No." YesResponse: "Great! Let's keep going." NoResponse: "Okay, we'll stop here." - 德语(
de-de):QuestionText: "Möchten Sie fortfahren?" AnswerYes: "Ja" AnswerNo: "Nein" InvalidInput: "Bitte geben Sie Ja oder Nein ein." YesResponse: "Perfekt! Lass uns weitermachen." NoResponse: "Okay, wir bleiben hier stehen."
- 英文(
2. 用Confirmation对话框实现多语言提问
拖拽一个Ask a question > Confirmation组件到你的流程里,然后做以下配置:
- 在Prompt字段里,引用资源文件的问题文本:
${strings.QuestionText} - 修改Yes Option和No Option,替换默认硬编码文本为资源引用:
- Yes Option:
${strings.AnswerYes} - No Option:
${strings.AnswerNo}
- Yes Option:
- 配置Validation Rules确保用户输入符合当前语言的要求:
- 验证表达式:
contains(join([strings.AnswerYes, strings.AnswerNo], ','), toLower(user.input)) - 错误提示:
${strings.InvalidInput}
- 验证表达式:
3. 根据用户回答分支处理
在Confirmation组件的后续节点,添加If/Else分支:
- 第一个分支的条件:
toLower(turn.lastResult) == toLower(strings.AnswerYes)(用toLower做不区分大小写的判断)- 在该分支里发送消息:
${strings.YesResponse}
- 在该分支里发送消息:
- 第二个分支的条件:
toLower(turn.lastResult) == toLower(strings.AnswerNo)- 发送消息:
${strings.NoResponse}
- 发送消息:
三、额外优化小技巧
- 确保Bot启动时已经正确设置了
user.language字段,Composer会自动根据这个值加载对应的语言资源 - 如果需要支持更灵活的输入(比如用户输入"y"/"n"或者"j"/"n"),可以扩展验证表达式,比如:
contains(join([strings.AnswerYes, strings.AnswerNo, "y", "n"], ','), toLower(user.input))(记得在资源文件里也可以添加缩写的键值对,方便维护)
内容的提问来源于stack exchange,提问作者srudin
相关产品推荐
相关产品推荐

