need help to translate ICS MIUI ROM into other language

Discussion in 'Porting Advice/Help' started by alain57, Feb 15, 2012.

  1. alain57

    alain57Members

    Dec 9, 2010
    112
    35
    38
    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
    
     

Share Our Site