2017-06-13 58 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; 
}