我想要一个支持多种语言的机器人。我知道通过本地化是可能的。但我找不到使用c#的解决方案。 有一篇关于Microsoft Bot框架文档中的本地化的文章。 node.js有一个例子。但我在c#中实现。那么,任何人都可以给我一个想法或任何参考,通过它我可以在c#中实现本地化吗?
答案 0 :(得分:0)
FormFlow Improved Sandwich Bot有一些C#BotFramework本地化文档。可在此处找到:https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-formflow-localize
本地化语言由当前线程确定 CurrentUICulture和CurrentCulture。默认情况下,文化来自 当前消息的语言字段,但如果是,则可以更改 你希望。根据您的机器人,最多可以有3种不同的机器人 本地化信息的来源包括:内置本地化 对于PromptDialog和FormFlow。从中生成的资源文件 在表单中找到的静态字符串。您使用的资源文件 用于动态计算字段,消息或确认的字符串。
此页面还引用了IFormBuilder.SaveResource,rview工具以及Multilingual App Toolkit。这些都有助于简化机器人本地化。
答案 1 :(得分:0)
要完全本地化您的机器人,您需要考虑
中的文本表格流程本地化文档可在https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-formflow-localize找到。
对于提示对话框和普通消息,请为您的默认语言创建一个Resources.resx文件。从那里你可以为其他语言创建另一个resx,例如Resources.fr.resx for french。考虑使用MAT Tool生成Resources.fr.resx。然后将代码更改为指向这些资源文件文本,而不是硬编码文本。看看https://github.com/Microsoft/BotBuilder-Samples/tree/master/CSharp/demo-ContosoFlowers#localization。它的样本正好显示了我提到的内容。
答案 2 :(得分:0)
在您的启动课程中:
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization();
}
在您的机器人课程中:
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
BotResource.CultureInfo = new CultureInfo("en-GB");
//OR
BotResource.CultureInfo = new CultureInfo(turnContext.Activity.Locale);
}