Example #1
0
        public static void Main(string[] args)
        {
            // Create localizer
            IAssetBuilder       builder   = new AssetBuilder.OneBuildInstance();
            IAsset              asset     = builder.Build();
            StringLocalizerRoot localizer = new StringLocalizerRoot(asset, new CulturePolicy());

            // Install TutorialLibrary's IAssetSources
            Assembly library = typeof(MyClass).Assembly;

            builder.AddLibraryAssetSources(library).Build();

            #region Snippet
            // Install additional localization that was not available in the TutorialLibrary.
            IAssetSource assetSource = XmlLinesReader.Default.FileAssetSource("TutorialLibrary2-fi.xml");
            builder.AddSource(assetSource).Build();
            #endregion Snippet

            // Create class
            ILine <MyClass> classLocalizer = localizer.Type <MyClass>();
            MyClassB        myClass        = new MyClassB(classLocalizer);

            // Use the culture that was provided with the class library (AssetSources)
            CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("de");
            Console.WriteLine(myClass.Do());

            // Use the culture that was supplied above
            CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("fi");
            Console.WriteLine(myClass.Do());
        }
        static LineRoot()
        {
            var _culturePolicy = new CulturePolicy();
            var _builder       = new AssetBuilder.OneBuildInstance();

            builder  = _builder;
            instance = new LineRoot.Mutable(LineAppender.NonResolving, _builder.Asset, _culturePolicy, Localization.StringFormat.StringResolver.Default);
            dynamic  = instance;
        }
Example #3
0
        public static void Main(string[] args)
        {
            // Create localizer
            IAssetBuilder           builder   = new AssetBuilder.OneBuildInstance();
            IAsset                  asset     = builder.Build();
            IStringLocalizerFactory localizer = new StringLocalizerRoot(asset, new CulturePolicy());
            // Install TutorialLibrary's IAssetSources
            Assembly library = typeof(MyClass).Assembly;

            builder.AddLibraryAssetSources(library).Build();
            #region Snippet

            // Create class without localizer
            MyClass myClass1 = new MyClass(default);
Example #4
0
        public static void Main(string[] args)
        {
            #region Snippet
            // Create localizer
            IAssetBuilder       builder   = new AssetBuilder.OneBuildInstance();
            IAsset              asset     = builder.Build();
            StringLocalizerRoot localizer = new StringLocalizerRoot(asset, new CulturePolicy());

            // Install TutorialLibrary's IAssetSources
            Assembly library = typeof(MyClass).Assembly;
            builder.AddLibraryAssetSources(library).Build();

            // Create class
            IStringLocalizer <MyClass> classLocalizer = localizer.Type <MyClass>().AsStringLocalizer <MyClass>();
            MyClass myClass = new MyClass(classLocalizer);

            // Use the culture that was provided with the class library (AssetSources)
            CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("de");
            Console.WriteLine(myClass.Do());
            #endregion Snippet
        }
        /// <summary>
        /// Adds the following Lexical.Localization services:
        ///    <see cref="ILineRoot"/>
        ///    <see cref="ILine{T}"/>
        ///    <see cref="IAssetBuilder"/>
        ///
        /// If <paramref name="addCulturePolicyService"/> is true a <see cref="ICulturePolicy"/> is added,
        /// otherwise <see cref="ICulturePolicy"/> must be added to the service collection.
        ///
        /// Further services are needed:
        ///    <see cref="IAssetSource"/> one or more.
        ///
        /// If <paramref name="addStringLocalizerService"/> is true, the following services are added:
        ///    <see cref="IStringLocalizerFactory"/>
        ///    <see cref="IStringLocalizer{T}"/>
        ///
        /// If <paramref name="useGlobalInstance"/> is true, then uses global <see cref="LineRoot"/>.
        ///
        ///
        /// After this call, the <paramref name="serviceCollection"/> still needs to be populated with
        /// instances of <see cref="IAssetSource"/>, such as:
        ///     <see cref="ResourceStringDictionary"/>
        ///     <see cref="StringAsset"/>
        ///
        /// </summary>
        /// <param name="serviceCollection"></param>
        /// <param name="addStringLocalizerService"></param>
        /// <param name="addCulturePolicyService">Add instance of <see cref="CulturePolicy"/></param>
        /// <param name="useGlobalInstance"></param>
        /// <param name="addCache"></param>
        /// <param name="addLogger">Add adapter for <see cref="ILogger"/></param>
        /// <returns></returns>
        public static IServiceCollection AddLexicalLocalization(
            this IServiceCollection serviceCollection,
            bool addStringLocalizerService = true,
            bool addCulturePolicyService   = true,
            bool useGlobalInstance         = false,
            bool addCache  = false,
            bool addLogger = true
            )
        {
            // ILineRoot
            if (useGlobalInstance)
            {
                // Use StringLocalizerRoot as ILineRoot
                serviceCollection.TryAdd(ServiceDescriptor.Singleton <ILineRoot>(
                                             s =>
                {
                    IAsset asset = s.GetService <IAsset>();    // DO NOT REMOVE
                    ICulturePolicy culturePolicy = s.GetService <ICulturePolicy>();
                    if (culturePolicy != null)
                    {
                        StringLocalizerRoot.Global.CulturePolicy = culturePolicy;
                    }
                    return(StringLocalizerRoot.Global);
                }
                                             ));
            }
            else
            {
                serviceCollection.TryAdd(ServiceDescriptor.Singleton <ILineRoot, StringLocalizerRoot>());
            }

            // ILineFactory
            serviceCollection.TryAdd(ServiceDescriptor.Singleton <ILineFactory>(StringLocalizerAppender.NonResolving));

            // ILineAsset
            serviceCollection.TryAdd(ServiceDescriptor.Singleton <ILineAsset>(s => s.GetService <ILineRoot>() as ILineAsset));

            // ICulturePolicy
            if (addCulturePolicyService)
            {
                if (useGlobalInstance)
                {
                    serviceCollection.TryAdd(ServiceDescriptor.Singleton <ICulturePolicy>(StringLocalizerRoot.Global.CulturePolicy));
                }
                else
                {
                    serviceCollection.TryAdd(ServiceDescriptor.Singleton <ICulturePolicy>(
                                                 s => new CulturePolicy().SetToCurrentThreadCulture()
                                                 ));
                }
            }

            // ILineResolver
            serviceCollection.TryAdd(ServiceDescriptor.Singleton <IStringResolver>(StringResolver.Default));

            // ILogger<ILine>
            if (addLogger)
            {
                serviceCollection.AddLoggerAdapter();
            }

            // IAssetBuilder
            if (useGlobalInstance)
            {
                serviceCollection.TryAdd(ServiceDescriptor.Singleton <IAssetBuilder>(s =>
                {
                    IEnumerable <IAssetSource> assetSources = s.GetServices <IAssetSource>();
                    IAssetBuilder builder = StringLocalizerRoot.Builder;
                    builder.AddSources(assetSources);
                    return(builder);
                }));
            }
            else
            {
                serviceCollection.TryAdd(ServiceDescriptor.Singleton <IAssetBuilder>(s =>
                {
                    // Get IAssetSource services
                    IEnumerable <IAssetSource> assetSources = s.GetServices <IAssetSource>();
                    // Get IEnumerable<ILibraryAssetSources> services
                    IEnumerable <IAssetSources> libraryAssetSourcesLists = s.GetServices <IAssetSources>();
                    // Concatenate
                    if (libraryAssetSourcesLists != null)
                    {
                        foreach (IEnumerable <IAssetSource> assetSources_ in libraryAssetSourcesLists)
                        {
                            assetSources = assetSources == null ? assetSources_ : assetSources.Concat(assetSources_);
                        }
                    }
                    // Take distinct
                    if (assetSources != null)
                    {
                        assetSources = assetSources.Distinct();
                    }
                    // Is it still empty
                    if (assetSources == null)
                    {
                        assetSources = new IAssetSource[0];
                    }
                    // Create builder
                    AssetBuilder.OneBuildInstance builder = new AssetBuilder.OneBuildInstance(assetSources);
                    return(builder);
                }));
            }

            // IAsset
            serviceCollection.TryAdd(ServiceDescriptor.Singleton <IAsset>(s => s.GetService <IAssetBuilder>().Build()));

            // ILine<>
            serviceCollection.TryAdd(ServiceDescriptor.Singleton(typeof(ILine <>), typeof(StringLocalizerType <>)));

            // IStringLocalizer<>
            // IStringLocalizerFactory
            if (addStringLocalizerService)
            {
                // Service request for IStringLocalizer<> instances
                serviceCollection.TryAdd(ServiceDescriptor.Singleton(typeof(IStringLocalizer <>), typeof(StringLocalizerType <>)));
                // Service reqeust for IStringLocalizerFactory
                serviceCollection.TryAdd(ServiceDescriptor.Singleton <IStringLocalizerFactory>(s =>
                {
                    ILineRoot localizationRoot = s.GetService <ILineRoot>();
                    // Use the StringLocalizerKey or StringLocalizerRoot implementation from th service.
                    if (localizationRoot is IStringLocalizerFactory casted)
                    {
                        return(casted);
                    }
                    // Create new root that implements IStringLocalizerFactory and acquires asset and policy with delegate
                    return(new StringLocalizerRoot.LinkedTo(StringLocalizerAppender.NonResolving, localizationRoot));
                }));
            }

            // Add cache
            if (addCache)
            {
                // Add cache
                serviceCollection.AddSingleton <IAssetSource>(new AssetCacheSource(o => o.AddResourceCache().AddStringsCache().AddCulturesCache()));
            }

            return(serviceCollection);
        }