2011-11-06 70 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」變量值。

相關問題