[Android] Possibilitat d'implementar el ca-valencia
Joan Montané
joan a montane.cat
dic mar 30 21:03:02 CEST 2011
A veure... aquesta és tota la informació que he trobat remenant pel
codi font, inicialment havia "caçat" els tres fitxers que ressenyo més
avall, però tot preparant aquest correu veig que són uns quants més...
ja no sóc tan optimista. Parlem-ho.
Les rutes als fitxers que indico són locals i es refereixen a:
https://mail.google.com/mail/?shva=1#drafts/12f081639f1cfed2
( si l'enllaç falla aneu a http://android.git.kernel.org/ i
seleccioneu platform/frameworks/base.git )
Pau, potser sí que podríem parlar primer amb la gent
d'android-contrib, però sóc pessimista. Una alternativa intermitja a
les opcions 1 i 2 que posava ahir, seria aconseguir crear un àlies del
codi ca-valencia (o ca-ES-valencia) cap al codi ca-XV. Així faríem
servir el locale correcte i podríem tenir els xml a values-ca-rXV
sense problemes. No tinc la més remota idea de si es possible fer una
cosa així, però si a l'AOSP no volen saber res de les variants de
llengua, podríem demanar que implementessin una cosa així.
Fitxer:
./frameworks/base/tools/aapt/AaptAssets.cpp
Aquí hi ha la funció que processa el directori on es troben els xml,
segons els camps exposats aquí
http://developer.android.com/guide/topics/resources/providing-resources.html
Fixeu-vos en les funcions de les línies 112 i 240 de fitxer
AaptAssets.cpp (per cert crec que hi ha un error a la línia 319)
Fitxer:
./frameworks/base/include/utils/ResourceTypes.h
línies 816 a 822, defineixen l'estructura que conté el locale a
l'estructura (valgui la redundància) ResTable_config
struct {
// \0\0 means "any". Otherwise, en, fr, etc.
char language[2];
// \0\0 means "any". Otherwise, US, CA, etc.
char country[2];
};
Cal afegir una variable pel camp de variant després la variable
country, una cosa així?
// \0\0\0\0\0\0\0\0 means "any". Otherwise, SCOTLAND,
POSIX, VALENCIA, etc.
char variant[8];
línies 1085 a 1095, compara els locales a nivell de llengua i estat.
Caldria afegir el codi
if (variant[0] != o.variant[0]) {
if (!variant[0]) return false;
if (!o.variant[0]) return true;
}
línies 1204 a 1212, una altra comparació
if ((variant[0] != o.variant[0]) && requested->variant[0]) {
return (variant[0]);
}
línies 1385 a 1395, una altra comparació però aquí ja no és tan fàcil
"comparar" els valors de variant, ja que la longitud no és fixa (va de
4 a 8 caràcters).
línies 1492 a 1503, hi ha un funció getLocale, que caldria adaptar, ja
que es fa servir a la funció getLocales del fixer
./frameworks/base/libs/utils/ResourceTypes.cpp
línies 1505 a 1519, una altra funció, però sembla que aquesta només
treu coses per pantalla.
Altres fitxers de "remenen" coses del locale i recursos:
./frameworks/base/tools/aapt/AaptAssets.h
./frameworks/base/tools/aapt/AaptAssets.cpp
./frameworks/base/tools/aapt/ResourceTable.cpp
./frameworks/base/tools/aapt/Resource.cpp
./frameworks/base/include/utils/AssetManager.h
./frameworks/base/include/utils/ResourceTypes.cpp
Per cert. les úniques variant de llengues que internament l'Android
reconeix són:
682 Variants{
683 1606NICT{"francès mitjà tardà fins el 1606"}
684 1694ACAD{"francès modern primerenc"}
685 1901{"ortografia alemanya tradicional"}
686 1994{"ortofrafia resiana estandarditzada"}
687 1996{"ortografia alemanya de 1996"}
688 AREVELA{"armeni oriental"}
689 AREVMDA{"armeni occidental"}
690 BAKU1926{"alfabet llatí turc unificat"}
691 BISKE{"dialecte de San Giorgio/Bila"}
692 BOONT{"Boontling"}
693 FONIPA{"alfabet fonètic internacional"}
694 FONUPA{"sistema fonètic UPA"}
695 LIPAW{"dialecte Lipovaz del resià"}
696 MONOTON{"monotònic"}
697 NEDIS{"dialecte de Natisone"}
698 NJIVA{"dialecte de Gniva/Njiva"}
699 OSOJS{"dialecte d'Oseacco/Osojane"}
700 PINYIN{"romanització Pinyin"}
701 POLYTON{"politònic"}
702 POSIX{"ordenador"}
703 REVISED{"ortografia revisada"}
704 ROZAJ{"resià"}
705 SAAHO{"saho"}
706 SCOTLAND{"anglès estàndard d'Escòcia"}
707 SCOUSE{"scouse"}
708 SOLBA{"dialecte de Stolvizza/Solbica"}
709 TARASK{"ortografia taraskievica"}
710 VALENCIA{"valencià"}
711 WADEGILE{"romanització Wade-Giles"}
712 }
el codi de variant de llengua pot ser qualsevol cadena entre 5 i 8
caràcters (xifres o lletres A-Z plain-ascii). Per motius històrics
també hi ha codis de 4 caràcters si són tots 4 nombres. Internament el
Java passa els codis de variant a majúscula.
Bé, fins aquí tot el que he descobert. No he pogut estructurar millor
aquest correu, però com a mínim us podreu fer una idea de la magnitud
de codi a modificar.
Cap comentari?
Joan Montané
Més informació sobre la llista de correu Android