android工程字符串多语言翻译遗漏查找工具
来源:互联网 发布:cnnic管理的通用域名 编辑:程序博客网 时间:2024/05/21 08:01
android的同学们一定都晓得,每个工程都有多种语言字符串。
当我们需要检测翻译是否完整的时候,一个个字符串对比效率太低,为此给出小工具源码如下:
meld_string.c
#include<stdio.h>#include<string.h>#define LINE_BUFFER_SIZE 300#define NAME_BUFFER_SIZE 100void get_string_name(char* line, char* name);int check_args(int argc, char** argv, char* ret);int compared_file_with_string(FILE* file, char* string_name);const char* string_line_head = "<string name=";const char* null = 0l;int main(int argc, char** argv){char* base_filename = NULL;char* compared_filename = NULL;char* result_filename = NULL;FILE *base_file;FILE *compared_file;FILE *result_file;char buffer[LINE_BUFFER_SIZE];char name[NAME_BUFFER_SIZE];int result = 0;//命令行输入参数检测if(argc <= 1){printf("\nPlease input files' name and retry!\n\n");return 0;}if(argc == 3){result_filename = "result";} else if(argc == 4){result_filename = argv[3];} else{printf("\nPlease input args as ./exc base_file_name compared_file_name [result_file_name] and retry!\n\n");return 0;}base_filename = argv[1];compared_filename = argv[2];//printf("base filename is: %s\n", base_filename);if((base_file = fopen(base_filename, "r")) == NULL){printf("open %s error!!\n", base_filename); return 0;}if((compared_file = fopen(compared_filename, "r")) == NULL){printf("open %s error!!\n", compared_filename); return 0;}if((result_file = fopen(result_filename, "w+")) == NULL){printf("open %s error!!\n", result_filename); return 0;}while(!feof(base_file)){buffer[0] = '\0';fgets(buffer, sizeof(buffer), base_file);//printf("read line: %s", buffer);if(0 == line_with_string_line_head(buffer)){get_string_name(buffer, name);//printf("---------base file name = %s\n", name);result = compared_file_with_string(compared_file, name);if(result == 0){//对比文件中也包含这个字符串} else{//对比文件中不包含这个字符串//printf("%s\n", buffer);fputs(buffer, result_file);}rewind(compared_file);}}fclose(base_file);fclose(compared_file);fclose(result_file);printf("\nCompleted and printed to file named \"%s\" !!!\n\n", result_filename);return 0;}/** * 命令行输入参数检测 * 返回0:参数合法 * 返回其他:不合法 **/int check_args(int argc, char** argv, char *result){//printf("meld_string, the number of arguments == %d\n", argc);return 0;}/** * 获得字符串的名字 **/void get_string_name(char* line, char* name){char* h = line;char *start = NULL, *end = NULL;int length = 0;while(*(h) != '\0'){if(*h == '\"'){if(start == NULL){start = h + 1;} else if(end == NULL){end = h - 1;break;}}h++;}if(start != NULL && end != NULL){length = (int)(end - start) + 1;strncpy(name, start, length);name[length] = '\0'; //very importent} else{return;}}/** * 判断当前行是否含有"<string name=" * 如果含有则返回0 **/int line_with_string_line_head(const char* line){const char* start = line;int ret = -1;while(*(start) != '\0'){if(*start == '<'){ret = strncmp(start, string_line_head, 12);return ret;}start++;}return ret;}/** * 判断要比较的文件是否有此字符串名字 * 返回 0:有此name * 返回 其他:没有此name **/int compared_file_with_string(FILE* file, char* string_name){char buffer[LINE_BUFFER_SIZE];char name[NAME_BUFFER_SIZE];int ret = -1;while(!feof(file)){buffer[0] = '\0';fgets(buffer, sizeof(buffer), file);//printf("read line: %s", buffer);if(0 == line_with_string_line_head(buffer)){get_string_name(buffer, name);//printf("compared file name = %s\n", name);ret = strcmp(string_name, name);//printf("compare ret = %d\n", ret);if(ret == 0) return ret;}}return ret;}
复制代码内容到meld_string.c
当然文件名也可以为其他。
之后命令行执行 gcc meld_string.c
会生成a.out可执行文件
命令行执行a.out base_file_name compared_file_name result_file_name
或者a.out base_file_name compared_file_name
就会在指定路径下生成对应的对比结果文件。
注释:
其中,base_file_name: 我们认为完整的字符串文件(android工程里的string.xml)
compared_file_name:跟base_file_name相比的文件(也是android工程里的string.xml)
result_file_name:指定生成比较结果(即base_file_name中含有,但是compared_file_name中不含有的字符串们)的文件名
在不指定的情况下,默认文件名为result.
- android工程字符串多语言翻译遗漏查找工具
- Android string.xml多语言翻译工具
- JAVA语言遗漏
- 【C语言】查找字符串
- C语言查找字符串
- QT工具___语言翻译
- Android翻译多国语言字符串注意事项
- Android 多语言翻译的自动拷贝
- android 工程 快速查找分支
- C语言字符串查找函数
- C语言字符串查找位置
- C语言字符串查找替换
- android多语言项目中字符串的移植(bash工具)
- C语言实现字符串中查找字符串
- Qt语言翻译工具的使用
- Android开发工具-多国语言翻译对照表
- Android 安全机制遗漏知识点
- Android翻译多国语言字符串注意事项 01
- Qt全屏显示窗体
- 两行命令让你的win7也能当无线路由使用
- html Frame、Iframe、Frameset 的区别
- javascript固定时间操作器
- 房讯房屋租赁管理软件新版上线 专为房东朋友定制
- android工程字符串多语言翻译遗漏查找工具
- eval解析JSON中的注意点
- AddressBook UI contact 联系簿(UI) 官方demo
- paip.提升用户体验---程序异常处理
- android锁屏后wifi不活跃的解决方案
- 你不得不知道的Visual Studio 2012(2)- 全新调试功能
- 线性表的知识,插入操作
- Android 一个强大实用的版本升级demo(thread+service+Notification)
- ffmpeg常用参数一览表