LocaleGenerator.cs 1.3 KB

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