Joan (discussió | contribucions)
Joan (discussió | contribucions)
Línia 39: Línia 39:
   fi per
   fi per


   retorn=retorn xor 0xaaaaaaaa;
   resultat=resultat xor 0xaaaaaaaa;


   per cada caracter c en UTF16(valor)
   per cada caracter c en UTF16(valor)
Línia 47: Línia 47:
    
    
   retornar resultat
   retornar resultat
fi funció
</pre>
Per calcular el fitxer es procedeix de la següent manera:
<pre>
calc_codi(lang_code,missatges,forms)
  codi=0xbad9a61c
  codi=codi xor calc_codi_linia("lang","id",lang_code)
  per cada missatge m en missatges
    codi=codi xor calc_codi_linia("msg",m.name,m.value)
  fi per
  per cada form f en forms
    per cada camp c en f.fields
      codi=codi xor calc_codi_linia("frm."+f.name,c.name,c.value)
    fi per
  fi per
  retorna codi
fi funció
fi funció
</pre>
</pre>

Revisió del 15:45, 3 oct 2012

Format

Els fitxers d'idiomes sempre es diuen LDST_{lang_code}.xml. On {lang_code} és el codi de 2 lletres del idioma (Ex: LDST_CA.xml Català, LDST_ES.xml Espanyol, LDST_ZH.xml Xinès ....)

Les dades estan guardades en format XML i la codificació és UTF-8.

<?xml version="1.0" encoding="utf-8"?>
<lang id={lang_code}>
    <messages>
         <message name={msg_name} value={msg_text}>*
    </messages>
    <forms>
         <form name={form_name}>
              <field name={control_path} value={control_text}/>*
         </form>*
    </forms>
    <verification code={auth_code}>
</lang>

Per garantir l'integritat dels fitxers s'ha afegit un codi de verificació. El codi es calcula fent la XOR dels codis de verificació individuals de totes les linies. Es fa d'aquesta manera ja que si ens permuten l'ordre de les linies dins de cada apartat el fitxer continua sent vàlid.

La funció per calcular el codi d'una linia funciona de la següent manera:

calc_codi_linia(string lloc_linia,string clau,string valor)
  int32 resultat=0

  per cada caracter c en UTF16(lloc_linia)
    resultat=resultat xor c
    rotar_un_bit_esquerra(resultat)
  fi per
  
  resultat=resultat xor 0x55555555;

  per cada caracter c en UTF16(clau)
    resultat=resultat xor c
    rotar_un_bit_esquerra(resultat)
  fi per

  resultat=resultat xor 0xaaaaaaaa;

  per cada caracter c en UTF16(valor)
    resultat=resultat xor c
    rotar_un_bit_esquerra(resultat)
  fi per
  
  retornar resultat
fi funció

Per calcular el fitxer es procedeix de la següent manera:


calc_codi(lang_code,missatges,forms)
  codi=0xbad9a61c

  codi=codi xor calc_codi_linia("lang","id",lang_code)

  per cada missatge m en missatges
    codi=codi xor calc_codi_linia("msg",m.name,m.value)
  fi per

  per cada form f en forms
    per cada camp c en f.fields
      codi=codi xor calc_codi_linia("frm."+f.name,c.name,c.value)
    fi per
  fi per

  retorna codi
fi funció