package co.phoenixlab.common.localization;

import java.util.Collection;
import java.util.Locale;

public class LocalizerImpl implements Localizer {

    private final Locale locale;

    public LocalizerImpl(Locale locale) {
        this.locale = locale;
    }

    @Override
    public Locale getLocale() {
        return null;
    }

    @Override
    public void addLocaleStringProvider(LocaleStringProvider provider) {

    }

    @Override
    public void removeLocaleStringProvider(LocaleStringProvider provider) {

    }

    @Override
    public Collection<LocaleStringProvider> getLocaleStringProviders() {
        return null;
    }

    @Override
    public void removeAllLocaleStringProviders() {

    }

    @Override
    public boolean containsKey(String key) {
        return false;
    }

    @Override
    public String localize(String key) {
        return null;
    }

    @Override
    public String localize(String key, Object arg0) {
        return null;
    }

    @Override
    public String localize(String key, Object arg0, Object arg1) {
        return null;
    }

    @Override
    public String localize(String key, Object... args) {
        return null;
    }

    @Override
    public String localizeOrDefault(String key, String def) {
        return null;
    }

    @Override
    public String localizeOrDefault(String key, String def, Object arg0) {
        return null;
    }

    @Override
    public String localizeOrDefault(String key, String def, Object arg0, Object arg1) {
        return null;
    }

    @Override
    public String localizeOrDefault(String key, String def, Object... args) {
        return null;
    }
}

@@ -58,43 +58,9 @@
 til.
-Collection;%0Aimport java.util.Locale
+*
 ;%0A%0Ap
@@ -146,79 +146,415 @@
 le;%0A
-%0A    public LocalizerImpl(Locale locale) %7B%0A        this.locale = locale
+    private final LinkedHashSet%3CLocaleStringProvider%3E providers;%0A    private final Collection%3CLocaleStringProvider%3E providersUnmodifiable;%0A%0A    public LocalizerImpl(Locale locale) %7B%0A        Objects.requireNonNull(locale, %22Locale cannot be null%22);%0A        this.locale = locale;%0A        this.providers = new LinkedHashSet%3C%3E();%0A        this.providersUnmodifiable = Collections.unmodifiableCollection(providers)
 ;%0A  
@@ -611,36 +611,38 @@
 %0A        return 
-null
+locale
 ;%0A    %7D%0A%0A    @Ov
@@ -725,106 +725,353 @@
 ) %7B%0A
-%0A    %7D%0A%0A    @Override%0A    public void removeLocaleStringProvider(LocaleStringProvider provider) %7B%0A
+        Objects.requireNonNull(provider, %22Provider cannot be null%22);%0A        provider.setActiveLocale(locale);%0A        providers.add(provider);%0A    %7D%0A%0A    @Override%0A    public void removeLocaleStringProvider(LocaleStringProvider provider) %7B%0A        Objects.requireNonNull(provider, %22Provider cannot be null%22);%0A        providers.remove(provider);
 %0A   
@@ -1168,36 +1168,53 @@
 %0A        return 
-null
+providersUnmodifiable
 ;%0A    %7D%0A%0A    @Ov
@@ -1271,16 +1271,42 @@
 ers() %7B%0A
+        providers.clear();
 %0A    %7D%0A%0A

Implement basic provider-related methods