Бот с двумя языками - PullRequest
1 голос
/ 04 июля 2019

В начале я прошу пользователя выбрать предпочитаемый язык и затем сохранить его в базе данных.В каждом диалоге я переключаю сохраненное значение с помощью if-else.Это большой проект, и я планирую делать это с каждым диалогом.

Мой вопрос: это оптимально или есть лучший способ сделать это?

  private static async Task<DialogTurnResult> FirstStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
    {
        var userstate = await (stepContext.Context.TurnState["BasicAccessors"] as BasicAccessors).BasicUserStateAccessor.GetAsync(stepContext.Context);

        if (userstate.IsLanguageTagalog)
        {
            await stepContext.Context.SendActivityAsync(
                MessageFactory.Text(
                    $"Kumusta {userstate.FirstName}."), cancellationToken);
        }
        else
        {
            await stepContext.Context.SendActivityAsync(
                MessageFactory.Text(
                    $"Hi how are you {userstate.FirstName}."), cancellationToken);
        }

        return await stepContext.EndDialogAsync();
    }

Ответы [ 2 ]

1 голос
/ 04 июля 2019

Вы можете использовать файлы ресурсов в соответствии с предложением xdt, если существует только ограниченное количество строк, для которых требуется многоязычная поддержка, например Hello, Чем я могу вам помочь, Goodbye и т. Д. Это подход, принятый Virtual Assistant Template , и он хорошо работает. Посмотрите, как класс OnBoardingResponses используется для поиска соответствующего ответа с использованием локали, затем легко доступный в вашем коде бота, локаль в настоящее время установлена ​​в коде адаптера но это можно перенести в другое место.

Альтернативой является перевод на лету с использованием промежуточного программного обеспечения и Microsoft Translator. Этот пример многоязычный бот показывает, как можно внедрить промежуточное программное обеспечение, и содержит инструкции по настройке и развертыванию всего.

0 голосов
/ 04 июля 2019

Я не уверен, что это полностью отвечает на ваш вопрос, но я все равно попробую.

Бот запускается в веб-приложении, которое в основном является приложением ASP.NET MVC Web API.Обычной практикой в ​​таких приложениях является изменение языкового стандарта потока запроса в самом начале, например, в событии Request_Start в Global.asax.cs или эквивалентном, на языковой стандарт, запрашиваемый клиентом.Затем вы сохраняете свои строки в файлах ресурсов, названных в соответствии с локалью, таких как Resources.tlPH.resx и Resources.resx, в качестве общего запасного варианта, и извлекаете строку оттуда по ключу.Среда выполнения ASP.NET извлечет строку из нужного файла в зависимости от текущей культуры потоков.

Это направление, в котором вы должны следовать.Вы должны изучить больше о MVC и локализации, чтобы проработать детали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...