Microsoft bot框架v4中的字符串本地化

时间:2018-09-29 16:42:12

标签: c# botframework

我想使用Bot Framework V4使用C#构建一个支持多种语言的机器人。我想使用.resx转换字符串,但是找不到任何解决方案。我试图将解决方案用于Aspnet Core MVC 2,但它不起作用。 那么,有谁能给我一个想法或任何参考资料,使我能够在Bot Framework V4中实现字符串本地化?

2 个答案:

答案 0 :(得分:1)

在此处查看有关Localizationconfig的一些帮助:https://github.com/Microsoft/BotBuilder/issues/3799

答案 1 :(得分:0)

.NET Core通过使用资源(.resx)文件提供多语言支持。

基于this PR,您可能需要执行以下操作:

创建资源文件

在您的项目中,创建一个名称为“ Resources”的文件夹,然后添加一个 resource 文件。该文件将是您的默认语言。

确保此文件以.resx结尾,并且将PublicResXFileCodeGenerator用作自定义工具

enter image description here

现在,添加另一个具有相同名称的资源文件,但在.{language ISO}之前添加.resx

enter image description here

(文件BotStrings.Designer.csPublicResXFileCodeGenerator自动生成)

有关更多信息,read this

控制语言

要更改.NET Core中应用程序的语言,您需要更新System.Globalization.CultureInfo.CurrentCultureSystem.Globalization.CultureInfo.CurrentUICulture对象。

在我提到的PR中,展示了如何通过添加中间件来做到这一点:

class SetLocaleMiddleware : Microsoft.Bot.Builder.IMiddleware
{
    private readonly string defaultLocale;

    public SetLocaleMiddleware(string defaultDefaultLocale)
    {
        defaultLocale = defaultDefaultLocale;
    }

    public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next,
        CancellationToken cancellationToken = new CancellationToken())
    {
        var cultureInfo = string.IsNullOrEmpty(turnContext.Activity.Locale) ? new CultureInfo(defaultLocale) : new CultureInfo(turnContext.Activity.Locale);
        CultureInfo.CurrentUICulture = CultureInfo.CurrentCulture = cultureInfo;

        await next(cancellationToken).ConfigureAwait(false);
    }
}

在启动时:

services.AddBot<MyBot>(options =>
{
    .
    .
    .
    options.Middleware.Add(new SetLocaleMiddleware("he-il"));
});