/ src / Ryujinx.UI.LocaleGenerator / LocaleGenerator.cs
LocaleGenerator.cs
 1  using Microsoft.CodeAnalysis;
 2  using System.Linq;
 3  using System.Text;
 4  
 5  namespace Ryujinx.UI.LocaleGenerator
 6  {
 7      [Generator]
 8      public class LocaleGenerator : IIncrementalGenerator
 9      {
10          public void Initialize(IncrementalGeneratorInitializationContext context)
11          {
12              var englishLocaleFile = context.AdditionalTextsProvider.Where(static x => x.Path.EndsWith("en_US.json"));
13  
14              IncrementalValuesProvider<string> contents = englishLocaleFile.Select((text, cancellationToken) => text.GetText(cancellationToken)!.ToString());
15  
16              context.RegisterSourceOutput(contents, (spc, content) =>
17              {
18                  var lines = content.Split('\n').Where(x => x.Trim().StartsWith("\"")).Select(x => x.Split(':')[0].Trim().Replace("\"", ""));
19                  StringBuilder enumSourceBuilder = new();
20                  enumSourceBuilder.AppendLine("namespace Ryujinx.Ava.Common.Locale;");
21                  enumSourceBuilder.AppendLine("internal enum LocaleKeys");
22                  enumSourceBuilder.AppendLine("{");
23                  foreach (var line in lines)
24                  {
25                      enumSourceBuilder.AppendLine($"    {line},");
26                  }
27                  enumSourceBuilder.AppendLine("}");
28  
29                  spc.AddSource("LocaleKeys", enumSourceBuilder.ToString());
30              });
31          }
32      }
33  }