`
su1216
  • 浏览: 670425 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
深入入门正则表达式(jav...
浏览量:71872
E60283d7-4822-3dfb-9de4-f2377e30189c
android手机的安全问...
浏览量:128680
社区版块
存档分类
最新评论

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

阅读更多

有时候我们会遇到这样一种情况:

一些字符串资源要从原始项目A移植到现在我们开发的项目B中

比如移植app名字

<string name="app_label">Calendar</string>

我们需要做的是:

在新项目对应的语言资源中查找是否有app_label这个资源。

    有:则查看新旧资源是否一致

        一致:则什么也不做

        不一致:删除旧的,添加新的资源

    没有:添加新的资源

 

工作内容很简单,但是,语言种类可能达到五六十种,移植的资源往往也不是一两个,所以工作量不可忽视

我觉得这种毫无技术含量的体力活还是交给脚本处理的好,为此特意写了个工具,希望能帮助大家提高效率

使用方法:

1.先将需要移植的资源的key统一放到一个文本中,用换行分隔。

比如:

$ 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

#!/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"
#确保list文件中含有\n,如果已经含有\n,那么不会再增加
sed -i -e '$a\' "$string_list"

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

 

转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/

1
0
分享到:
评论

相关推荐

    BASH 中的字符串处理

    字符串处理是BASH编程中的重要组成部分,它允许用户对文本数据进行操作,包括截取、替换、比较等。这篇博文将深入探讨BASH中的字符串处理技巧。 一、字符串定义与赋值 在BASH中,字符串可以被赋值给变量,常见的...

    java 文本字符串替换工具

    在Java编程语言中,文本字符串替换是一个常见的任务,特别是在处理大量文本数据时。这个"java 文本字符串替换工具"很可能是为了帮助开发者高效地搜索和替换文件中的特定文本内容。让我们详细了解一下如何在Java中...

    bash过滤字符串的命令介绍

    在Linux系统中,Bash shell提供了一系列强大的命令来处理字符串,这些命令包括grep、sed、cut等。本文将详细介绍这些命令的功能、参数及其使用方法。 首先,让我们来看看grep命令。grep全称为Global Regular ...

    bash写的字符串常用函数

    bash写的字符串常用函数,这个可以看看。资源分就免了

    Base64文本字符串解码编码双向解析转换工具

    - 可能提供批量处理功能,一次性处理多个Base64编码的字符串。 - 可能有错误检查机制,防止非Base64格式的字符串输入,或在解码过程中遇到错误。 - 显示原始文本和编码后的Base64字符串的比较,便于用户验证转换的...

    Android,Bash,终端,Term

    Bash是GNU项目的一部分,是Linux和类Unix系统中最常用的Shell,它提供了更多的命令行工具和脚本编程功能。本文将深入探讨如何在Android设备上安装并使用Bash,以及它对终端和Term应用的影响。 首先,要在Android...

    linux 字符串操作

    获取字符串中的特定字符或子字符串的方法有很多。 1. **使用 `tr -cd` 和 `wc -c`:** ```bash $ echo $var | tr -cd 'g' | wc -c 2 ``` 此命令组合用于统计字符串中出现的指定字符 `g` 的次数。 2. **使用 `...

    命令行下在文件中查找并替换匹配的字符串的工具

    当我们需要在大量文本文件中快速查找并替换特定字符串时,`sed`(Stream Editor)就是一个非常强大的工具。`sed` 是一个流编辑器,它可以从输入流(通常是文件或管道)中读取数据,对数据进行处理,然后将处理后的...

    shell中字符串截取

    ### Shell中字符串截取 在Shell脚本编程中,对字符串进行截取是常见的操作之一。通过对字符串的处理,可以实现各种数据解析、文件名提取等实用功能。本文将详细介绍几种常用的Shell中字符串截取方法及其应用场景。 ...

    deline一个ES6字符串标记能够删除多行字符串中多余的换行

    虽然JavaScript原生提供了很多字符串处理方法,但deline这样的库提供了特定场景下的优化解决方案。它简化了处理多行字符串的流程,使开发者能更加专注于应用的核心逻辑,而不是琐碎的字符串清理工作。 总的来说,...

    Shell脚本中计算字符串长度的5种方法

    ### Shell脚本中计算字符串长度的五种方法...除了上述方法外,Shell脚本中还可能存在其他获取字符串长度的方式,例如使用 `sed`、`cut` 等工具结合起来实现。欢迎大家在评论区分享更多实用的技巧和建议,共同学习进步。

    shell 字符串操作

    以上介绍了Shell中处理字符串的各种方法,从简单的值判断到复杂的字符串操作,这些技巧对于编写高效且功能丰富的脚本至关重要。熟练掌握这些操作可以帮助开发者更灵活地控制数据流和处理逻辑,从而提高脚本的质量和...

    C语言合并多个char *类型的字符串

    在C语言中,合并多个`char *`类型的字符串是一项常见的任务,这通常涉及到字符串操作和内存管理。在给定的场景中,`main.c`文件是测试程序,它调用了`tools.h`头文件中定义的`MultiCombine`函数,这个函数的目的是将...

    shell 批量处理 字符串指令行

    在IT行业中,shell脚本是一种强大的工具,尤其在批量处理任务方面显得尤为高效。通过编写shell脚本,我们可以实现对字符串进行各种操作,自动化执行一系列命令行指令,从而提高工作效率。这篇博客“shell批量处理...

    Bash字符串常用操作

    本文档详细介绍了Bash字符串操作中的参数扩展功能,该功能允许用户根据变量的值或是否存在来动态地替换变量值。参数扩展是Bash编程中常用的技术之一,尤其适用于编写脚本时变量处理。以下是根据文档内容总结的各个...

    Android平台下gnu bash的编译

    在Android平台上,GNU Bash的编译是一个相对复杂的过程,因为Android原生系统主要依赖于 BusyBox 中的ash或sh shell,这些shell相比GNU Bash功能较为有限。GNU Bash是一款功能丰富的命令行解释器,广泛用于Linux和...

    字符串查找替换(批量任何文件)

    本主题将深入探讨如何在批量任何文件中进行字符串查找替换,这涉及到多个技术层面,包括基本概念、实现方法以及相关的工具和编程语言应用。 一、基本概念 1. 字符串:在计算机科学中,字符串是由一个或多个字符...

    Pbjson字符串生成与解析

    在IT行业中,序列化和反序列化是数据传输和存储的关键环节,而PBJson就是一种针对protobuf(Protocol Buffers)格式的数据与Json格式...在实际项目中,我们需要根据需求选择合适的工具,以确保数据转换的准确性和效率。

    shell中字符串处理方

    ### Shell中的字符串处理方法 #### 引言 在Shell编程中,字符串处理是一项重要的技能,尤其是在Linux环境下。本文将深入探讨几种高效的字符串处理技术,并通过实际示例展示这些技巧的应用场景。 #### 字符串截断 ...

    shell中字符串、数值的比较.rar_shell中字符串、数值的比较

    在Linux或Unix环境中,Shell脚本是自动化任务和系统管理的强大工具。对于初学者和经验丰富的管理员来说,理解和掌握在Shell脚本中如何比较字符串和数值都是至关重要的技能。本教程将深入探讨这一主题,帮助你更好地...

Global site tag (gtag.js) - Google Analytics