Skip to content

LipatovAlexander/TypesafeLocalization

Repository files navigation

TypesafeLocalization

Usage

LocalizationConfig.json

{
  "baseLocale": "en-US"
}

Translation.en-US.json

{
  "HelloWorld": "Hello world!"
}

Translation.ru-RU.json

{
  "HelloWorld": "Привет мир!"
}
namespace TypesafeLocalization;

public enum Locale
{
    enUS,
    ruRU
}

public interface ILocalizer
{
    string HelloWorld();
}

public sealed class Localizer : ILocalizer
{
    private readonly Locale _locale;
    
    public Localizer(Locale locale)
    {
        _locale = locale;
    }
    
    public string HelloWorld()
    {
        return _locale switch
        {
            Locale.enUS => "Hello world!",
            Locale.ruRU => "Привет мир!",
            _ => throw new InvalidOperationException()
        };
    }
}
    
public interface ILocalizerFactory
{
    ILocalizer CreateLocalizer(Locale locale);
}
    
public sealed class LocalizerFactory : ILocalizerFactory
{
    public ILocalizer CreateLocalizer(Locale locale)
    {
        return new Localizer(locale);
    }
}

About

A source generator for generating fast and typesafe localization

Resources

Stars

Watchers

Forks

Contributors