public async Task TestMultiLangImport() { var languageGeneratorManager = new LanguageGeneratorManager(resourceExplorer); var generator = languageGeneratorManager.LanguageGenerators["import.lg"]; var result = await generator.Generate(GetTurnContext(string.Empty), "[test3]", null); Assert.AreEqual("default3", result); result = await generator.Generate(GetTurnContext(locale : "en-us"), "[test3]", null); Assert.AreEqual("default3-en", result); result = await generator.Generate(GetTurnContext(locale : "fr"), "[test3]", null); Assert.AreEqual("default3-fr", result); result = await generator.Generate(GetTurnContext(locale : "foo"), "[test3]", null); Assert.AreEqual("default3", result); result = await generator.Generate(GetTurnContext(locale : "zh-cn"), "[test3]", null); Assert.AreEqual("default3-cn", result); }
public async Task TestMultiLangImport() { var languageGeneratorManager = new LanguageGeneratorManager(resourceExplorer); var generator = languageGeneratorManager.LanguageGenerators["common.lg"]; var templateContent = "@{templateb()}"; var result = await generator.Generate(GetTurnContext(string.Empty), templateContent, null); Assert.AreEqual("from b.lg", result); // fallback to default result = await generator.Generate(GetTurnContext(locale : "foo"), templateContent, null); Assert.AreEqual("from b.lg", result); result = await generator.Generate(GetTurnContext(locale : "en-us"), templateContent, null); Assert.AreEqual("from b.en-us.lg", result); // fallback to en result = await generator.Generate(GetTurnContext(locale : "en-gb"), templateContent, null); Assert.AreEqual("from b.en.lg", result); result = await generator.Generate(GetTurnContext(locale : "en"), templateContent, null); Assert.AreEqual("from b.en.lg", result); }
public async Task TestImport() { var languageGeneratorManager = new LanguageGeneratorManager(resourceExplorer); var generator = languageGeneratorManager.LanguageGenerators["import.lg"]; var result = await generator.Generate(GetTurnContext(string.Empty), "[test2]", null); Assert.AreEqual("default2", result); }
/// <summary> /// Register ILanguageGenerator as default langugage generator. /// </summary> /// <param name="botAdapter">botAdapter to add services to.</param> /// <param name="resourceExplorer">resourceExporer to provide to LanguageGenerator.</param> /// <param name="languageGenerator">LanguageGenerator to use.</param> /// <returns>botAdapter.</returns> public static BotAdapter UseLanguageGeneration(this BotAdapter botAdapter, ResourceExplorer resourceExplorer, ILanguageGenerator languageGenerator) { DeclarativeTypeLoader.AddComponent(new LanguageGenerationComponentRegistration()); lock (languageGeneratorManagers) { if (!languageGeneratorManagers.TryGetValue(resourceExplorer ?? throw new ArgumentNullException(nameof(resourceExplorer)), out var lgm)) { lgm = new LanguageGeneratorManager(resourceExplorer); languageGeneratorManagers[resourceExplorer] = lgm; } botAdapter.Use(new RegisterClassMiddleware <LanguageGeneratorManager>(lgm)); botAdapter.Use(new RegisterClassMiddleware <ILanguageGenerator>(languageGenerator ?? throw new ArgumentNullException(nameof(languageGenerator)))); return(botAdapter); } }
public async Task TestMultiLangImport() { var languageGeneratorManager = new LanguageGeneratorManager(resourceExplorer); var generator = languageGeneratorManager.LanguageGenerators["common.lg"]; var templateContent = "@{templateb()}"; var result = await generator.Generate(GetTurnContext(string.Empty), templateContent, null); Assert.AreEqual("from b.lg", result); // fallback to default result = await generator.Generate(GetTurnContext(locale : "foo"), templateContent, null); Assert.AreEqual("from b.lg", result); result = await generator.Generate(GetTurnContext(locale : "en-us"), templateContent, null); Assert.AreEqual("from b.en-us.lg", result); result = await generator.Generate(GetTurnContext(locale : "en-us"), "@{templatec()}", null); Assert.AreEqual("from c.en.lg", result); // fallback to en result = await generator.Generate(GetTurnContext(locale : "en-gb"), templateContent, null); Assert.AreEqual("from b.en.lg", result); result = await generator.Generate(GetTurnContext(locale : "en"), templateContent, null); Assert.AreEqual("from b.en.lg", result); var ex = Assert.ThrowsException <AggregateException>(() => generator.Generate(GetTurnContext(locale: "en"), "@{templatec()}", null).Wait()); Assert.IsTrue(ex.Message.Contains("templatec does not have an evaluator")); templateContent = "@{templateben()}"; // imported will not fallback when not found ex = Assert.ThrowsException <AggregateException>(() => generator.Generate(GetTurnContext(locale: "en-us"), templateContent, null).Wait()); Assert.IsTrue(ex.Message.Contains("templateben does not have an evaluator")); templateContent = "@{templateben-us()}"; ex = Assert.ThrowsException <AggregateException>(() => generator.Generate(GetTurnContext(locale: "en"), templateContent, null).Wait()); Assert.IsTrue(ex.Message.Contains("templateben-us does not have an evaluator")); }
/// <summary> /// Register ILanguageGenerator as default langugage generator. /// </summary> /// <param name="dialogManager">botAdapter to add services to.</param> /// <param name="languageGenerator">LanguageGenerator to use.</param> /// <returns>botAdapter.</returns> public static DialogManager UseLanguageGeneration(this DialogManager dialogManager, ILanguageGenerator languageGenerator) { var resourceExplorer = dialogManager.TurnState.Get <ResourceExplorer>(); lock (languageGeneratorManagers) { if (!languageGeneratorManagers.TryGetValue(resourceExplorer ?? throw new ArgumentNullException(nameof(resourceExplorer)), out var lgm)) { lgm = new LanguageGeneratorManager(resourceExplorer); languageGeneratorManagers[resourceExplorer] = lgm; } dialogManager.TurnState.Add <LanguageGeneratorManager>(lgm); dialogManager.TurnState.Add <ILanguageGenerator>(languageGenerator ?? throw new ArgumentNullException(nameof(languageGenerator))); return(dialogManager); } }
/// <summary> /// Register ILanguageGenerator as default langugage generator. /// </summary> /// <param name="dialogManager">botAdapter to add services to.</param> /// <param name="languageGenerator">LanguageGenerator to use.</param> /// <returns>botAdapter.</returns> public static DialogManager UseLanguageGeneration(this DialogManager dialogManager, LanguageGenerator languageGenerator) { var resourceExplorer = dialogManager.InitialTurnState.Get <ResourceExplorer>(); lock (languageGeneratorManagers) { if (!languageGeneratorManagers.TryGetValue(resourceExplorer ?? throw new InvalidOperationException($"Unable to get an instance of {nameof(resourceExplorer)}."), out var lgm)) { lgm = new LanguageGeneratorManager(resourceExplorer); languageGeneratorManagers[resourceExplorer] = lgm; } dialogManager.InitialTurnState.Add <LanguageGeneratorManager>(lgm); dialogManager.InitialTurnState.Add <LanguageGenerator>(languageGenerator ?? throw new ArgumentNullException(nameof(languageGenerator))); return(dialogManager); } }
/// <summary> /// Register default LG file as language generation. /// </summary> /// <param name="botAdapter">The <see cref="BotAdapter"/> to add services to.</param> /// <param name="resourceExplorer">resource explorer to use for .lg based resources.</param> /// <param name="defaultLg">Default LG Resource Id (default: main.lg).</param> /// <returns>The BotAdapter.</returns> public static BotAdapter UseLanguageGeneration( this BotAdapter botAdapter, ResourceExplorer resourceExplorer = null, string defaultLg = null) { if (defaultLg == null) { defaultLg = "main.lg"; } if (resourceExplorer == null) { resourceExplorer = new ResourceExplorer(); } if (resourceExplorer.TryGetResource(defaultLg, out var resource)) { botAdapter.UseLanguageGeneration(resourceExplorer, new ResourceMultiLanguageGenerator(defaultLg)); } else { botAdapter.UseLanguageGeneration(resourceExplorer, new TemplateEngineLanguageGenerator(string.Empty, defaultLg, LanguageGeneratorManager.MultiLanguageResolverDelegate(resourceExplorer))); } return(botAdapter); }
private async Task <ITurnContext> GetTurnContext(string lgFile) { var context = new TurnContext(new TestAdapter(), new Activity()); var lgText = await resourceExplorer.GetResource(lgFile).ReadTextAsync(); context.TurnState.Add <ILanguageGenerator>(new TemplateEngineLanguageGenerator(lgText, "test", LanguageGeneratorManager.ResourceResolver(resourceExplorer))); return(context); }