コード例 #1
0
 public DatabaseDictionaryService(
     LocalizationConfiguration configuration,
     CultureUoW cultureUoW,
     StaticTextUoW staticTextUoW,
     PluralizedStaticTextUoW pluralizedStaticTextUoW,
     ConstantStaticTextUoW constantStaticTextUoW,
     DictionaryScopeUoW dictionaryScopeUoW,
     ILogger <DatabaseDictionaryService> logger,
     IMemoryCache memoryCache
     ) : base(configuration, cultureUoW, dictionaryScopeUoW, logger, memoryCache)
 {
     m_staticTextUoW           = staticTextUoW;
     m_pluralizedStaticTextUoW = pluralizedStaticTextUoW;
     m_constantStaticTextUoW   = constantStaticTextUoW;
 }
コード例 #2
0
        /// <summary>
        /// Checks if configuration is valid.
        /// </summary>
        /// <param name="configuration">Configuration to check.</param>
        private void CheckConfiguration(LocalizationConfiguration configuration)
        {
            if (!configuration.SupportedCultures.Contains(configuration.DefaultCulture))
            {
                const string defaultCultureErrorMsg       = "Default language in configuration is not in supported languages.";
                var          localizationLibraryException = new LocalizationLibraryException(defaultCultureErrorMsg);

                if (m_logger != null && m_logger.IsErrorEnabled())
                {
                    m_logger.LogError(defaultCultureErrorMsg, localizationLibraryException);
                }

                throw localizationLibraryException;
            }
        }
コード例 #3
0
 public DatabaseTranslateService(
     FallbackCultureResolver fallbackCultureResolver,
     CultureHierarchyUoW cultureHierarchyUoW,
     StaticTextUoW staticTextUoW,
     LocalizationConfiguration configuration,
     CultureUoW cultureUoW,
     DictionaryScopeUoW dictionaryScopeUoW,
     ILogger <DatabaseTranslateService> logger,
     IMemoryCache memoryCache
     ) : base(configuration, cultureUoW, dictionaryScopeUoW, logger, memoryCache)
 {
     m_fallbackCultureResolver = fallbackCultureResolver;
     m_cultureHierarchyUoW     = cultureHierarchyUoW;
     m_staticTextUoW           = staticTextUoW;
 }
コード例 #4
0
        public void AutoLoadDictionariesTest()
        {
            var localizationConfiguration = new LocalizationConfiguration
            {
                BasePath          = "LocalizationTree",
                DefaultCulture    = new CultureInfo("cs"),
                SupportedCultures = new List <CultureInfo>
                {
                    new CultureInfo("en"),
                    new CultureInfo("es"),
                },
                AutoLoadResources = true,
            };

            var dictionaryManager = new FileDictionaryManager(localizationConfiguration, JsonDictionaryFactory.FactoryInstance);
        }
コード例 #5
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(
            IApplicationBuilder app,
            IHostingEnvironment env,
            LocalizationConfiguration localizationConfig)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
                app.UseHttpsRedirection();
            }

            app.UseSwagger();
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "Monero Tutorials V1");
            });

            app.UseSignalR(routes =>
            {
                routes.MapHub <AppStatusHub>("/api/hubs/app-status");
            });

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller}/{action=Index}/{id?}");
            });

            app.MapSpaForLanguages(env, localizationConfig.AvailableLanguages);

            var timers = new AsyncSafeTimer[] {
                app.ApplicationServices.GetRequiredService <AppStatusHubBroadcaster>(),
            };

            foreach (var timer in timers)
            {
                timer.StartTimer();
            }
        }
コード例 #6
0
        public void InitLibTest()
        {
            var localizationConfiguration = new LocalizationConfiguration
            {
                BasePath          = "Localization",
                DefaultCulture    = new CultureInfo("cs"),
                SupportedCultures = new List <CultureInfo>
                {
                    new CultureInfo("en"),
                    new CultureInfo("es"),
                    new CultureInfo("cs"),
                }
            };

            var instance = new LocalizationLib(localizationConfiguration);

            Assert.IsNotNull(instance);
        }
コード例 #7
0
        public void LibInit()
        {
            var configuration = new LocalizationConfiguration
            {
                BasePath          = "Localization",
                DefaultCulture    = new CultureInfo("cs"),
                SupportedCultures = new List <CultureInfo>()
                {
                    new CultureInfo("en"),
                    new CultureInfo("cs"),
                },
                TranslateFallbackMode      = LocTranslateFallbackMode.EmptyString,
                AutoLoadResources          = true,
                FirstAutoTranslateResource = LocLocalizationResource.File
            };

            m_localizationManager = new LocalizationLib(configuration).LocalizationManager;
        }
コード例 #8
0
        public void SetUp()
        {
            var localizationConfiguration = new LocalizationConfiguration
            {
                BasePath          = "Localization",
                DefaultCulture    = new CultureInfo(DefaultCulture),
                SupportedCultures = new List <CultureInfo>
                {
                    new CultureInfo(SupportedCulture),
                    new CultureInfo("es"),
                    new CultureInfo(DefaultCulture),
                },
                FirstAutoTranslateResource = LocLocalizationResource.File,
                AutoLoadResources          = true
            };

            m_dictionaryManager = new LocalizationLib(localizationConfiguration).DictionaryManager;
        }
コード例 #9
0
        public void UndefinedGlobalScopeTest()
        {
            var localizationConfiguration = new LocalizationConfiguration
            {
                BasePath          = "LocalizationTree",
                DefaultCulture    = new CultureInfo("cs"),
                SupportedCultures = new List <CultureInfo>
                {
                    new CultureInfo("de")
                },
                AutoLoadResources = true,
            };

            Assert.ThrowsException <DictionaryLoadException>(
                () => new FileDictionaryManager(localizationConfiguration, JsonDictionaryFactory.FactoryInstance),
                $"Not found 'global' scope in 'de' culture, unable to construct dictionary tree"
                );
        }
コード例 #10
0
        public void CheckScopeResourceFilesTest()
        {
            var configuration = new LocalizationConfiguration
            {
                BasePath          = "Localization",
                DefaultCulture    = new CultureInfo("cs"),
                SupportedCultures = new List <CultureInfo>
                {
                    new CultureInfo("cs"),
                    new CultureInfo("en"),
                    new CultureInfo("es"),
                },
            };


            var folderScanner = new FolderScanner(JsonDictionaryFactory.FactoryInstance);

            folderScanner.CheckResourceFiles(configuration);
        }
コード例 #11
0
        /// <summary>
        /// Configures the specified application.
        /// </summary>
        /// <param name="app">The application.</param>
        /// <param name="env">The env.</param>
        /// <param name="loggerFactory">The logger factory.</param>
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection(DefaultConstants.Logging));
            loggerFactory.AddDebug();
#if RELEASE
            loggerFactory.AddFile(Configuration.GetSection("Logging"));
#endif
            // Localization support
            LocalizationConfiguration.Configure(app);

            app.UseMiddleware <ExceptionHandlerMiddleware>();

            app.UseStaticFiles();

            //Cunfigure the Swagger API documentation
            SwaggerConfiguration.Configure(app);

            app.UseMvc();
        }
コード例 #12
0
        /// <summary>
        /// Initializes Localization library.
        /// </summary>
        /// <param name="configuration">Library configuration</param>
        /// <param name="databaseConfiguration">Configure database storage, e.g. NHibernateDatabaseConfiguration</param>
        /// <param name="loggerFactory">Logger factory for enabling logging</param>
        public LocalizationLib(
            LocalizationConfiguration configuration,
            IDatabaseConfiguration databaseConfiguration = null,
            ILoggerFactory loggerFactory = null
            )
        {
            var services = new ServiceCollection();

            services.AddLocalizationCore(configuration, databaseConfiguration);

            // Logger
            services.AddSingleton(loggerFactory ?? NullLoggerFactory.Instance);
            services.AddSingleton(typeof(ILogger <>), typeof(Logger <>));

            // Init from IoC
            var container = services.BuildServiceProvider();

            m_localizationManager = container.GetRequiredService <IAutoLocalizationManager>();
            m_dictionaryManager   = container.GetRequiredService <IAutoDictionaryManager>();
        }
        public void Undefined_Localization_Source_Should_Be_Humanized()
        {
            // Default configuration
            _localizationConfiguration = new LocalizationConfiguration();

            // Fallback to the same text as It's already in sentence case
            _resourceFileLocalizationSource
            .GetString("Lorem ipsum dolor sit amet", new CultureInfo("en-US"))
            .ShouldBe("Lorem ipsum dolor sit amet");

            // Text in PascalCase should be converted properly
            _resourceFileLocalizationSource
            .GetString("LoremIpsumDolorSitAmet", new CultureInfo("en-US"))
            .ShouldBe("Lorem ipsum dolor sit amet");

            // Text with mixed cases should be converted properly
            _resourceFileLocalizationSource
            .GetString("LoremIpsum dolor sit amet", new CultureInfo("en-US"))
            .ShouldBe("Lorem ipsum dolor sit amet");
        }
コード例 #14
0
        public void PerformanceTest()
        {
            var localizationConfiguration = new LocalizationConfiguration
            {
                BasePath          = "Localization",
                DefaultCulture    = new CultureInfo("cs"),
                SupportedCultures = new List <CultureInfo>
                {
                    new CultureInfo("en"),
                    new CultureInfo("es"),
                    new CultureInfo("hu"),
                    new CultureInfo("zh"),
                    new CultureInfo("cs"),
                },
                TranslateFallbackMode = LocTranslateFallbackMode.Key,
                AutoLoadResources     = true
            };

            var instance = new LocalizationLib(localizationConfiguration);

            var sw = new Stopwatch();

            sw.Start();

            for (var i = 0; i < 1000; i++)
            {
                for (var j = 0; j < 50; j++)
                {
                    var ls   = instance.Translate(LocTranslationSource.File, null, null, "text-2-odst");
                    var lsQQ = instance.Translate(LocTranslationSource.File, null, null, "text-qq-odst");
                    var lsEn = instance.Translate(LocTranslationSource.File, new CultureInfo("en"), null, "text-2-odst");

                    var ls2   = instance.Translate(LocTranslationSource.File, null, null, "text-1-odst");
                    var ls2QQ = instance.Translate(LocTranslationSource.File, null, null, "q");
                    var ls2En = instance.Translate(LocTranslationSource.File, new CultureInfo("en"), null, "text-5-odst");
                }
            }

            sw.Stop();
            Debug.WriteLine("300 000 translations in " + sw.ElapsedMilliseconds + " miliseconds");
        }
コード例 #15
0
        public void Init()
        {
            var localizationConfiguration = new LocalizationConfiguration
            {
                BasePath          = "Localization",
                DefaultCulture    = new CultureInfo("cs"),
                SupportedCultures = new List <CultureInfo>
                {
                    new CultureInfo("en"),
                    new CultureInfo("cs"),
                },
                TranslateFallbackMode = LocTranslateFallbackMode.Key
            };

            m_dictionaryManager = new FileDictionaryManager(localizationConfiguration, JsonDictionaryFactory.FactoryInstance);

            var fallbackCultureResolver = new FallbackCultureResolver(localizationConfiguration);

            m_fileLocalizationManager = new FileLocalizationManager(
                localizationConfiguration, m_dictionaryManager, fallbackCultureResolver
                );
        }
コード例 #16
0
        /// <summary>
        /// Creates dictionary filename by provided directory
        /// </summary>
        /// <param name="libConfiguration"></param>
        /// <param name="directory"></param>
        /// <param name="cultureInfo"></param>
        /// <returns></returns>
        public string ConstructResourceFileName(LocalizationConfiguration libConfiguration, string directory, CultureInfo cultureInfo, string fileExtension)
        {
            var cutString = string.Concat(libConfiguration.BasePath, Path.DirectorySeparatorChar);
            var nameBase  = directory.Split(new[] { cutString }, StringSplitOptions.None);

            if (nameBase.Length != 2)
            {
                var message = string.Format(@"Provided path ""{0}"" is not inside basepath: ""{1}""", directory, libConfiguration.BasePath);
                if (m_logger != null && m_logger.IsErrorEnabled())
                {
                    m_logger.LogError(message);
                }

                throw new DictionaryLoadException(message);
            }

            var dotNotatedFileName = nameBase[1].Replace(Path.DirectorySeparatorChar, '.');

            dotNotatedFileName = string.Concat(dotNotatedFileName, '.', cultureInfo.Name, '.', fileExtension);

            return(Path.Combine(directory, dotNotatedFileName));
        }
コード例 #17
0
        public void ConstructResourceFileName()
        {
            var configuration = new LocalizationConfiguration
            {
                BasePath          = "Localization",
                DefaultCulture    = new CultureInfo("cs"),
                SupportedCultures = new List <CultureInfo>
                {
                    new CultureInfo("cs"),
                    new CultureInfo("en"),
                    new CultureInfo("es"),
                },
            };


            var folderScanner = new FolderScanner(JsonDictionaryFactory.FactoryInstance);
            var fileName      = folderScanner.ConstructResourceFileName(
                configuration, Path.Combine("Localization", "slovniky"), new CultureInfo("cs"), JsonLocalizationDictionary.JsonExtension
                );

            Assert.AreEqual(Path.GetFullPath("Localization/slovniky/slovniky.cs.json"), Path.GetFullPath(fileName));
        }
コード例 #18
0
        public void ScopeAliasSupportTest()
        {
            var localizationConfiguration = new LocalizationConfiguration
            {
                BasePath          = "Localization",
                DefaultCulture    = new CultureInfo("cs"),
                SupportedCultures = new List <CultureInfo>
                {
                    new CultureInfo("en"),
                    new CultureInfo("es")
                },
                AutoLoadResources = true
            };

            var dictionaryManager = new FileDictionaryManager(
                localizationConfiguration, JsonDictionaryFactory.FactoryInstance
                );
            var dictionaryScope  = dictionaryManager.GetLocalizationDictionary(new CultureInfo("cs"), "global");
            var dictionaryAlias1 = dictionaryManager.GetLocalizationDictionary(new CultureInfo("cs"), "personalScope1");
            var dictionaryAlias2 = dictionaryManager.GetLocalizationDictionary(new CultureInfo("cs"), "personalScope2");

            Assert.AreSame(dictionaryScope, dictionaryAlias1);
            Assert.AreSame(dictionaryScope, dictionaryAlias2);
        }
コード例 #19
0
        public void InitTest()
        {
            m_sessionFactory = NHibernateConfigurator.GetSessionFactory(nameof(DatabaseTranslateTest));

            var localizationConfiguration = new LocalizationConfiguration
            {
                BasePath          = "localization",
                DefaultCulture    = new CultureInfo("cs"),
                SupportedCultures = new List <CultureInfo>
                {
                    new CultureInfo("en"),
                    new CultureInfo("cs"),
                    new CultureInfo("es"),
                    new CultureInfo("jp"),
                    new CultureInfo("ru"),
                },
                TranslateFallbackMode = LocTranslateFallbackMode.Key
            };

            m_localizationConfiguration = localizationConfiguration;

            var services = new ServiceCollection();

            services.AddLocalizationCore(localizationConfiguration, new NHibernateDatabaseConfiguration(m_sessionFactory));
            services.AddSingleton <ILoggerFactory>(NullLoggerFactory.Instance);
            services.AddSingleton(typeof(ILogger <>), typeof(Logger <>));

            var container            = services.BuildServiceProvider();
            var dbTranslateService   = container.GetRequiredService <IDatabaseTranslateService>();
            var dbDynamicTextService = container.GetRequiredService <IDatabaseDynamicTextService>();

            m_databaseLocalizationManager =
                new DatabaseLocalizationManager(localizationConfiguration, dbTranslateService, dbDynamicTextService);

            AddTestData(container);
        }
コード例 #20
0
        public void InitTest()
        {
            var localizationConfiguration = new LocalizationConfiguration
            {
                BasePath          = "localization",
                DefaultCulture    = new CultureInfo("cs"),
                SupportedCultures = new List <CultureInfo>
                {
                    new CultureInfo("en"),
                    new CultureInfo("cs"),
                },
                TranslateFallbackMode = LocTranslateFallbackMode.Key
            };

            m_builderOptions = new DbContextOptionsBuilder <StaticTextsContext>()
                               .UseInMemoryDatabase("DatabaseTranslateTest").Options;

            var dbTranslateService   = new DatabaseTranslateService(CreateStaticTextContext, localizationConfiguration);
            var dbDynamicTextService =
                new DatabaseDynamicTextService(CreateStaticTextContext, localizationConfiguration);

            m_databaseLocalizationManager =
                new DatabaseLocalizationManager(localizationConfiguration, dbTranslateService, dbDynamicTextService);
        }
コード例 #21
0
 /**
     * Serialize a LocalizationConfiguration
     * @param _config instance to serialize
     */
 public static string SerializeConfiguration(LocalizationConfiguration _config)
 {
     return Newtonsoft.Json.JsonConvert.SerializeObject(_config);
 }
コード例 #22
0
        public void TreeTest()
        {
            var localizationConfiguration = new LocalizationConfiguration
            {
                BasePath          = "LocalizationTree",
                DefaultCulture    = new CultureInfo("cs"),
                SupportedCultures = new List <CultureInfo>
                {
                    new CultureInfo("en"),
                    new CultureInfo("en-US"),
                    new CultureInfo("en-GB"),
                    new CultureInfo("en-CA"),
                    new CultureInfo("es-MX"),
                    new CultureInfo("es-US"),
                },
                TranslateFallbackMode = LocTranslateFallbackMode.Key,
                AutoLoadResources     = true
            };

            var dictionaryManager = new FileDictionaryManager(
                localizationConfiguration, JsonDictionaryFactory.FactoryInstance
                );

            var fallbackCultureResolver = new FallbackCultureResolver(localizationConfiguration);
            var fileLocalizationManager = new FileLocalizationManager(
                localizationConfiguration, dictionaryManager, fallbackCultureResolver
                );

            var s1 = fileLocalizationManager.Translate("text-1-odst", new CultureInfo("cs"));

            Assert.AreEqual("global cs [text-1-odst]", s1);

            var s2 = fileLocalizationManager.Translate("extra-cs-key", new CultureInfo("en-MX"));

            Assert.AreEqual("extra string in CS culture", s2);

            var s3 = fileLocalizationManager.Translate("extra-cs-key", new CultureInfo("es-MX"));

            Assert.AreEqual("extra string in CS culture", s3);

            const string nopeKey = "nope-key";
            var          sNope   = fileLocalizationManager.Translate(nopeKey, new CultureInfo("es-MX"));

            Assert.AreEqual(nopeKey, sNope);

            localizationConfiguration.TranslateFallbackMode = LocTranslateFallbackMode.EmptyString;

            var sNope2 = fileLocalizationManager.Translate(nopeKey, new CultureInfo("es-MX"));

            Assert.AreEqual("", sNope2);

            localizationConfiguration.TranslateFallbackMode = LocTranslateFallbackMode.Exception;

            var exceptionThrown = false;

            try
            {
                var sNope3 = fileLocalizationManager.Translate(nopeKey, new CultureInfo("es-MX"));
            }
            catch (TranslateException)
            {
                exceptionThrown = true;
            }

            Assert.IsTrue(exceptionThrown);
        }
コード例 #23
0
 public DatabaseDictionaryManager(
     LocalizationConfiguration configuration, IDatabaseDictionaryService dbDictionaryService, ILogger <DatabaseDictionaryManager> logger = null
     ) : base(configuration, logger)
 {
     m_dbDictionaryService = dbDictionaryService;
 }
コード例 #24
0
        /// <summary>
        /// Check for resource files base on folders structure in basePath.
        /// </summary>
        /// <param name="configuration">Library configuration.</param>
        /// <param name="dictionaryFactory"></param>
        /// <returns>List of resource files to load.</returns>
        private IEnumerable <string> CheckResourceFiles(LocalizationConfiguration configuration, IDictionaryFactory dictionaryFactory)
        {
            var fs = new FolderScanner(dictionaryFactory);

            return(fs.CheckResourceFiles(configuration));
        }
コード例 #25
0
        protected override void Load(ContainerBuilder builder)
        {
            MvcAutoMapperConfiguration.Initialize();

            builder.RegisterGeneric(typeof(RequestPreProcessorBehavior <,>))
            .As(typeof(IPipelineBehavior <,>));

            builder.RegisterGeneric(typeof(RequestPostProcessorBehavior <,>))
            .As(typeof(IPipelineBehavior <,>));

            builder.RegisterType <MenuConfigurationContext>()
            .As <IMenuConfigurationContext>()
            .InstancePerRequest();

            builder.RegisterType <PermissionChecker>()
            .As <IPermissionChecker>()
            .InstancePerRequest();

            ILocalizationConfiguration localization = new LocalizationConfiguration();

            localization.Languages.Add(new LanguageInfo("en", "English", icon: "famfamfam-flag-england", isDefault: false));
            localization.Languages.Add(new LanguageInfo("vi-VN", "Tiếng Việt", icon: "famfamfam-flag-vn", isDefault: true));
            DictionaryBasedLocalizationSource localizationSource = new DictionaryBasedLocalizationSource(
                "IdentityServer",
                new JsonFileLocalizationDictionaryProvider(
                    HttpContext.Current.Server.MapPath("~/Localization/JsonSources")));

            localization.Sources.Add(localizationSource);

            builder.Register(c => localizationSource)
            .As <ILocalizationSource>()
            .SingleInstance();

            builder.Register(c => localization)
            .As <ILocalizationConfiguration>()
            .SingleInstance();

            builder.Register(c => new AbpWebLocalizationConfiguration())
            .As <IAbpWebLocalizationConfiguration>()
            .SingleInstance();

            builder.Register(c => new CurrentCultureSetter())
            .As <ICurrentCultureSetter>()
            .SingleInstance();

            builder.RegisterType <DefaultLanguageProvider>()
            .As <ILanguageProvider>()
            .SingleInstance();

            builder.RegisterType <LanguageManager>()
            .As <ILanguageManager>()
            .SingleInstance();

            builder.RegisterModule(new DTWebCommonModule(localization));

            builder.Register(c => new LocalizationManager(c.Resolve <ILanguageManager>(),
                                                          c.Resolve <ILocalizationConfiguration>(), null))
            .As <ILocalizationManager>()
            .OnActivated(e => e.Instance.Initialize())
            .SingleInstance();

            builder.RegisterType <MenuManager>()
            .As <IMenuManager>()
            .InstancePerRequest();

            builder.RegisterControllers(typeof(LocalizationController).Assembly);

            base.Load(builder);
        }
コード例 #26
0
 public AutoDictionaryManager(
     IDictionaryManager fileDictionaryManager, IDictionaryManager databaseDictionaryManager, LocalizationConfiguration configuration,
     ILogger <AutoDictionaryManager> logger = null
     ) : base(configuration, logger)
 {
     m_fileDictionaryManager     = fileDictionaryManager;
     m_databaseDictionaryManager = databaseDictionaryManager;
 }
コード例 #27
0
 protected DatabaseServiceBase(ILogger logger, Func <IDatabaseStaticTextContext> dbContext, LocalizationConfiguration configuration)
 {
     m_logger        = logger;
     m_dbContextFunc = dbContext;
     m_configuration = configuration;
 }
コード例 #28
0
 public DatabaseDictionaryService(Func <IDatabaseStaticTextContext> dbContext, LocalizationConfiguration configuration)
     : base(LogProvider.GetCurrentClassLogger(), dbContext, configuration)
 {
     //Should be empty.
 }
コード例 #29
0
ファイル: FolderScanner.cs プロジェクト: LightCZ/localization
        private IEnumerable <string> CheckGlobalResourceFiles(LocalizationConfiguration libConfiguration)
        {
            IList <string> localizationFiles         = new List <string>();
            var            exceptionLogStringBuilder = new StringBuilder();
            var            shouldThrowException      = false;

            var defaultCulture = libConfiguration.DefaultCulture;

            var defaultCultureResourceFilePath = Path.Combine(libConfiguration.BasePath, defaultCulture.Name);

            defaultCultureResourceFilePath = string.Concat(defaultCultureResourceFilePath, ".",
                                                           m_dictionaryFactory.FileExtension);

            if (File.Exists(defaultCultureResourceFilePath))
            {
                localizationFiles.Add(defaultCultureResourceFilePath);
            }
            else
            {
                var message = string.Format(@"Cannot init library. Dictionary file ""{0}"" is missing.",
                                            defaultCultureResourceFilePath);
                if (m_logger != null && m_logger.IsErrorEnabled())
                {
                    m_logger.LogError(message);
                }

                exceptionLogStringBuilder.AppendLine(message);
                shouldThrowException = true;
            }

            foreach (var supportedCulture in libConfiguration.SupportedCultures)
            {
                var supportedFilePathWithoutExtension =
                    Path.Combine(libConfiguration.BasePath, supportedCulture.Name);
                var supportedcultureFilePath = string.Concat(supportedFilePathWithoutExtension, ".",
                                                             m_dictionaryFactory.FileExtension);
                if (File.Exists(supportedcultureFilePath))
                {
                    localizationFiles.Add(supportedcultureFilePath);
                }
                else
                {
                    var message = string.Format(@"Cannot init library. Dictionary file ""{0}"" is missing.",
                                                supportedcultureFilePath);
                    if (m_logger != null && m_logger.IsErrorEnabled())
                    {
                        m_logger.LogError(message);
                    }

                    exceptionLogStringBuilder.AppendLine(message);
                    shouldThrowException = true;
                }
            }

            if (shouldThrowException)
            {
                throw new DictionaryLoadException(string.Concat("Missing resource file/s.", '\n', exceptionLogStringBuilder.ToString()));
            }

            return(localizationFiles);
        }
コード例 #30
0
ファイル: FolderScanner.cs プロジェクト: LightCZ/localization
 /// <summary>
 /// Check for resource files base on folders structure in basePath.
 /// </summary>
 /// <param name="libConfiguration">Library configuration.</param>
 public IList <string> CheckResourceFiles(LocalizationConfiguration libConfiguration)
 {
     return(CheckScopeResourceFiles(libConfiguration, ScanScopeDirectories(libConfiguration.BasePath))
            .Union(CheckGlobalResourceFiles(libConfiguration)).ToList());
 }
コード例 #31
0
ファイル: FolderScanner.cs プロジェクト: LightCZ/localization
        /// <summary>
        /// Check for resource files in provided folders.
        /// Each folder represents scope. Scopes can be nested "infinitely".
        /// </summary>
        /// <param name="libConfiguration">Library configuration.</param>
        /// <param name="scopeDirectories">Array with all folders inside localization folder</param>
        private IEnumerable <string> CheckScopeResourceFiles(LocalizationConfiguration libConfiguration, string[] scopeDirectories)
        {
            IList <string> localizationFiles = new List <string>();

            var exceptionLogStringBuilder = new StringBuilder();
            var shouldThrowException      = false;

            foreach (var scopeDirectory in scopeDirectories)
            {
                foreach (var supportedCulture in libConfiguration.SupportedCultures)
                {
                    var currentPath = ConstructResourceFileName(libConfiguration, scopeDirectory, supportedCulture);
                    if (File.Exists(currentPath))
                    {
                        localizationFiles.Add(currentPath);
                    }
                    else
                    {
                        var message = string.Format(@"Cannot init library. Dictionary file ""{0}"" is missing.",
                                                    currentPath);
                        if (m_logger != null && m_logger.IsErrorEnabled())
                        {
                            m_logger.LogError(message);
                        }

                        exceptionLogStringBuilder.AppendLine(message);
                        shouldThrowException = true;
                    }
                }

                var defaultPath = ConstructResourceFileName(libConfiguration, scopeDirectory, libConfiguration.DefaultCulture);
                if (File.Exists(defaultPath))
                {
                    localizationFiles.Add(defaultPath);
                }
                else
                {
                    var message = string.Format(@"Cannot init library. Dictionary file ""{0}"" is missing.",
                                                defaultPath);
                    if (m_logger != null && m_logger.IsErrorEnabled())
                    {
                        m_logger.LogError(message);
                    }

                    exceptionLogStringBuilder.AppendLine(message);
                    shouldThrowException = true;
                }
            }

            foreach (var supportedCulture in libConfiguration.SupportedCultures)
            {
                var globalPath = string.Concat(supportedCulture.Name, ".", m_dictionaryFactory.FileExtension);
                globalPath = Path.Combine(libConfiguration.BasePath, globalPath);
                if (File.Exists(globalPath))
                {
                    localizationFiles.Add(globalPath);
                }
                else
                {
                    var message = string.Format(@"Cannot init library. Dictionary file ""{0}"" is missing.", globalPath);
                    if (m_logger != null && m_logger.IsErrorEnabled())
                    {
                        m_logger.LogError(message);
                    }

                    exceptionLogStringBuilder.AppendLine(message);
                    shouldThrowException = true;
                }
            }

            if (shouldThrowException)
            {
                throw new DictionaryLoadException(string.Concat("Missing resource file/s.", '\n', exceptionLogStringBuilder.ToString()));
            }

            return(localizationFiles);
        }