/ResxConverter

:star: Tool to convert from resx to any format.

Primary LanguageC#MIT LicenseMIT

Build status

ResxConverter

ResxConverter is a tool that helps convert resx files to any format.

ResxConverter is shipped into three main packages.

  • Core - includes all the resx parsing code and allows extending the conversion to any format.
  • CLI - allows its use from the command-line.
  • Mobile - Android and iOS custom parsers.

Both the Cake.ResxConverter and CLI packages include all the available converters, namely support for conversion to iOS and Android resource files.

ResxConverter.Core ResxConverter.CLI ResxConverter.Mobile
NuGet NuGet NuGet

Usage from command-line

ResxConverter can be used from the command line via the ResxConverter.CLI package.

Install-Package ResxConverter.CLI

On the command line, converters can be invoked as follows:

ResxConverter.CLI android ./resources ./generated

For complete usage information invoke the CLI without any arguments.

How to extend the Core

ResxConverter core interfaces are defined in the ResxConverter.Core package.

Install-Package ResxConverter.Core

The library can be extended by defining new types of outputs. To that end, a new IResxConverterOutput should be defined.

public class CustomResxOutput : IResxConverterOutput
{
    public void Dispose() { ... }

    public void WriteComment(string comment) { ... }

    public void WriteString(ResxString stringElement) { ... }
}

Note that outputs must implement IDisposable and they will be disposed after all content is written.

ResxConverter aggregates content by culture. This means that a new IResxConverterOutput is requested for each culture being processed from the source resx files. Outputs are created via the IResxConverterOutputFactory interface.

public interface IResxConverterOutputFactory
{
    IResxConverterOutput Create(string culture, string outputFolder);
}

You can define a custom factory or reuse the built in ResxConverterOutputFactory that accepts a lambda. Finally, you use the factory to create an instance of ResxConverter.

var converter = new ResxConverter(new ResxConverterOutputFactory((culture, outputFolder) => new CustomResxOutput(outputFolder, culture)));

License

MIT Licence