Sprogversionering
Jeg havde egentlig sat mig for at lege lidt med ActionScript 2.0 klassen Locale, for at sætte mig ind i den “rigtige” måde at lave sprogversionering på.
Men, efter at have kigget lidt på det må jeg nok sige at jeg er gået lidt død i det.
Og hvorfor så det?
Jo, en af grundene er at de xml-filer der loades skal være i XLIFF format.
Jeg må tilstå at jeg synes at det er et meget “rodet” format, og ja, tilgivet, jeg er ikke den helt store xml-haj hvilket givetvis gør det endnu mere uoverskueligt.
En anden ting som jeg synes ikke er så smart, er at der ser ud til at være en enormt mængde spildte bytes på selve strukturen i filen.
Blandt andet, så loader man jo både den tekst på det sprog som man skal bruge, samt originalversionen som den er oversat fra, og det i sig selv gør jo at alting vil fylde omtrent det dobbelte.
XLIFF er ganske givet en god ting på store projekter hvor det er vigtigt at flere systemer kan snakke sammen, men til mine egne tror jeg ikke jeg vil bruge det lige med det samme, her vil jeg i stedet holde mig til mit egetudviklede system.
Mit eget system
Grundæggende, så består mit eget, meget simplistiske system af én fil pr. sprog i følgende struktur:
<?xml version="1.0"?>
<lang id="title" text="Min overskrift" />
<lang id="menu1" text="Menupunkt 1" />
<lang id="txt1" text="Noget mere tekst" />
Og ja, den lever ikke helt op til xml-specifikationerne, men den loades problemfrit af Flash og indeholder stort set ingen unøde bytes.
Efter at have loadet xml-filen parser jeg den med følgende lille funktion:
objLang = new Object();
for(i=0; i<xmlDoc.childNodes.length; i++) {
objLang[xmlDoc.childNodes[i].attributes.id] = xmlDoc.childNodes[i].attributes.text;
}
Efter at have parsen den, har jeg adgang til alle værdierne fra xml-filen udfra deres id, eksempelvis:
trace(objLang.menu1) //Returnerer "Menupunkt 1"
Og det kan jeg så bare bruge direkte som var variabel i mine dynamiske tekstfelter.
Det er absolut ikke en fejlfri metode som er egnet til stor-stilede projekter med flere tusind variabler og meget lange tekster, men det jeg som oftest har brug for er navnene på menupunkter, en linie her og der, og til det fungerer den perfekt


