martedì 23 settembre 2014

Confrontare due resx...

Su un progetto pluriennale e multilingua, diventa importante manutenere i file contenenti le traduzioni statiche.

In c# dei comodi file di risorse, resx, rimangono alla base dell'apparato tecnico. Quello che diventa più impegnativo di solito è mantener allineate tutte le lingue possibili.

Quando poi le chiavi diventano migliaia, individuare le "nuove chiavi non tradotte" diventa una fatica inenarrabile. Per questo mi sono scritto un piccolo programmino di supporto

Ho creato una semplice console application, inserito dentro il progetto due resx (ItalianoMaster.resx ed EnglishTranslate.resx)

E il semplice codice

static void Main(string[] args)
{
// carico tutte le traduzioni  di default (per me italiano)
Dictionary italiano = new Dictionary();
ResourceSet resourceSetùMaster = ItalianoMaster.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
foreach (DictionaryEntry entry in resourceSetùMaster)
{
    string resourceKey = entry.Key as string;
    object resource = entry.Value;
    italiano.Add(resourceKey, resource.ToString());
}

// carico tutte le traduzioni in inglese
Dictionary inglese = new Dictionary();
ResourceSet resourceSet = EnglishTranslate.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
foreach (DictionaryEntry entry in resourceSet)
{
    string resourceKey = entry.Key as string;
    object resource = entry.Value;
    inglese.Add(resourceKey, resource.ToString());
}



foreach (string k in italiano.Keys)
{
    if (inglese.ContainsKey(k))
    {
        inglese.Remove(k);
    }else
    {
        System.IO.File.AppendAllText(@"c:\temp\daaggiungere.txt", String.Format("{0}ç{1}{2}", k, italiano[k], Environment.NewLine) );
    }
}