2017-06-13 5 views
2

ボットフレームワークのデフォルトローカライザを完全に無効にする方法はありますか?ローカライザーは、プロンプトを一貫性のない場所や予想外の場所で翻訳しているようです。また、私のボットは時々、共通のユーザー入力(ヘルプ、終了、戻る、はい、いいえ)を理解できません。なぜなら、それらは異なる言語でそれらを期待しているようです。ボットフレームワークでローカライザを無効にする方法

ローカライゼーション設定を構成していないので、この動作がデフォルトのボットフレームワークのローカリゼーションに起因すると推測しています。私は完全に翻訳を試みることを避け、ボットを英語のみで保つ方法を模索しています。

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

ボットフレームワークが自動的に適切なリソースを選択するために、メッセージからロケールを使用していますが、この情報を上書きすることができます設定することで、あなたのスレッドのCurrentUICultureCurrentCulture、そしてあなたのMessageActivityで理想的にも、あなたのLocale財産

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

言語を切り替えるグローバルな解決策がないため、メッセージを送信するスレッドごとにスレッドを設定することを忘れないでください。

あなたがより深く行きたい場合は、ボットフレームワークのソースに外観を持つことができます。

編集: プロンプトの部分については、私がうまく覚えていれば自分自身を作成し​​なければならなかった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; 
}