かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Bot Frameworkでenumの選択肢を日本語にしたい

デフォルト英語フレンドりーなのでEnumの選択肢はEnumの値がそのまま出てきます。

Formを定義するときに以下のようにFieldReflectorを使うと、日本語で表示させることができます。

return new FormBuilder<Order>()
    .Message("注文をお伺いします")
    .Field(new FieldReflector<Order>(nameof(Order.Drink))
        .SetDefine((state, field) =>
        {
            field.AddDescription(Size.S, "Sサイズ");
            field.AddDescription(Size.M, "Mサイズ");
            field.AddDescription(Size.L, "Lサイズ");
            return Task.FromResult(true);
        }))
    .Build();

OrderSizeの定義は以下のような感じ。

using Microsoft.Bot.Builder.FormFlow;
using System;

namespace FormDialogSample.Models
{
    public enum Size
    {
        S = 1, M, L
    }

    [Serializable]
    public class Order
    {
        [Prompt("飲み物のサイズは何にしますか?{||}")]
        public Size Drink { get; set; }
    }
}