Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android多語言項目中字符串的移植(bash工具)

android多語言項目中字符串的移植(bash工具)

編輯:關於Android編程

有時候我們會遇到這樣一種情況: 一些字符串資源要從原始項目A移植到現在我們開發的項目B中 比如移植app名字 [xml]   <string name="app_label">Calendar</string>   我們需要做的是: 在新項目對應的語言資源中查找是否有app_label這個資源。     有:則查看新舊資源是否一致         一致:則什麼也不做         不一致:刪除舊的,添加新的資源     沒有:添加新的資源   工作內容很簡單,但是,語言種類可能達到五六十種,移植的資源往往也不是一兩個,所以工作量不可忽視 我覺得這種毫無技術含量的體力活還是交給腳本處理的好,為此特意寫了個工具,希望能幫助大家提高效率 使用方法: 1.先將需要移植的資源的key統一放到一個文本中,用換行分隔。 比如: [plain]  $ cat /home/su1216/string_list    app_name   button_name   company_name   ……   注意:string_list這個文件如果是在windows下制作的,需要先將它轉換成unix格式,方法如下: 用vi打開腳本,修改文件格式,命令如下 :set ff=unix 然後保存退出 2.然後執行下面命令即可: merge_strings android_project_src android_project_dest /home/su1216/string_list [plain]   #!/bin/bash   #example   #merge_strings project_src/packages/apps/Settings project_dest/packages/apps/Settings string_list   src_dir="$1"   dest_dir="$2"   string_list="$3"      regex_with_all_string=""   while read line; do       regex_with_all_string=$regex_with_all_string"name=\"$line\"|"   done < "$string_list"   regex_with_all_string=${regex_with_all_string%|*}   result_list=`grep -Pr "$regex_with_all_string" $src_dir/res/values*/*.xml`   #echo "grep -Pr '"$regex_with_all_string"' $src_dir/res/values*/*.xml"   if [ -f "results.txt" ]; then       echo "rm results.txt first please."       exit   fi   touch results.txt      IFS_OLD=$IFS   IFS=$'\n'   for line in $result_list; do       echo "${line#*res/}" >> results.txt   done   IFS=$IFS_OLD      make_new_xml_file() {       local country="$1"       local folder=${country%/*}       if [ ! -d "$dest_dir/res/$folder" ]; then           mkdir "$dest_dir/res/$folder"       fi       local xml_path="$dest_dir/res/$country"       touch "$xml_path"       echo '<?xml version="1.0" encoding="utf-8"?>' > "$xml_path" #line1       echo '<resources>' >> "$xml_path" #line2       echo '</resources>' >> "$xml_path" #line3   }      insert_line() {   #</resources> 插入到這行之前       local string_file="$1"       local line="$2"       local trim_line=`echo $2 | grep -Po '\S.*\S'`       local name=`echo $trim_line | grep -Po "(?<=name=\").*?(?=\")"`       local line_no=`grep -n "\b$name\b" "$string_file" | grep -Po "^\d+"`       #a.檢查是否有這個字段       if [ "$line_no" != "" ]; then           #echo "line_no=$line_no" "$string_file"           local result=`grep -n "$trim_line" "$string_file"`           #b.檢查是否能完整匹配。如果不能,則刪除舊的,添加新的           if [ "$result" = "" ]; then               echo "sed command :""$line_no""d"               sed -i "$line_no""d" "$string_file"               sed -i '/<\/resources>/i\'"$line" "$string_file"           fi       else           sed -i '/<\/resources>/i\'"$line" "$string_file"       fi   }      #MERGE   while read line; do       country_new=`echo "$line" | grep -Po "^.*?\.xml"`       string_file="$dest_dir/res/$country_new"       line=`echo "$line" | grep -Po "(?<=:).*"`       if [ ! -f "$string_file" ]; then           make_new_xml_file "$country_new"       fi       #echo "$line"       insert_line "$string_file" "$line"   done < results.txt    
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved