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 }