2011-11-06 71 views
13

我想扫描我的Android项目中的所有硬编码字符串,以便我可以本地化项目,将字符串放入strings.xml中。我在Eclipse中看到了一个选项“Externalize Strings ...”,但它并不特定于Android。Android:有没有一种简单的方法来查找我的项目中的所有字符串?

我知道you can refactor individual strings但我想重新构造所有的字符串。我有很多文件,而且我正在努力避免手动通过每一个文件。

回答

12

我只是在项目的根目录下打开一个终端窗口(如果你在窗口中使用putty)。然后,您可以运行类似以下内容:

grep -r --include=*.java '="[^"\r\n]*"' ./* --to look for something like this String test="text";, a string with ="" 
or 
grep -r --include=*.java '"[^"\r\n]*"' ./* -- to look for any string, anything enclosed in "" 

当然接下来的部分是真正替代串入的strings.xml,这可能是脚本出来为好,但可能需要更多的修修补补。

+0

似乎现在是唯一的解决方案。 –

+3

你也可以在Eclipse中做到这一点。选择搜索 - >文件。然后在文本框中粘贴“[^”\ r \ n] *“,并确保选中了”正则表达式“,搜索结果按照这种方式组织得更好。 – rplankenhorn

+1

rplankenhorn的建议也适用于androidstudio。并选择“正则表达式” – accordionfolder

-1

相信Google CodePro插件适用于Eclipse在那里此功能的地方

+0

没有任何内容可以帮助我解决这个问题 – shem

7

我正在寻找这个自己。有这样做的一个很好的方式:

在“src”目录右键 - >来源 - >外化弦

这将找到的所有非外部化的字符串,让你外部化它们。

希望这将有助于:)

编辑:
这不一样的Android - > Android的提取字符串。 但它可以帮助您找到所有非外部化字符串。然后,你必须执行每个字符串:
Ctrl + 1 - > Android - >提取Android字符串。

1

Field[] fields = R.string.class.getDeclaredFields(); // or Field[] fields = R.string.class.getFields(); String str = ""; for (int i =0; i < fields.length; i++) { int resId = getResources().getIdentifier(fields[i].getName(), "string", getPackageName()); str += fields[i].getName() + " = "; if (resId != 0) { str += getResources().getString(resId); } str += "\n"; }

你会得到字符串的所有代码与它的“STR”变量值。

相关问题