コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        /// <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);
            }
        }
コード例 #5
0
        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"));
        }
コード例 #6
0
        /// <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);
            }
        }
コード例 #7
0
        /// <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);
            }
        }
コード例 #8
0
        /// <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);
        }
コード例 #9
0
        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);
        }