[Serializable]
public class Culture
{
public string Name {get; set;}
internal Dictionary<string, string> keys {get; set; }
public Culture(string name)
{
this.Name = name;
this.keys = new Dictionary<string,string>();
}
public string getValue(string key)
{
return keys[key];// TODO: check null references
}
public void addKey(string key, string value)
{
keys.Add(key, value); // Check if it already existed
}
public string getKey(string value)
{
return keys.Where(p => p.Value == value).First().Key; // Change, could not be found
}
}
public abstract class TranslatorBase
{
protected abstract List<Culture> Cultures {get; }
public void addKey(string key, Dictionary<string, string> values)
{
foreach(Culture culture in this.Cultures)
{
culture.addKey(key, values[culture.Name]);
}
}
public string TranslateKey(string key, string destinationCulture)
{
Culture destination = this.Cultures.Where(p => p.Name == destinationCulture).First();
return destination.getValue(key);
}
public string TranslateValue(string value, string sourceCulture, string destinationCulture)
{
Culture source = this.Cultures.Where(p => p.Name == sourceCulture).First();
Culture destination = this.Cultures.Where(p => p.Name == destinationCulture).First();
string key = source.getKey(value);
return destination.getValue(key);
}
}
public class TranslatorExample : TranslatorBase
{
private static List<Culture> _Cultures;
protected override List<Culture> Cultures
{
get
{
if(TranslatorExample._Cultures == null)
{
TranslatorExample._Cultures = new List<Culture>();
TranslatorExample._Cultures.Add(new Culture("es"));
TranslatorExample._Cultures.Add(new Culture("us"));
TranslatorExample._Cultures.Add(new Culture("uk"));
}
return TranslatorExample._Cultures;
}
}
}
static void Main(string[] args)
{
TranslatorExample example = new TranslatorExample();
Dictionary<string,string> userValues = new Dictionary<string,string> { { "es", "Nombre de usuario" }, { "us", "User name" }, { "uk", "User" } };
example.addKey("userName", userValues);
Console.WriteLine(example.TranslateKey("userName", "es")); // Nombre de usuario
Console.WriteLine(example.TranslateKey("userName", "us")); // User name
Console.WriteLine(example.TranslateValue("User name", "us", "es")); // Nombre de usuario
Console.WriteLine(example.TranslateValue("User name", "us", "uk")); // User
Console.ReadLine();
}