Поддержка многоязычной функции с использованием адаптивных карт в среде Microsoft Bot - PullRequest
0 голосов
/ 22 января 2019

Я тестирую многоязычного бота, загруженного с платформы ботов Microsoft.При этом часть моего контента не переводится.

Ссылка на изображение

Вы можете увидеть следующий код, где я вставил несколько строк, которые спрашивают пользователя, могу ли я чем-нибудь помочь?Это переводится на язык, выбранный пользователем.Но содержимое объекта CardAction () Title 'Yes' и 'No' не переводится.

Как обрабатывать такие переводы в промежуточном программном обеспечении?

bool translate = userLanguage != TranslationSettings.DefaultLanguage;
if (IsLanguageChangeRequested(turnContext.Activity.Text))
{
    await _accessors.LanguagePreference.SetAsync(turnContext, turnContext.Activity.Text);
    var reply = turnContext.Activity.CreateReply($"Your current language code is: {turnContext.Activity.Text}");
    await turnContext.SendActivityAsync(reply, cancellationToken);
    await _accessors.UserState.SaveChangesAsync(turnContext, false, cancellationToken);

    // This content is getting partially translated.
    var newRply = turnContext.Activity.CreateReply("Is there anything else I can help you with?"); 
    newRply.SuggestedActions = new SuggestedActions()
    {
        Actions = new List<CardAction>()
        {
        // The title is not getting translated
        new CardAction() { Title = "Yes", Type = ActionTypes.PostBack, Value = Spanish },
        // The title is not getting translated
        new CardAction() { Title = "No", Type = ActionTypes.PostBack, Value = English },
        },
    };
    await turnContext.SendActivityAsync(newRply);
}
    else
{
    var reply = turnContext.Activity.CreateReply("Choose your language:");
    reply.SuggestedActions = new SuggestedActions()
    {
        Actions = new List<CardAction>()
        {
            new CardAction() { Title = "Español", Type = ActionTypes.PostBack, Value = Spanish },
            new CardAction() { Title = "English", Type = ActionTypes.PostBack, Value = English },
        },
    };

    await turnContext.SendActivityAsync(reply);
    }
}

Ожидается, что строка в CardAction () также должна быть переведена на язык, выбранный пользователем.

1 Ответ

0 голосов
/ 22 января 2019

Я предполагаю, что вы используете класс Microsoft Translator, входящий в комплект Sample. Из того же примера я реализовал новый класс (MultilingualCardAction), унаследовав класс CardAction.

Это работает для меня, но могут быть и лучшие способы.

public class MultilingualCardAction : CardAction
{
private readonly MicrosoftTranslator _translator;

    private string _language;
    public MultilingualCardAction(string language)
    {
        _language = language;
        _translator = new MicrosoftTranslator(<<YOUR TRANSLATION KEY>>);
    }

    public string cardTitle
    {
        get
        {
            return this.Title;
        }

        set
        {
            this.Title = getTranslatedText(value).Result;
        }
    }
    async Task<string> getTranslatedText(string title)
    {
        return await _translator.TranslateAsync(title, _language);
    }
}

Затем я создал объект CardAction таким образом.

var newRply = turnContext.Activity.CreateReply("Is there anything else I can help you with?");
newRply.SuggestedActions = new SuggestedActions()
{
     Actions = new List<CardAction>()
     {
          new MultilingualCardAction('es') { cardTitle = "Yes", Type = ActionTypes.PostBack, Value = "Yes" },
          new MultilingualCardAction('es') { cardTitle = "No, thanks!", Type = ActionTypes.PostBack, Value = "No" },
      },
 };
 await turnContext.SendActivityAsync(newRply);

См. Изображение ниже.

image

...