我想使用Bot Framework V4使用C#构建一个支持多种语言的机器人。我想使用.resx转换字符串,但是找不到任何解决方案。我试图将解决方案用于Aspnet Core MVC 2,但它不起作用。 那么,有谁能给我一个想法或任何参考资料,使我能够在Bot Framework V4中实现字符串本地化?
答案 0 :(得分:1)
在此处查看有关Localizationconfig的一些帮助:https://github.com/Microsoft/BotBuilder/issues/3799
答案 1 :(得分:0)
.NET Core通过使用资源(.resx
)文件提供多语言支持。
基于this PR,您可能需要执行以下操作:
在您的项目中,创建一个名称为“ Resources”的文件夹,然后添加一个 resource 文件。该文件将是您的默认语言。
确保此文件以.resx
结尾,并且将PublicResXFileCodeGenerator
用作自定义工具。
现在,添加另一个具有相同名称的资源文件,但在.{language ISO}
之前添加.resx
:
(文件BotStrings.Designer.cs
由PublicResXFileCodeGenerator
自动生成)
有关更多信息,read this。
要更改.NET Core中应用程序的语言,您需要更新System.Globalization.CultureInfo.CurrentCulture
和System.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"));
});