2017-06-13 57 views
2

有没有办法彻底禁用博特框架默认本地化?本地化人员似乎将提示翻译得不一致并出现意想不到的地方。此外,我的机器人有时无法理解普通用户的输入(帮助,退出,回,是,否),因为它似乎期待他们用不同的语言。如何禁用博特框架中的本地化器

我没有配置任何本地化设置,所以我猜这种行为是由默认的Bot Framework本地化造成的。我正在寻找一种方法来完全避免任何翻译和保持我的机器人只使用英语的尝试。

enter image description here

+0

正如这个答案提示:?如何本地化微软机器人应用](https://stackoverflow.com/a/43290741/6741868),这条线应该帮助你'主题.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(“en-US”);'。到目前为止,我还没有找到完全禁用本地化器的方法。 –

回答

2

,看一下有关本地化文档的专用部分:https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-formflow-localize

的BOT框架将自动使用区域设置从消息来选择合适的资源,但是你可以重写此信息通过设置线程的CurrentUICultureCurrentCulture,并在MessageActivity理想也是你Locale财产

CultureInfo lang = ...; 
Thread.CurrentThread.CurrentCulture = lang; 
Thread.CurrentThread.CurrentUICulture = lang; 
context.Activity.AsMessageActivity().Locale = lang.ToString(); 

不要忘记为每个将发送消息的线程设置它,因为没有全局解决方案来切换语言。

如果要深究下去,你可以看看到BOT框架来源:

编辑: 对于提示部分,如果我记得好,我必须创建我自己的public abstract class MyPrompt<T, U> : IDialog<T>和在那一个:

protected virtual IMessageActivity MakePrompt(IDialogContext context, string prompt, IReadOnlyList<U> options = null, IReadOnlyList<string> descriptions = null, string speak = null) 
{ 
    var msg = context.MakeMessage(); 

    // force Culture 
    CultureInfo lang = ...; 
    if (lang != null) 
    { 
     Thread.CurrentThread.CurrentCulture = lang; 
     Thread.CurrentThread.CurrentUICulture = lang; 
     context.Activity.AsMessageActivity().Locale = lang.ToString(); 
    } 

    if (options != null && options.Count > 0) 
    { 
     promptOptions.PromptStyler.Apply(ref msg, prompt, options, descriptions, speak); 
    } 
    else 
    { 
     promptOptions.PromptStyler.Apply(ref msg, prompt, speak); 
    } 
    return msg; 
}