need help to translate ICS MIUI ROM into other language


alain57

Members
Dec 9, 2010
117
40
Hi,

i tried to translate a MIUI for Galaxy Nexus rom (not official rom... the viciousmiui and the miui.us rom) into french
i wrote an unix script to automate the process.

What i do is quite simple:
i get a specific MIUI V4 version for my device and the same translated version for the nexus S (because the nexus S has a french version)

i decompile each apk from the french rom, an put the french files into to decompile galaxy nexus directories
i recompile each apk
and i copy the compiled resources into the origin galaxy nexus apks
and i build the new ROM

but i get a bootloop :( any ideas ?


here is my script

if there are any part of this script that isn't clear, i could try to explain them.
of course this script could also be used on other device or other translation with some changes.

Thanks in advance .

Code:
#!/bin/bash
# MIUI-FRENCH TRANSLATE SCRIPT FOR GNEX V1.0 By Alain57
BASE_DIR=$PWD
FRENCH_DIR=$BASE_DIR/french_rom
ORIGINAL_DIR=$BASE_DIR/original_rom
OUTPUT_ROM_DIR=$BASE_DIR/output_rom
OUT_DIR=$BASE_DIR/out
WORK_DIR=$BASE_DIR/workdir
ORIGIN_APK_DIR=$WORK_DIR/origin
TRANSLATION_DIR=$WORK_DIR/translation
DECODED_APK_DIR=$WORK_DIR/decoded
LOG_FILE=$BASE_DIR/log.txt
TEMP_DIR=$BASE_DIR/temp
 
# clean the log file and create the missing directories if they don't exist (for exemple on first run)
function cleanLog(){
  rm -fr $LOG_FILE
  ARRAY_DIR=( $FRENCH_DIR $ORIGINAL_DIR $OUTPUT_ROM_DIR $OUT_DIR $WORK_DIR $ORIGIN_APK_DIR $TRANSLATION_DIR $DECODED_APK_DIR $TEMP_DIR )
  echo "creating missing directoriesi if needed"
  for DIR in ${ARRAY_DIR[@]}; do
        if [ ! -d $DIR ]; then
          mkdir $DIR
        fi
  done
}
 
 
# configure apktool to use framework-res and framework-miui-res
function setFramework(){
        cd $FRENCH_DIR
        echo "<- apktool if system/framework/framework-res.apk ->" >> $LOG_FILE
        apktool if framework-res.apk >> $LOG_FILE 2>&1
        echo "<- apktool if system/framework/framework-miui-res.apk ->" >> $LOG_FILE
        apktool if framework-miui-res.apk >> $LOG_FILE 2>&1
}
 
#decompile all apk file from the english Gnex miui rom
function decompileOriginFiles(){
  cd $ORIGINAL_DIR
  COUNT_ORIGINAL_ZIP=`ls . | grep '.zip' | wc -l`
  if [ "$COUNT_ORIGINAL_ZIP" -eq "1" ]; then
         mv *.zip en.zip
         echo "unzip the original rom"
         unzip -q -o en.zip
         echo "copy the apks to the origin dir"
         cp -a system/framework/*.apk $ORIGIN_APK_DIR
         cp -a system/app/*apk $ORIGIN_APK_DIR
         cd $ORIGIN_APK_DIR
         for F in *.apk; do
          echo "decompiling origianl file $F ..." | tee -a $LOG_FILE
          apktool d $F $DECODED_APK_DIR/${F%.apk} >> $LOG_FILE 2>&1
         done
  else
         echo "there need to be ONE zip file in the original directory"
         exit
  fi
}
 
 
# decompile all apk files from the french Nexus S ROM
function decompileTranslatedFiles(){
  cd $FRENCH_DIR
  COUNT_FRENCH_ZIP=`ls . | grep '.zip' | wc -l`
  if [ "$COUNT_FRENCH_ZIP" -eq "1" ]; then
        mv *.zip fr.zip
        echo "unzip the french rom"
        unzip -q -o fr.zip
        setFramework
        echo "copy the apks to the working dir"
        cp -a system/framework/*.apk $WORK_DIR
        cp -a system/app/*.apk $WORK_DIR
        cd $WORK_DIR
        for F in *.apk; do
          echo "decompiling french file $F ..." | tee -a $LOG_FILE
          apktool d $F $TRANSLATION_DIR/${F%.apk} >> $LOG_FILE 2>&1
        done
  else
        echo "there neeed to be ONE zip file in the french directory"
        exit
  fi
}
 
 
# Delete the given directory, because it is not needed
function deleteDirectoryWithoutTranslation(){
  echo " ---> directory useless, removed"
  cd $TRANSLATION_APK_DIR
  rm -fr $1
}
 
# delete all useless data from the french apks
function cleanTranslatedFiles(){
  cd $TRANSLATION_DIR
  for d in *; do
        echo "cleaning the directory $d"
        cd $TRANSLATION_DIR/$d
        if [ -d "res" ]; then
          ls . | grep -v res | xargs -o rm -fr
          cd "res"
          CONTAINS_FRENCH_TRANSLATION=`ls .| grep '\-fr' | wc -l`
          if [ "$CONTAINS_FRENCH_TRANSLATION" -eq "0" ]; then
                deleteDirectoryWithoutTranslation $d
          else
                echo "---> transltation here, clean it"
                ls . | grep -v '\-fr\|\./\|\.\./' | xargs -o rm -fr
          fi
        else
          echo "no res directory"
          deleteDirectoryWithoutTranslation $d
        fi
        if [ ! -f $ORIGIN_APK_DIR/$d.apk ];then
          echo "directory not in original rom $d"
          deleteDirectoryWithoutTranslation $d
        fi
  done
}
 
 
# merge the decoded translation in the decoded english files
function mergeTranslations(){
  cd $DECODED_APK_DIR
  mv $TRANSLATION_DIR/* .
  cd $WORK_DIR
  rm -f *.apk
}
 
# compile new apks including french files
function compileApk(){
  cd $ORIGIN_APK_DIR
  for f in *.apk; do
        echo "compiling $f"
        echo "apktool b $DECODED_APK_DIR/${f%.apk}  $WORK_DIR/$f"
        apktool b $DECODED_APK_DIR/${f%.apk}  $WORK_DIR/$f >> $LOG_FILE 2>&1
  done
}
 
 
# delete apk in work directory and put the original apks there
function deleteWorkFileAndCopyOriginalApk(){
  cd $WORK_DIR
  rm -f *.apk
  cp -a $ORIGIN_APK_DIR/*.apk .
}
 
# put the compiled modified files in the original apk files
function finalMerge(){
  cd $DECODED_APK_DIR
  for F in *.apk; do
        echo "doing final build $F"
        cd $TEMP_DIR
        rm -fr *
        unzip -q $DECODED_DIR/$F
        ls . | grep -v 'res\|classes.dex\|resources.arsc\|\./\|\.\./' | xargs -o rm -fr
        if [ -d res ]; then
          cd res
          ls . | grep -v '\-fr\|\./\|\.\./' | xargs -o rm -fr
          HAS_FR=`ls . | grep '\-fr' | wc -l`
          if [ "$HAS_FR" -eq "0" ]; then
                cd ..
                rm -fr res
          else
                cd ..
          fi
        fi
        zip -r $WORK_DIR/$F *
  done
}
 
 
#replace the english apk files with the new french apk files, change the build.prop value and create an unsigned zip that can be flashed
function createRom(){
  cd $OUTPUT_ROM_DIR
  mv $ORIGINAL_DIR/system $ORIGINAL_DIR/boot.img $ORIGINAL_DIR/META-INF .
  mv $WORK_DIR/*.apk system/app
  mv system/app/framework*.apk system/framework
  mv system/build.prop build.prop
  sed 's/=en/=fr/g' build.prop > build1.prop
  rm -f build.prop
  sed 's/=US/=FR/g' build1.prop > system/build.prop
  rm -f build1.prop
  zip -r $BASE_DIR/new_rom.zip *
}
 
 
cleanLog
decompileTranslatedFiles
decompileOriginFiles
cleanTranslatedFiles
mergeTranslations
compileApk
deleteWorkFileAndCopyOriginalApk
finalMerge
createRom