[Android Software Development] FrankieDedo:
THIS GUIDE IS FOR PEOPLE THAT KNOW WHAT ARE DOING! DO NOT TELL ME THAT I BRICKED YOUR PHONE OR STUFF LIKE THAT, YOU ARE RESPONSIBLE OF WHAT HAPPENS TO YOUR PHONE, BE CAREFUL!

I wrote this guide studying the system of Motorola Droid 3, but it is good for nearly every phone, (or single application!!), maybe with advent of android 4.X this is becoming useless, because usually every rom has already all languages into it, but you could use this even for correcting translations, or translate yourself some application ;)

If you want the Italian versions of Minimoto 1.7 and MavROM 4.5 go to this thread: http://xdaforums.com/showthread.php?p=47857497#post47857497

Every Droid 3 owner out of the English/Spanish area knows that every D3 ROM comes out with only two languages preloaded in it, right? well...if you know well english (or spanish!) maybe i have something for you!

Ok, i hope this guide could be helpful to everyone like me that wanted to find a non-english, non-spanish Gingerbread ROM for Droid 3.

After some studies, and a lot of searching too, i've found the best (i think) way to translate roms. Oh and this guide is good for every android phone out there! Let's start!

Part 1 - Download all the stuff! (plays Monkey Island music :D )

Our needs are very few, what you need with this is a lot of patience, and knowing some english could help.

- A rooted Droid 3 (or any other phone)

- The ROM you want to translate

- WinRAR / 7-Zip

- Notepad / Notepad++ (Highly recommended!!!) http://notepad-plus-plus.org/

- Java Development Kit www.java.com

- APK Manager/APK Multi-Tool, since now i will call them APKM and APKMT ( i used APK Manager, but multi-tool should be fine anyway) http://apkmultitool.com/?q=node/5

- Google Translator Toolkit http://translate.google.com/toolkit/

- Safestrap (optional, but very, very recommended)

- MoreLocale2 or another language changing program

Note 1: If APK Manager/Multi-Tool bother you with something about java not found do this: http://wiki.answers.com/Q/How_do_you_stop_the_error_%27java%27_is_not_recognized_as_an_internal_or_external_command_operable_program_or_batch_file

Note 2: In APKMT, the commands are a little different from APKM, e.g. in APKM the "set project" command is listed as 22 and in APKMT is listed as 24....the functions we'll use are the same, just read the description if you're not sure and you'll be fine ;)

Ok, let's take the stuff out of the box!

Part 2 - The extraction point

Open the .zip containing your ROM's files with WinRAR / 7-Zip and extract the folder "system" somewhere (i recommend to create a folder for your translation project) once the process is done, we can basically do two things: Decompile the apps or decompile the frameworks, the process is the same, but you have to go really really REALLY careful with framework apks, or once you flashed the ROM what you've got is a translated BOOTLOOP. So be careful. With apps you can mostly screw a functionality up, like SMS or Phone, but nothing too messy.

Anyway you can solve the problem with a new flash with the corrected ROM, or the original, untranslated ROM.

Ok let's start with the frameworks: we've usually got 3 differents frameworks and those are

framework-res.apk

blur-res.apk

moto-res.apk

Those apks contain mainly everything written all around the phone, like pop-up messages, status bar, app permissions and a lot of other stuff.

We'll use framework-res.apk.

If there isn't, create a folder in the same folder where you have installed APKM/APKMT, called "place-apk-here-for-modding" without quotes, then copy inside it the framework-res.apk.

Now you have to open the Script.bat file, and once you get into the main window, digit 22 (APKM) or 24 (APKMT) and press enter to select the current project, now digit the number corresponding to the desired apk (it should be 1 if you have only framework-res.apk) and press enter. now digit 9 (APKM/APKMT) and enter and you'll decompile the apk. Now you should have a folder, inside the "projects" folder of APKM/APKMT named just as the decompiled apk. Inside it, you'll find a folder called "res" open it and you'll be right into the core of the translation:

Note: if you get an error after decompiling, try with option 10 (APKM/APKMT), and drag and drop the necessary framework over the prompt when APKM/APKMT ask, press a key, and if you get another error try with another framework (D3 has 3 of them) until you get the job done. If nothing works, probably there's a problem with the apk you want to decompile.

Note 2: You could need to have frameworks installed into folder C:\Users\YourPCUSername\apktool\framework. You can do this either with apktool via cmd or manually copying the 3 frameworks into this folder (create it if needed) and renaming them this way:

- framework-res.apk => 1.apk

- moto-res.apk => 2.apk

- blur-res.apk => 3.apk

Then you should be able to decompile 99% of apks with option 9.

You'll find a bunch of folder, but we are interested in the "values" ones, if you have to translate the app, you'll see something like this:

- values

- values-es

- values-es-rUS

the first folder contains the english files, the second contains the spanish files, and the third contains some other files for spanish variants.

Open the "values" folder and inside it there are some .xml files, we will always use only 3 of those at most:

- strings.xml (the file containing mainly all the text strings of the apk, if you find this, then you have to translate it, if not, just pass over this apk, it doesn't contain text)

- arrays.xml (the file that contains some text data for drop lists, you'll not find this often, but if you find it, translate it)

- plurals.xml (the file that contains plural words, this is very rare to find, but if you want to make good translations, then, translate!!)

Now get back to "res" and create a folder called "values-xx" where xx is your language code, for example i made a values-it folder, but you'll write values-fr, values-de, values-idunno etc.

You'll put here, all the XMLs we're gonna translate now!

Part 3 - Bring out the dictionary!

The game is getting harder, now you have to use your better weapon: Google Translation Toolkit. But first, let's look into XML!

Open the "strings.xml" file with Notepad++, and look at the records structure:

<string name="aerr_application">The application %1$s (process %2$s) has stopped unexpectedly. Please try again.</string>

You have to change ONLY and i repeat ONLY the text between "<string name="aerr_application">" and "</string>"!

Now some rules:

- See that "%1$s" weirdness? that is a jolly word that Android replace with a variable data, in other words DO NOT TOUCH IT! just imagine that you'll see there something like "The application *Temple Run* (process XYZ) has stopped etc. etc.

- If you have to put an apostrophe or some other weird character, always put quotes at the beginning and at the end of the string just like in the translated string down there, it's good to always put them, And GTT (Google Translator Toolkit) does that.

- If the string you have to translate looks like code stuff, probably you should leave it untranslated, something like:

<item>@string/resolutionSummaryWideScreenTV</item>

<item>MOTOCAMSETTING_REVIEW_TIME_4_SEC</item>

see? DON'T TOUCH IT! BAD TRANSLATOR! BAD!

This is the resulting, translated string:

<string name="aerr_application">"L'applicazione %1$s (processo %2$s ) si è fermato in modo imprevisto. Si prega di riprovare."</string>

Ok, now we can translate without detonating the phone, but framework-res has something like 1300 rows of text!

WHOA! let's use GTT!! http://translate.google.com/toolkit/

Once you are on the main screen of the tool, click on the red "Upload" button on the upper left, then in the page you found after, click on "Browse..." and select your file inside your PC.

Set all the stuff down there, like the name, the language and everything else, and click "Upload for translation"...here comes the magic...

The XML is translated! sort of...

You now have to look if GTT has done the work well...let's look into this page:

- You can see that now the entries are divided in boxes, you can click onto the left panes' boxes and edit the content.

- Play a little with the interface, you have to get familiar with it if you want to translate a ROM!

- Look to spaces and returns, GTT mess them, and you should correct the format.

- Text is coloured: i'll tell you what those fancy colours ACTUALLY mean

- Orange: this means you've edited the text into the box

- Red: text coloured in red came right out of Google Translate, and 70% of times, it will be gibberish, so look carefully into it, this will be the work where you'll spend more time.

- Blue: this is a sneaky bastard, it says that he found a "100% matching" translation in his database, but it has a 30% chance to be total nonsense, be careful with it.

- Green: this colour is fine, you probably have translated this in past, or someone did it for you, anyway, it will be 99% correct, if the past translation was correct.

- Brown: this happens rarely, usually where it founds a colon (the symbol ":" ok?? :angel: ) and for some reason, it goes random, usually you need a very little effort to correct it.

- Purple: THIS is a funny one. when purple comes out (usually with a wildcard character like "%1$s") the translator often goes TOTALLY random and write some idiocy. rewrite the text from scratch.

Once you've managed to translate everything, and if you're sure to have completed everything, click (if you want) on "Complete" in the upper right corner of the page, and then we need to download our work, to do that, click on "File" (upper left) and then "Download". Save the .xml file in your values-xx folder, and check one last time with Notepad++ the number of lines, the spaces and the format in general, at this point we're ready for the final part!

Part 4 - Repack everything!

Now the situation is this: you have the "project" folder containing all the decompiled apks folders, with the "values-xx" directory in it, we now have to recompile everything and put apks into the ROM. Let's see how:

- Open APKM/APKMT and select the project you want to recompile

- digit 11(APKM/APKMT)

- Look if you got errors, if yes, look into the log 20(APKM) or 23(APKMT) and see what the problem is, if you look carefully you will identify where is your error log, probably it's a messed tag, or something easy to resolve, correct the issue, and go ahead, restarting from digiting 11 (Compile)

- Press Y and enter

- Press Y and enter (yes, 2 times)

- Now wait for APKM/APKMT to stop spitting lines out and it'll tell you something. Read it, but the substance is: go in the APKM/APKMT folder, look for a "keep" directory, delete the "resource.arsc" file, get back on the APKM/APKMT prompt window, and press a key.

- Once everything is completed, you now have a file called unsignedframework-res.apk (or unsigned*nameoftheapkyouhavecompiled*.apk)

- The next, is the point i still didn't get, but it works...maybe XDA guys can explain better this...anyway, we now have to sign apks...i saw that this shouldn't be necessary, but otherwise i've got a lot of errors and force closes and stuff like that...soooo, at least for D3, sign it!

- We have 2 choice for signing...if you have only a few apks to decompile, you can just select the project and digit 12(APKM) or 13(APKMT) and sign it but if you have translated a whole ROM and you want to sign all the apks at once, create, if not exists, a folder called "place-apk-here-for-signing" and put all the unsigned apks there...you now have to digit 16(APKM) or 18(APKMT) and the apks will all be signed automatically.

- Rename the apks removing the "signed" part from the name.

We're now ready to pack the ROM: i usually create a "system" folder somewhere else that i will put directly into the ROM's zip, but you can do it by hand (boring). I'll show you my method for now:

- create a "system" directory

- inside it, create a "framework" and an "app" folder

- put into the framework one, all the frameworks (easy, huh?) and into the app directory, put all the other apks.

- open the ROM zip and drag and drop the system folder into the ROM in order to overwrite the existing one.

Our freshly translated ROM is ready to be flashed and brick or burn your phone! (ok, no, this is not true...maybe...)

Anyway, download the zip on your phone and flash it with the recovery you want.

I RECOMMEND TO DO THE FIRST TEST ON A SAFESTRAP, AND ONLY IF YOU'RE SURE THE ROM IS SAFE, INSTALL IT ONTO YOUR MAIN SLOT! I'VE WARNED YOU!

Part 5 - Polish your creation!

When the ROM is installed, and if it boot correctly, First install MoreLocale2 or other similar apps, and add, your language, with the correct ISO codes and look around to see if something is untranslated...if yes, go back, to APKM/APKMT and find the apk you need to modify, translate, repack, flash the ROM and again :) until you've got a perfectly translated ROM!

The tutorial is ended, i hope you liked it, and if you want to correct, critic, ask, or anything, just tell me!

Tips: If you want to avoid the MoreLocale stuff, you can edit the build.prop, into the folder "system" of the ROM you'll find this file, open it with Notepad++ and look for these lines:

ro.product.locale.language=xx

ro.product.locale.region=YY

You have to put here your ISO language code, but i noticed that on D3 it doesn't always works...so, try but i don't guarantee success.

If i remember something, i'll integrate the post ;)

Coming Soon:

Screenshots!

Corrections!