IDIOMAS

Google-Translate-Chinese Google-Translate-Spanish to French Google-Translate-Spanish to German Google-Translate-Spanish to Japanese Google-Translate-Spanish to English Google-Translate-Spanish to Russian Google-Translate-Spanish to Portuguese Google-Translate-Spanish to Italian

miércoles, 10 de junio de 2015

Como cambiar el IDIOMA de nuestra aplicación Android en Android Studio. Adaptación automática por países.

La entrada de hoy habla de una de las cosas más importantes a tener en cuenta a la hora de crear una buena app: la traducción y adaptación de nuestra aplicación para cada país.

Es sencillo: a más idiomas, en más países se podrá distribuir, más público. Así que te enseñaré la manera para hacerlo paso a paso. Empecemos.

- Hay que tener a mano los códigos ISO 639-1 de cada país/idioma. También servirá el -2 y el -3. Android Studio puede reconocer todos esos códigos y hay que ir probando hasta que se muestre la bandera del país  ( lo veremos más adelante ) :

ISO 639-2/5ISO 639-3ISO 639-1Language nameScopeType
aaraaraaAfarIndividualLiving
aavAustro-Asiatic languagesCollective
abkabkabAbkhazianIndividualLiving
aceaceAchineseIndividualLiving
achachAcoliIndividualLiving
adaadaAdangmeIndividualLiving
adyadyAdygheIndividualLiving
afaAfro-Asiatic languagesCollective
afhafhAfrihiliIndividualConstructed
afrafrafAfrikaansIndividualLiving
ainainAinu (Japan)IndividualLiving
akaakaakAkanMacrolanguageLiving
akkakkAkkadianIndividualAncient
alb* / sqisqisqAlbanianMacrolanguageLiving
alealeAleutIndividualLiving
algAlgonquian languagesCollective
altaltSouthern AltaiIndividualLiving
alvAtlantic-Congo languagesCollective
amhamhamAmharicIndividualLiving
angangOld English (ca. 450-1100)IndividualHistorical
anpanpAngikaIndividualLiving
apaApache languagesCollective
aqaAlacalufan languagesCollective
aqlAlgic languagesCollective
araaraarArabicMacrolanguageLiving
arcarcOfficial Aramaic (700-300 BCE)IndividualAncient
argarganAragoneseIndividualLiving
arm* / hyehyehyArmenianIndividualLiving
arnarnMapudungunIndividualLiving
arparpArapahoIndividualLiving
artArtificial languagesCollective
arwarwArawakIndividualLiving
asmasmasAssameseIndividualLiving
astastAsturianIndividualLiving
athAthapascan languagesCollective
aufArauan languagesCollective
ausAustralian languagesCollective
avaavaavAvaricIndividualLiving
aveaveaeAvestanIndividualAncient
awaawaAwadhiIndividualLiving
awdArawakan languagesCollective
aymaymayAymaraMacrolanguageLiving
azcUto-Aztecan languagesCollective
azeazeazAzerbaijaniMacrolanguageLiving
badBanda languagesCollective
baiBamileke languagesCollective
bakbakbaBashkirIndividualLiving
balbalBaluchiMacrolanguageLiving
bambambmBambaraIndividualLiving
banbanBalineseIndividualLiving
baq* / euseuseuBasqueIndividualLiving
basbasBasa (Cameroon)IndividualLiving
batBaltic languagesCollective
bejbejBejaIndividualLiving
belbelbeBelarusianIndividualLiving
bembemBemba (Zambia)IndividualLiving
benbenbnBengaliIndividualLiving
berBerber languagesCollective
bhobhoBhojpuriIndividualLiving
bihbhBihari languagesCollective
bikbikBikolMacrolanguageLiving
binbinBiniIndividualLiving
bisbisbiBislamaIndividualLiving
blablaSiksikaIndividualLiving
bntBantu languagesCollective
bod / tib*bodboTibetanIndividualLiving
bosbosbsBosnianIndividualLiving
brabraBrajIndividualLiving
brebrebrBretonIndividualLiving
btkBatak languagesCollective
buabuaBuriatMacrolanguageLiving
bugbugBugineseIndividualLiving
bulbulbgBulgarianIndividualLiving
bur* / myamyamyBurmeseIndividualLiving
bynbynBilinIndividualLiving
cadcadCaddoIndividualLiving
caiCentral American Indian languagesCollective
carcarGalibi CaribIndividualLiving
catcatcaCatalanIndividualLiving
cauCaucasian languagesCollective
cbaChibchan languagesCollective
ccnNorth Caucasian languagesCollective
ccsSouth Caucasian languagesCollective
cdcChadic languagesCollective
cddCaddoan languagesCollective
cebcebCebuanoIndividualLiving
celCeltic languagesCollective
ces / cze*cescsCzechIndividualLiving
chachachChamorroIndividualLiving
chbchbChibchaIndividualExtinct
checheceChechenIndividualLiving
chgchgChagataiIndividualExtinct
chi* / zhozhozhChineseMacrolanguageLiving
chkchkChuukeseIndividualLiving
chmchmMari (Russia)MacrolanguageLiving
chnchnChinook jargonIndividualLiving
chochoChoctawIndividualLiving
chpchpChipewyanIndividualLiving
chrchrCherokeeIndividualLiving
chuchucuChurch SlavicIndividualAncient
chvchvcvChuvashIndividualLiving
chychyCheyenneIndividualLiving
cmcChamic languagesCollective
copcopCopticIndividualExtinct
corcorkwCornishIndividualLiving
coscoscoCorsicanIndividualLiving
cpeEnglish based Creoles and pidginsCollective
cpfFrench-Based Creoles and pidginsCollective
cppPortuguese-Based Creoles and pidginsCollective
crecrecrCreeMacrolanguageLiving
crhcrhCrimean TatarIndividualLiving
crpCreoles and pidginsCollective
csbcsbKashubianIndividualLiving
csuCentral Sudanic languagesCollective
cusCushitic languagesCollective
cym / wel*cymcyWelshIndividualLiving
cze* / cescescsCzechIndividualLiving
dakdakDakotaIndividualLiving
dandandaDanishIndividualLiving
dardarDargwaIndividualLiving
dayLand Dayak languagesCollective
deldelDelawareMacrolanguageLiving
dendenSlave (Athapascan)MacrolanguageLiving
deu / ger*deudeGermanIndividualLiving
dgrdgrDogribIndividualLiving
dindinDinkaMacrolanguageLiving
divdivdvDhivehiIndividualLiving
dmnMande languagesCollective
doidoiDogri (macrolanguage)MacrolanguageLiving
draDravidian languagesCollective
dsbdsbLower SorbianIndividualLiving
duaduaDualaIndividualLiving
dumdumMiddle Dutch (ca. 1050-1350)IndividualHistorical
dut* / nldnldnlDutchIndividualLiving
dyudyuDyulaIndividualLiving
dzodzodzDzongkhaIndividualLiving
efiefiEfikIndividualLiving
egxEgyptian languagesCollective
egyegyEgyptian (Ancient)IndividualAncient
ekaekaEkajukIndividualLiving
elxelxElamiteIndividualAncient
engengenEnglishIndividualLiving
enmenmMiddle English (1100-1500)IndividualHistorical
epoepoeoEsperantoIndividualConstructed
estestetEstonianMacrolanguageLiving
esxEskimo-Aleut languagesCollective
euqBasque (family)Collective
eus / baq*euseuBasqueIndividualLiving
eweeweeeEweIndividualLiving
ewoewoEwondoIndividualLiving
fanfanFang (Equatorial Guinea)IndividualLiving
faofaofoFaroeseIndividualLiving
fas / per*fasfaPersianMacrolanguageLiving
fatfatFantiIndividualLiving
fijfijfjFijianIndividualLiving
filfilFilipinoIndividualLiving
finfinfiFinnishIndividualLiving
fiuFinno-Ugrian languagesCollective
fonfonFonIndividualLiving
foxFormosan languagesCollective
fra / fre*frafrFrenchIndividualLiving
fre* / frafrafrFrenchIndividualLiving
frmfrmMiddle French (ca. 1400-1600)IndividualHistorical
frofroOld French (842-ca. 1400)IndividualHistorical
frrfrrNorthern FrisianIndividualLiving
frsfrsEastern FrisianIndividualLiving
fryfryfyWestern FrisianIndividualLiving
fulfulffFulahMacrolanguageLiving
furfurFriulianIndividualLiving
gaagaaGaIndividualLiving
gaygayGayoIndividualLiving
gbagbaGbaya (Central African Republic)MacrolanguageLiving
gemGermanic languagesCollective
geo* / katkatkaGeorgianIndividualLiving
ger* / deudeudeGermanIndividualLiving
gezgezGeezIndividualAncient
gilgilGilberteseIndividualLiving
glaglagdScottish GaelicIndividualLiving
gleglegaIrishIndividualLiving
glgglgglGalicianIndividualLiving
glvglvgvManxIndividualLiving
gmeEast Germanic languagesCollective
gmhgmhMiddle High German (ca. 1050-1500)IndividualHistorical
gmqNorth Germanic languagesCollective
gmwWest Germanic languagesCollective
gohgohOld High German (ca. 750-1050)IndividualHistorical
gongonGondiMacrolanguageLiving
gorgorGorontaloIndividualLiving
gotgotGothicIndividualAncient
grbgrbGreboMacrolanguageLiving
grcgrcAncient Greek (to 1453)IndividualHistorical
gre* / ellellelModern Greek (1453-)IndividualLiving
grkGreek languagesCollective
grngrngnGuaraniMacrolanguageLiving
gswgswSwiss GermanIndividualLiving
gujgujguGujaratiIndividualLiving
gwigwiGwichʼinIndividualLiving
haihaiHaidaMacrolanguageLiving
hathathtHaitianIndividualLiving
hauhauhaHausaIndividualLiving
hawhawHawaiianIndividualLiving
hebhebheHebrewIndividualLiving
herherhzHereroIndividualLiving
hilhilHiligaynonIndividualLiving
himHimachali languagesCollective
hinhinhiHindiIndividualLiving
hithitHittiteIndividualAncient
hmnhmnHmongMacrolanguageLiving
hmohmohoHiri MotuIndividualLiving
hmxHmong-Mien languagesCollective
hokHokan languagesCollective
hrvhrvhrCroatianIndividualLiving
hsbhsbUpper SorbianIndividualLiving
hunhunhuHungarianIndividualLiving
huphupHupaIndividualLiving
hye / arm*hyehyArmenianIndividualLiving
hyxArmenian (family)Collective
ibaibaIbanIndividualLiving
iboiboigIgboIndividualLiving
ice* / islislisIcelandicIndividualLiving
idoidoioIdoIndividualConstructed
iiiiiiiiSichuan YiIndividualLiving
iirIndo-Iranian languagesCollective
ijoIjo languagesCollective
ikuikuiuInuktitutMacrolanguageLiving
ileileieInterlingueIndividualConstructed
iloiloIlokoIndividualLiving
inainaiaInterlingua (International Auxiliary Language Association)IndividualConstructed
incIndic languagesCollective
indindidIndonesianIndividualLiving
ineIndo-European languagesCollective
inhinhIngushIndividualLiving
ipkipkikInupiaqMacrolanguageLiving
iraIranian languagesCollective
iroIroquoian languagesCollective
isl / ice*islisIcelandicIndividualLiving
itaitaitItalianIndividualLiving
itcItalic languagesCollective
javjavjvJavaneseIndividualLiving
jbojboLojbanIndividualConstructed
jpnjpnjaJapaneseIndividualLiving
jprjprJudeo-PersianIndividualLiving
jpxJapanese (family)Collective
jrbjrbJudeo-ArabicMacrolanguageLiving
kaakaaKara-KalpakIndividualLiving
kabkabKabyleIndividualLiving
kackacKachinIndividualLiving
kalkalklKalaallisutIndividualLiving
kamkamKamba (Kenya)IndividualLiving
kankanknKannadaIndividualLiving
karKaren languagesCollective
kaskasksKashmiriIndividualLiving
kat / geo*katkaGeorgianIndividualLiving
kaukaukrKanuriMacrolanguageLiving
kawkawKawiIndividualAncient
kazkazkkKazakhIndividualLiving
kbdkbdKabardianIndividualLiving
kdoKordofanian languagesCollective
khakhaKhasiIndividualLiving
khiKhoisan languagesCollective
khmkhmkmCentral KhmerIndividualLiving
khokhoKhotaneseIndividualAncient
kikkikkiKikuyuIndividualLiving
kinkinrwKinyarwandaIndividualLiving
kirkirkyKirghizIndividualLiving
kmbkmbKimbunduIndividualLiving
kokkokKonkani (macrolanguage)MacrolanguageLiving
komkomkvKomiMacrolanguageLiving
konkonkgKongoMacrolanguageLiving
korkorkoKoreanIndividualLiving
koskosKosraeanIndividualLiving
kpekpeKpelleMacrolanguageLiving
krckrcKarachay-BalkarIndividualLiving
krlkrlKarelianIndividualLiving
kroKru languagesCollective
krukruKurukhIndividualLiving
kuakuakjKuanyamaIndividualLiving
kumkumKumykIndividualLiving
kurkurkuKurdishMacrolanguageLiving
kutkutKutenaiIndividualLiving
ladladLadinoIndividualLiving
lahlahLahndaMacrolanguageLiving
lamlamLambaIndividualLiving
laolaoloLaoIndividualLiving
latlatlaLatinIndividualAncient
lavlavlvLatvianMacrolanguageLiving
lezlezLezghianIndividualLiving
limlimliLimburganIndividualLiving
linlinlnLingalaIndividualLiving
litlitltLithuanianIndividualLiving
lollolMongoIndividualLiving
lozlozLoziIndividualLiving
ltzltzlbLuxembourgishIndividualLiving
lualuaLuba-LuluaIndividualLiving
lublubluLuba-KatangaIndividualLiving
lugluglgGandaIndividualLiving
luiluiLuisenoIndividualLiving
lunlunLundaIndividualLiving
luoluoLuo (Kenya and Tanzania)IndividualLiving
luslusLushaiIndividualLiving
mac* / mkdmkdmkMacedonianIndividualLiving
madmadMadureseIndividualLiving
magmagMagahiIndividualLiving
mahmahmhMarshalleseIndividualLiving
maimaiMaithiliIndividualLiving
makmakMakasarIndividualLiving
malmalmlMalayalamIndividualLiving
manmanMandingoMacrolanguageLiving
mao* / mrimrimiMaoriIndividualLiving
mapAustronesian languagesCollective
marmarmrMarathiIndividualLiving
masmasMasaiIndividualLiving
may* / msamsamsMalay (macrolanguage)MacrolanguageLiving
mdfmdfMokshaIndividualLiving
mdrmdrMandarIndividualLiving
menmenMende (Sierra Leone)IndividualLiving
mgamgaMiddle Irish (900-1200)IndividualHistorical
micmicMi'kmaqIndividualLiving
minminMinangkabauIndividualLiving
mismisUncoded languagesSpecial
mkd / mac*mkdmkMacedonianIndividualLiving
mkhMon-Khmer languagesCollective
mlgmlgmgMalagasyMacrolanguageLiving
mltmltmtMalteseIndividualLiving
mncmncManchuIndividualLiving
mnimniManipuriIndividualLiving
mnoManobo languagesCollective
mohmohMohawkIndividualLiving
monmonmnMongolianMacrolanguageLiving
mosmosMossiIndividualLiving
mri / mao*mrimiMaoriIndividualLiving
msa / may*msamsMalay (macrolanguage)MacrolanguageLiving
mulmulMultiple languagesSpecial
munMunda languagesCollective
musmusCreekIndividualLiving
mwlmwlMirandeseIndividualLiving
mwrmwrMarwariMacrolanguageLiving
mya / bur*myamyBurmeseIndividualLiving
mynMayan languagesCollective
myvmyvErzyaIndividualLiving
nahNahuatl languagesCollective
naiNorth American IndianCollective
napnapNeapolitanIndividualLiving
naunaunaNauruIndividualLiving
navnavnvNavajoIndividualLiving
nblnblnrSouth NdebeleIndividualLiving
ndendendNorth NdebeleIndividualLiving
ndondongNdongaIndividualLiving
ndsndsLow GermanIndividualLiving
nepnepneNepali (macrolanguage)MacrolanguageLiving
newnewNepal BhasaIndividualLiving
ngfTrans-New Guinea languagesCollective
nianiaNiasIndividualLiving
nicNiger-Kordofanian languagesCollective
niuniuNiueanIndividualLiving
nld / dut*nldnlDutchIndividualLiving
nnonnonnNorwegian NynorskIndividualLiving
nobnobnbNorwegian BokmålIndividualLiving
nognogNogaiIndividualLiving
nonnonOld NorseIndividualHistorical
nornornoNorwegianMacrolanguageLiving
nqonqoN'KoIndividualLiving
nsonsoPediIndividualLiving
nubNubian languagesCollective
nwcnwcClassical NewariIndividualHistorical
nyanyanyNyanjaIndividualLiving
nymnymNyamweziIndividualLiving
nynnynNyankoleIndividualLiving
nyonyoNyoroIndividualLiving
nzinziNzimaIndividualLiving
ociociocOccitan (post 1500)IndividualLiving
ojiojiojOjibwaMacrolanguageLiving
omqOto-Manguean languagesCollective
omvOmotic languagesCollective
orioriorOriya (macrolanguage)MacrolanguageLiving
ormormomOromoMacrolanguageLiving
osaosaOsageIndividualLiving
ossossosOssetianIndividualLiving
otaotaOttoman Turkish (1500-1928)IndividualHistorical
otoOtomian languagesCollective
paaPapuan languagesCollective
pagpagPangasinanIndividualLiving
palpalPahlaviIndividualAncient
pampamPampangaIndividualLiving
panpanpaPanjabiIndividualLiving
pappapPapiamentoIndividualLiving
paupauPalauanIndividualLiving
peopeoOld Persian (ca. 600-400 B.C.)IndividualHistorical
per* / fasfasfaPersianMacrolanguageLiving
phiPhilippine languagesCollective
phnphnPhoenicianIndividualAncient
plfCentral Malayo-Polynesian languagesCollective
pliplipiPaliIndividualAncient
polpolplPolishIndividualLiving
ponponPohnpeianIndividualLiving
porporptPortugueseIndividualLiving
pozMalayo-Polynesian languagesCollective
pqeEastern Malayo-Polynesian languagesCollective
pqwWestern Malayo-Polynesian languagesCollective
praPrakrit languagesCollective
proproOld Provençal (to 1500)IndividualHistorical
puspuspsPushtoMacrolanguageLiving
qaa-qtzqaa-qtzReserved for local useLocal
quequequQuechuaMacrolanguageLiving
qweQuechuan (family)Collective
rajrajRajasthaniMacrolanguageLiving
raprapRapanuiIndividualLiving
rarrarRarotonganIndividualLiving
roaRomance languagesCollective
rohrohrmRomanshIndividualLiving
romromRomanyMacrolanguageLiving
ron / rum*ronroRomanianIndividualLiving
runrunrnRundiIndividualLiving
ruprupMacedo-RomanianIndividualLiving
rusrusruRussianIndividualLiving
sadsadSandaweIndividualLiving
sagsagsgSangoIndividualLiving
sahsahYakutIndividualLiving
saiSouth American Indian languagesCollective
salSalishan languagesCollective
samsamSamaritan AramaicIndividualExtinct
sansansaSanskritIndividualAncient
sassasSasakIndividualLiving
satsatSantaliIndividualLiving
scnscnSicilianIndividualLiving
scoscoScotsIndividualLiving
sdvEastern Sudanic languagesCollective
selselSelkupIndividualLiving
semSemitic languagesCollective
sgasgaOld Irish (to 900)IndividualHistorical
sgnSign languagesCollective
shnshnShanIndividualLiving
sidsidSidamoIndividualLiving
sinsinsiSinhalaIndividualLiving
sioSiouan languagesCollective
sitSino-Tibetan languagesCollective
slaSlavic languagesCollective
slk / slo*slkskSlovakIndividualLiving
slvslvslSlovenianIndividualLiving
smasmaSouthern SamiIndividualLiving
smesmeseNorthern SamiIndividualLiving
smiSami languagesCollective
smjsmjLule SamiIndividualLiving
smnsmnInari SamiIndividualLiving
smosmosmSamoanIndividualLiving
smssmsSkolt SamiIndividualLiving
snasnasnShonaIndividualLiving
sndsndsdSindhiIndividualLiving
snksnkSoninkeIndividualLiving
sogsogSogdianIndividualAncient
somsomsoSomaliIndividualLiving
sonSonghai languagesCollective
sotsotstSouthern SothoIndividualLiving
spaspaesSpanishIndividualLiving
sqiAlbanian languagesCollective
sqi / alb*sqisqAlbanianMacrolanguageLiving
srdsrdscSardinianMacrolanguageLiving
srnsrnSranan TongoIndividualLiving
srpsrpsrSerbianIndividualLiving
srrsrrSererIndividualLiving
ssaNilo-Saharan languagesCollective
sswsswssSwatiIndividualLiving
suksukSukumaIndividualLiving
sunsunsuSundaneseIndividualLiving
sussusSusuIndividualLiving
suxsuxSumerianIndividualAncient
swaswaswSwahili (macrolanguage)MacrolanguageLiving
sweswesvSwedishIndividualLiving
sycsycClassical SyriacIndividualHistorical
sydSamoyedic languagesCollective
syrsyrSyriacMacrolanguageLiving
tahtahtyTahitianIndividualLiving
taiTai languagesCollective
tamtamtaTamilIndividualLiving
tattatttTatarIndividualLiving
tbqTibeto-Burman languagesCollective
teltelteTeluguIndividualLiving
temtemTimneIndividualLiving
terterTerenoIndividualLiving
tettetTetumIndividualLiving
tgktgktgTajikIndividualLiving
tgltgltlTagalogIndividualLiving
thathathThaiIndividualLiving
tib* / bodbodboTibetanIndividualLiving
tigtigTigreIndividualLiving
tirtirtiTigrinyaIndividualLiving
tivtivTivIndividualLiving
tkltklTokelauIndividualLiving
tlhtlhKlingonIndividualConstructed
tlitliTlingitIndividualLiving
tmhtmhTamashekMacrolanguageLiving
togtogTonga (Nyasa)IndividualLiving
tontontoTonga (Tonga Islands)IndividualLiving
tpitpiTok PisinIndividualLiving
trkTurkic languagesCollective
tsitsiTsimshianIndividualLiving
tsntsntnTswanaIndividualLiving
tsotsotsTsongaIndividualLiving
tuktuktkTurkmenIndividualLiving
tumtumTumbukaIndividualLiving
tupTupi languagesCollective
turturtrTurkishIndividualLiving
tutAltaic languagesCollective
tuwTungus languagesCollective
tvltvlTuvaluIndividualLiving
twitwitwTwiIndividualLiving
tyvtyvTuvinianIndividualLiving
udmudmUdmurtIndividualLiving
ugaugaUgariticIndividualAncient
uiguigugUighurIndividualLiving
ukrukrukUkrainianIndividualLiving
umbumbUmbunduIndividualLiving
undundUndeterminedSpecial
urdurdurUrduIndividualLiving
urjUralic languagesCollective
uzbuzbuzUzbekMacrolanguageLiving
vaivaiVaiIndividualLiving
venvenveVendaIndividualLiving
vievieviVietnameseIndividualLiving
volvolvoVolapükIndividualConstructed
votvotVoticIndividualLiving
wakWakashan languagesCollective
walwalWolayttaIndividualLiving
warwarWaray (Philippines)IndividualLiving
waswasWashoIndividualLiving
wel* / cymcymcyWelshIndividualLiving
wenSorbian languagesCollective
wlnwlnwaWalloonIndividualLiving
wolwolwoWolofIndividualLiving
xalxalKalmykIndividualLiving
xgnMongolian languagesCollective
xhoxhoxhXhosaIndividualLiving
xndNa-Dene languagesCollective
yaoyaoYaoIndividualLiving
yapyapYapeseIndividualLiving
yidyidyiYiddishMacrolanguageLiving
yoryoryoYorubaIndividualLiving
ypkYupik languagesCollective
zapzapZapotecMacrolanguageLiving
zblzblBlissymbolsIndividualConstructed
zenzenZenagaIndividualLiving
zghzghStandard Moroccan TamazightIndividualLiving
zhazhazaZhuangMacrolanguageLiving
zho / chi*zhozhChineseMacrolanguageLiving
zhxChinese (family)Collective
zleEast Slavic languagesCollective
zlsSouth Slavic languagesCollective
zlwWest Slavic languagesCollective
zndZande languagesCollective
zulzulzuZuluIndividualLiving
zunzunZuniIndividualLiving
zxxzxxNo linguistic contentSpecial
zzazzaZazaMacrolanguageLiving

Ahora, hay que crear un nuevo archivo STRING.XLM donde traduciremos cada STRING en el idioma que queremos.

En Android Studio, debemos crear los nuevos directorios de recursos VALUES que se encuentran dentro de RES y se alojan los recurso STRINGS.XLM:

- Botón derecho sobre RES -> nuevo recurso directorio -> y en el mismo nombre VALUES le añadimos un guión y el código del país ( primera columna, aunque hay que ir probando hasta que nos aparezca la bandera del país justo al lado del recurso STRING) -> copiar el recurso que nos viene por defecto donde están todos nuestros STRINGS en nuestro idioma principal -> pegar en la nueva carpeta directorio VALUES-(codigo) del nuevo idioma -> traducir cada STRING




















- Abrimos la pestaña:


 




- Y nos aparece con la bandera:





- Ahora podemos modificar cada uno de los STRING del nuevo recurso STRING.XLM que será leído por el dispositivo según la configuración de idioma escogido por el usuario:








Propongo que hagas la prueba de compilación en un dispositivo externo del PC (conectado vía USB) y le puedas cambiar el idioma y ver si has completado con éxito las traducciones. Saludos a tod@s por la visita!



martes, 5 de mayo de 2015

Como programar el SETTINGS MENU en Android Studio.

Hoy nos centraremos en los Settings (opciones) que nos ofrece la Interface de la app, tanto con un botón físico en el dispositivo, como en la Action Bar ( cabecera ) virtual.

Por defecto, nuestro editor Android Studio nos muestra en la pantalla de nuestra Activity el siguiente código Java:





Este código será el que tenemos que programar. Lo veremos en un ejemplo más adelante.

Primero hay que crear los Items en el Menu_Main.xlm ( carpeta Menu de nuestro Project ):



Los Items tiene un ID, para nuestro Java,  un Title, para nuestra Interface (pantalla), un OrderInCategory, para posicionarlo en el menú desplegable, un ShowAsAction,  ("never", "always",...) que son las opciones de visualización, etc. Mira más opciones aquí: http://developer.android.com/guide/topics/resources/menu-resource.html

El ejemplo: dos infos que nos envia a dos pantallas diferentes

- Utilizamos el Item que viene por defecto en el Menu_Main.xlm y modificamos sólo el título:

<item android:id="@+id/action_settings" android:title="Info"    android:orderInCategory="100" app:showAsAction="never"/>

- creamos un segundo:

<item android:id="@+id/action_settings_2" android:title="Info2"    android:orderInCategory="100" app:showAsAction="never"/>




- Ahora nos servirá un Swich/Case donde deberemos indicar el ID de cada Item que lanzan a dos Activities:





Gracias por la visita!




miércoles, 1 de abril de 2015

Como programar el TABS HOST en Android Studio. Ejemplo con código Java.

En numerosas App encontramos en sus pantallas las TABS (pestañas). Son muy útiles para los programadores, porque nos ahorra código y nuevas ACTIVITIES, y para los usuarios, que nos permite tener opciones, menús e información extra sin "perdernos" por la aplicación. 
A demás es una alternativa a los FRAMES (hablaremos en otra entrada de blog).
A continuación vemos a ver en un ejemplo práctico donde iremos comentando los pasos a seguir.

En la PALETTE (paleta de WIDGET) buscaremos TABHOST, damos clic y, sin soltar, arrastramos sobre nuestro LAYOUT (relative en este caso) y soltamos en la parte superior:




- En COMPONENT TREE, hacemos clic en las flechas y desplegamos la estructura del TABHOST. Este se compone de un LINEARLAYOUT principal y de los TABS formados por FRAMELAYOUTS (vienes tres por defecto):




- Debemos asignar un ID a cada TAB:




- Nos cambiará en nombre de las pestañas por el nombre del ID. No os preocupéis, de momento esta bien así. Más adelante le podremos poner el nombre que nosotros querremos mediante código:




- Para las demás TABS:





Aquí os dejo el código en XLM:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TabHost
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/tabHost"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical">

            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"></TabWidget>

            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">

                <LinearLayout
                    android:id="@+id/ejemplo1"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:orientation="vertical"></LinearLayout>

                <LinearLayout
                    android:id="@+id/ejemplo2"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:orientation="vertical"></LinearLayout>

                <LinearLayout
                    android:id="@+id/ejemplo3"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:orientation="vertical"></LinearLayout>
            </FrameLayout>
        </LinearLayout>
    </TabHost>
</RelativeLayout>



Ya tenemos creada la interfaz de nuestro TABHOST. Ahora vamos a escribir el código en JAVA dentro el OnCreate de nuestro MainActivity:


public class MainActivity extends ActionBarActivity {
    
    TabHost TbH;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TbH = (TabHost) findViewById(R.id.tabHost); //llamamos al Tabhost
        TbH.setup();                                                         //lo activamos

        TabHost.TabSpec tab1 = TbH.newTabSpec("tab1");  //aspectos de cada Tab (pestaña)
        TabHost.TabSpec tab2 = TbH.newTabSpec("tab2");
        TabHost.TabSpec tab3 = TbH.newTabSpec("tab3");

        tab1.setIndicator("UNO");    //qué queremos que aparezca en las pestañas
        tab1.setContent(R.id.ejemplo1); //definimos el id de cada Tab (pestaña)

        tab2.setIndicator("DOS");
        tab2.setContent(R.id.ejemplo2);

        tab3.setIndicator("TRES");
        tab3.setContent(R.id.ejemplo3);

        TbH.addTab(tab1); //añadimos los tabs ya programados
        TbH.addTab(tab2);
        TbH.addTab(tab3); 

    }


En el código podemos cambiar el nombre a las pestañas. Compilando el proyecto en el emulador, nos debería aparecer:



Sólo quedará por llenar los LAYOUTS de cada TAB por medio de XLM, o directamente en el COMPONENT TREE arrastrando desde el PALETTE los elementos que queremos. Todos los nuevos elementos se programarán desde el OnCreate de la ACTIVITY donde se ubica el TABHOST.

Saludos a tod@s y gracias por la visita!