Exemple #1
0
        public Dictionary <string, string> GetResources(CultureInfo culture)
        {
            string resourceDirectory = I18N.ResourceDirectory;

            return(I18NResource.GetResources(resourceDirectory, culture));
        }
Exemple #2
0
        public async Task WriteAsync()
        {
            if (string.IsNullOrWhiteSpace(this.App.I18NSource))
            {
                this.App.I18NSource = this.App.DirectoryPath.Replace(PathMapper.PathToRootDirectory, string.Empty);
            }

            string pathToResource = Path.Combine(this.App.I18NSource, "i18n").Replace("\\", "/");
            string resourceFile = I18NResource.GetResourceFile(PathMapper.MapPath(pathToResource), string.Empty);

            if (string.IsNullOrWhiteSpace(resourceFile))
            {
                return;
            }

            string className = this.App.I18NClassName.Or("I18N");

            var builder = new StringBuilder();
            builder.Append("using System.Collections.Generic;");
            builder.Append(Environment.NewLine);
            builder.Append("using System.Globalization;");
            builder.Append(Environment.NewLine);
            builder.Append("using Frapid.Configuration;");
            builder.Append(Environment.NewLine);
            builder.Append("using Frapid.i18n;");
            builder.Append(Environment.NewLine);
            builder.Append(Environment.NewLine);
            builder.Append("namespace " + this.App.AssemblyName);
            builder.Append(Environment.NewLine);
            builder.Append("{");
            builder.Append(Environment.NewLine);
            builder.Append(GetILocalizeTemplate(className));
            builder.Append("\tpublic static class "  + className);
            builder.Append(Environment.NewLine);
            builder.Append("\t{");
            builder.Append(Environment.NewLine);
            builder.Append("\t\tpublic static string ResourceDirectory { get; }");
            builder.Append(Environment.NewLine);
            builder.Append(Environment.NewLine);

            builder.Append("\t\tstatic " + className + "()");
            builder.Append(Environment.NewLine);
            builder.Append("\t\t{");
            builder.Append(Environment.NewLine);
            builder.Append($"\t\t\tResourceDirectory = PathMapper.MapPath(\"{pathToResource}\");");
            builder.Append(Environment.NewLine);
            builder.Append("\t\t}");
            builder.Append(Environment.NewLine);
            builder.Append(Environment.NewLine);


            var resources = await ResourceReader.GetResourcesAsync(this.Tenant, this.App, resourceFile).ConfigureAwait(false);
            //Save up-to-date resource on disk

            YamlSerializer.SaveToDisk(resourceFile, resources);
            foreach (var resource in resources)
            {
                builder.Append("\t\t/// <summary>");
                builder.Append(Environment.NewLine);
                builder.Append("\t\t///");
                builder.Append(Regex.Replace(resource.Value, @"\r\n?|\n", string.Empty));
                builder.Append(Environment.NewLine);
                builder.Append("\t\t/// </summary>");
                builder.Append(Environment.NewLine);
                string format = "\t\tpublic static string {0} => I18NResource.GetString(ResourceDirectory, \"{0}\");";
                builder.Append(string.Format(format, resource.Key));
                builder.Append(Environment.NewLine);
                builder.Append(Environment.NewLine);
            }


            builder.Append("\t}");
            builder.Append(Environment.NewLine);
            builder.Append("}");
            builder.Append(Environment.NewLine);


            string target = Path.Combine(this.App.DirectoryPath, className + ".cs");

            if (!string.IsNullOrWhiteSpace(this.App.I18NTarget))
            {
                target = Path.Combine(this.App.DirectoryPath, this.App.I18NTarget, className + ".cs");
            }

            Console.WriteLine($"Writing resource on " + target);
            Console.WriteLine(builder.ToString());
            File.WriteAllText(target, builder.ToString(), Encoding.UTF8);
        }