【问题标题】:Android: is there an easy way to find all the Strings in my project?Android:有没有一种简单的方法可以在我的项目中找到所有字符串?
【发布时间】:2011-11-06 03:15:13
【问题描述】:

我想扫描我的 Android 项目以查找所有硬编码的字符串,以便我可以本地化项目,将字符串放在 strings.xml 中。我在 Eclipse 中看到了“外部化字符串...”的选项,但它并不特定于 Android。

我知道you can refactor individual strings,但我想一次重构所有字符串。我有大量文件,我试图避免手动浏览每个文件。

【问题讨论】:

    标签: android string localization


    【解决方案1】:

    我会在项目的根目录中打开一个终端窗口(如果您在 Windows 上,则为 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 中,这也可以编写脚本,但可能需要更多修改。

    【讨论】:

    • 您也可以在 Eclipse 中执行此操作。选择搜索->文件。然后在文本字段中粘贴“[^”\r\n]*”并确保选中“正则表达式”。搜索结果这样组织更好。
    • rplankenhorn 的建议在 androidstudio 中也很有效。 cmd+shft+f 并选择“正则表达式”
    • 我得到了这个:zsh:找不到匹配项:--include=*.java
    • @RobertYiJiang 我猜这与在 zsh 中使用通配符有关,看看这里superuser.com/questions/584249/…
    • 我在我的 Mac 上得到了它: grep -r --include=".java" '"[^"\r\n]"' ./src > 。 /strings.txt
    【解决方案2】:

    我自己也在寻找这个。有一个很好的方法:

    右键单击“src”目录 -> Source -> Externalize Strings

    这将找到所有非外部化字符串并让您将它们外部化。

    希望这会有所帮助:)

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

    【讨论】:

      【解决方案3】:

      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”变量中获得所有字符串代码及其值。

      【讨论】:

        【解决方案4】:

        只需配置 eclipse 以显示代码中的所有字符串: Configuring eclipse to complain for hard coded strings for android xml preferences

        并用eclipse重构一一替换

        【讨论】:

          【解决方案5】:

          注意:此解决方案可以帮助您解决一半的问题 - 查找所有硬编码字符串。您仍然需要自己进行实际的重构,因为您仍然需要命名所有提取的字符串。


          编辑:

          这是更短更好的答案:

          1. 菜单 -> 分析 -> 按名称运行检查...(如果您觉得灵活,甚至还有一个快捷方式)
          2. 键入“硬编码文本”,选择范围并运行。

          您可以运行自定义 lint 检查 - 仅查找布局文件中的硬编码文本:

          1. 菜单 -> 分析 -> 检查代码
          2. 选择所需的范围(例如布局)

          3. 在“检查配置文件”下,选择一个新的自定义配置文件 (...)

          4. 复制现有配置文件,并取消选中除“HardcodedText”之外的所有检查

          1. 运行此检查,所有硬编码字符串都将方便地收集到一个列表中。

          【讨论】:

            【解决方案6】:

            我相信 Eclipse 的 Google CodePro 插件有这个功能某处

            【讨论】:

            • 我没有发现任何东西可以帮助解决这个问题
            猜你喜欢
            • 1970-01-01
            • 2011-06-08
            • 1970-01-01
            • 2021-11-11
            • 1970-01-01
            • 2016-11-01
            • 1970-01-01
            • 2011-04-14
            • 2010-12-05
            相关资源
            最近更新 更多