How to build and generate a new locale for icu4c in Android

HOW TO GENERATE A NEW LOCALE FOR ICU4C

ANTECEDENTES

La llingua asturiana nun tien locale válidu p’Android. Tien un locale, baxo códigu ‘ast‘, pero esti nun ye válidu por tener 3 lletres, yá qu’el funcionamientu d’Android namái-y permite funcionar con códigos de 2 lletres. Por ello de hai de trabayar baxo otru códigu válidu, pero hai que xeneralu: El locale escoyíu ye el es_XA, por razones varies, pero les fundamentales son que

1) Ye funcional.

2) al ser es_ , toles aplicaciones que nun tean n’asturianu, van salir en castellanu, faciendo más cenciella la vida al asturfalante que nun sepa inglés.

3) _XA ye un recursu válidu pa definir rexones nueves. Por poner un exemplu, Kosovo (non reconocíu entá por dellos estaos), usa el códigu de país _XK. El códigu _XA permite a la llingua asturiana identificase como rexón/país válidu.

Android usa los locales direutamente de la información qu’obtién de ICU. Al compilar Android, los ficheros .dat de los locale nun se compilen, sinón que s’usen como tán. Nel casu que ICU incluya el locale ‘ast’, ésti nun diba ser válidu polo desplicao más arriba. Ye por ello, qu’hai de xenerar un locale nuevu. Los ficheros nos que tán los locales son:

icudtXXl-all.dat

icudtXXl-default.dat

El más importante ye icudtXXl-default.dat

 

PROCEDURE


El ficheru README.txt en /icu4c/stubdata/desplica’l procesu de xeneración. Pa xenerar el locale es_XA hai de facer lo siguiente:

Primero hai que modificar los ficheros correspondientes nes carpetes icu4c/data/ ‘locales’, ‘lang’, ‘zone’, ‘region’, ‘curr’, ‘coll’, ‘rbnf’..icu-config.xml …etc ,),
vamos a la carpeta icu4c/data/stubdata y ellí definimos tamién les modificaciones necesaries en icu-data-default.txt

 


(README.txt)
PUNTU #3


a. Create or change the text format resource files under external/icu4c/data.
(Bien, porque eso yá lo ficimos enantes, al modificar el conteníu de los ficheros nes carpetes ‘lang’…’locale’…etc )

b. Make a temporary directory for ICU build.(creamos direutoriu icuBuild pa trabayar nél)

mkdir external/icu4c/icuBuild

c. cd to ICU build directory.(entramos a él)


cd external/icu4c/icuBuild

d. Run external/icu4c/runConfigureICU with “Linux” option to generate the
makefile.
Exemplu:

android/nombre/external/icu4c/runConfigureICU Linux

(Y agora executamos el puntu “e.”)


make -j2

f. The new icudtXXl.dat is under data/out/tmp and the individual resources are
under data/out/build/icudtXXl
For example, you can find data/out/tmp/icudtXXl.dat and data/out/build/icudtXX48l/*.res

El ficheru que nos interesa ye’l icudtXXl.dat que ta na carpeta: icuBuild/data/out/build/

g. Copy the new icudtXXl.dat over $android/nombre/external/icu4c/stubdata/icudtXXl-all.dat

Exemplu:

cp data/out/tmp/icudtXXl.dat $android/nombre/external/icu4c/stubdata/icudtXXl-all.dat

O lo que ye lo mesmo: el ficheru que se nos xenera na carpeta data/out/tmp/icudtXXl.dat tien que renomase a icudtXXl-all.dat y sobrescribir al que tenemos en /stubdata

Siguimos lleendo, y diznos que vayamos al puntu #1 o #2.

h. Check #1 or #2 to replace or add resource to ICU.

El puntu #1 ye’l nuestru, porquel #2 ye namái p’amestar recursos a locales esistentes que yá tean nel ficheru orixinal icudtXXl-all.dat

Agora vamos al puntu #1, pero ENANTES, borramos la carpeta icuBuild, porque sinón, al compilar va danos dará problemas 🙂

i. Clean up ICU build directory.

(README.txt) PUNTU #1

Agora tenemos que xenerar el ficheruicudtXXl-default.dat

1. To generate ICU data files:run the icu_dat_generator.py script.
The command is:


./icu_dat_generator.py [-v] [-h]

Esti script va xenerar un icudtXXl-default.dat a partir del icudtXXl-all.dat que xeneramos enantes, y cola información que sespecifica en: icu-data-default.txt (au previamente tendremos amestao’l nuesu locale n’orde alfabéticu)

Nesti puntu, asúmese que pa executar el script icu_dat_generator.py, ENANTES hai d’executar “envsetup.sh” y “choosecombo” ( http://tinyurl.com/nal68cs)

Por eso, al executar ./icu_dat_generator.py si nun executamos primero envsetup, va dicir daqué asemeyao a:

“You must run env_setup.sh first”

WARNING / AVISU : El ficheru nun ye el “env_setup.sh”, (Nun lleva guión baxu!!) el nome correutu del ficheru ye:

envsetup.sh

Y va tar na carpeta:

build/

Facemos:

source envsetup.sh

Y llueu escribimos:

choosecombo

Escoyemos les siguientes opciones (son les que vienen por defeutu, nesti casu)

Build for the simulator or the device?

1. Device

2. Simulator

 

Which would you like? [1] 1

Build type choices are:

1. release

2. debug

 

Which would you like? [1] 1

 

Variant choices are:

1. user

2. userdebug

3. eng

Which would you like? [eng] 3

 

Y fecho. Agora yá podemos tornar a la carpeta /android/nombre/external/icu4c/stubdata, y executar el icu_dat_generator.py

El ficheru que xenera, va tener la forma icudtXXl-default.daty va sobrescribir automáticamentel que tengamos.


Y eso ye too 😉

 

Los comentarios tan zarraos