示例#1
0
        public LocalizeFileEditorPanel(ILocalizeFile file)
        {
            InitializeComponent();

            _file = file;

            LoadFromFile();
        }
示例#2
0
        public ILocalizeFile LoadFileFromData(string data, string extension)
        {
            ILocalizeFile file = null;

            file = _fileLoadFunctions[extension](data);

            if (file == null)
            {
                throw new IOException("ファイルが読み込めませんでした");
            }

            _files.Add(file.CultureInfo, file);

            return(file);
        }
示例#3
0
        public ILocalizeFile LoadFile(string filePath, string extension)
        {
            ILocalizeFile file = null;
            string        data = File.ReadAllText(filePath, Encoding.UTF8);

            file = _fileLoadFunctions[extension](data);

            if (file == null)
            {
                throw new IOException("ファイルが読み込めませんでした");
            }

            _files.Add(file.CultureInfo, file);

            return(file);
        }
示例#4
0
        public static string Generate(CodeGenerateOptions options = null, LocalizationManager manager = null)
        {
            if (options == null)
            {
                options = new CodeGenerateOptions();
            }

            if (manager == null)
            {
                manager = LocalizationManager.Instance;
            }

            if (manager == null)
            {
                throw new InvalidOperationException("LocalizationManagerが初期化されていません。");
            }

            ILocalizeFile file = manager.GetFile();

            var _ = typeof(Microsoft.CodeAnalysis.CSharp.Formatting.CSharpFormattingOptions);

            Workspace         workspace = new AdhocWorkspace();
            SyntaxGenerator   generator = SyntaxGenerator.GetGenerator(workspace, LanguageNames.CSharp);
            List <SyntaxNode> nodes     = new List <SyntaxNode>();

            string[] imports = new[]
            {
                "System"
            }.Concat(options.AdditionalUsing).ToArray();
            foreach (string ns in imports)
            {
                nodes.Add(generator.NamespaceImportDeclaration(ns));
            }

            List <SyntaxNode> memberNodes = new List <SyntaxNode>();

            if (options.GenerateMemberMode == GenerateMemberMode.ExtensionMethod)
            {
                foreach (KeyValuePair <string, ILocalizeContent <object> > pair in file)
                {
                    string varName = $"{(options.UseFirstAtChar ? "@" : string.Empty)}{InvalidKeyReplace(pair.Key)}";
                    if (options.TypeAccessMode == TypeAccessMode.Default)
                    {
                        memberNodes.Add(generator.MethodDeclaration(varName,
                                                                    new[]
                        {
                            SyntaxFactory.Parameter(SyntaxFactory.Identifier("value"))
                            .WithType(GetTypeSyntax(options.ExtensionType))
                            .WithModifiers(SyntaxTokenList.Create(SyntaxFactory.Token(SyntaxKind.ThisKeyword)))
                        },
                                                                    null, GetTypeSyntax(pair.Value.GetType()), Accessibility.Public,
                                                                    DeclarationModifiers.Static,
                                                                    new[]
                        {
                            generator.ReturnStatement(
                                SyntaxFactory.ParseExpression(
                                    $"LocalizationManager.Instance.GetFile()[\"{pair.Key}\"]"))
                        }));
                    }
                    else if (options.TypeAccessMode == TypeAccessMode.QuickAccess)
                    {
                        memberNodes.Add(generator.MethodDeclaration(varName,
                                                                    new[]
                        {
                            SyntaxFactory.Parameter(SyntaxFactory.Identifier("value"))
                            .WithType(GetTypeSyntax(options.ExtensionType))
                            .WithModifiers(SyntaxTokenList.Create(SyntaxFactory.Token(SyntaxKind.ThisKeyword)))
                        },
                                                                    null, GetTypeSyntax(pair.Value.Content.GetType()), Accessibility.Public,
                                                                    DeclarationModifiers.Static,
                                                                    new[]
                        {
                            generator.ReturnStatement(
                                SyntaxFactory.ParseExpression(
                                    $"LocalizationManager.Instance.GetFile()[\"{pair.Key}\"].Content"))
                        }));
                    }
                    else if (options.TypeAccessMode == TypeAccessMode.Dynamic)
                    {
                        memberNodes.Add(generator.MethodDeclaration(varName,
                                                                    new[]
                        {
                            SyntaxFactory.Parameter(SyntaxFactory.Identifier("value"))
                            .WithType(GetTypeSyntax(options.ExtensionType))
                            .WithModifiers(SyntaxTokenList.Create(SyntaxFactory.Token(SyntaxKind.ThisKeyword)))
                        },
                                                                    null, GetTypeSyntax(typeof(ILocalizeContent <object>)), Accessibility.Public,
                                                                    DeclarationModifiers.Static,
                                                                    new[]
                        {
                            generator.ReturnStatement(
                                SyntaxFactory.ParseExpression(
                                    $"LocalizationManager.Instance.GetFile()[\"{pair.Key}\"]"))
                        }));
                    }
                }
            }
            else if (options.GenerateMemberMode == GenerateMemberMode.Property)
            {
                foreach (KeyValuePair <string, ILocalizeContent <object> > pair in file)
                {
                    string varName = $"{(options.UseFirstAtChar ? "@" : string.Empty)}{InvalidKeyReplace(pair.Key)}";
                    if (options.TypeAccessMode == TypeAccessMode.Default)
                    {
                        memberNodes.Add(generator.PropertyDeclaration(varName, GetTypeSyntax(pair.Value.GetType()),
                                                                      Accessibility.Public, DeclarationModifiers.Static.WithIsReadOnly(true),
                                                                      new[]
                        {
                            generator.ReturnStatement(
                                SyntaxFactory.ParseExpression(
                                    $"LocalizationManager.Instance.GetFile()[\"{pair.Key}\"]"))
                        }));
                    }
                    else if (options.TypeAccessMode == TypeAccessMode.QuickAccess)
                    {
                        memberNodes.Add(generator.PropertyDeclaration(varName,
                                                                      GetTypeSyntax(pair.Value.Content.GetType()),
                                                                      Accessibility.Public, DeclarationModifiers.Static.WithIsReadOnly(true),
                                                                      new[]
                        {
                            generator.ReturnStatement(
                                SyntaxFactory.ParseExpression(
                                    $"LocalizationManager.Instance.GetFile()[\"{pair.Key}\"].Content"))
                        }));
                    }
                    else if (options.TypeAccessMode == TypeAccessMode.Dynamic)
                    {
                        memberNodes.Add(generator.PropertyDeclaration(varName,
                                                                      GetTypeSyntax(typeof(ILocalizeContent <object>)),
                                                                      Accessibility.Public, DeclarationModifiers.Static.WithIsReadOnly(true),
                                                                      new[]
                        {
                            generator.ReturnStatement(
                                SyntaxFactory.ParseExpression(
                                    $"LocalizationManager.Instance.GetFile()[\"{pair.Key}\"]"))
                        }));
                    }
                }
            }

            SyntaxNode classNode = generator.ClassDeclaration(options.ClassName, accessibility: Accessibility.Public,
                                                              modifiers: DeclarationModifiers.Static, members: memberNodes);

            SyntaxNode namespaceNode = generator.NamespaceDeclaration(options.Namespace, classNode);

            nodes.Add(namespaceNode);

            return(generator.CompilationUnit(nodes).NormalizeWhitespace().ToFullString());
        }