[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