IntelliJ IDEA硬编码字符串
IntelliJ IDEA 提取硬编码字符串文字
启用代码检查以突出显示硬编码字符串文字后,您可以继续将这些文字解压缩到属性文件中。为此,IntelliJ IDEA 提供特殊意图行为 i18nize 硬编码字符串文本。
本节考虑两种访问资源包的可能方法:
- 使用 java.util.ResourceBundle 实用程序类
- 使用自定义实用工具类
使用 java.util.ResourceBundle 提取硬编码字符串文字
tip:您可以跳过此步骤,并在 I18nize 硬编码字符串对话框中立即指定所需的资源包表达式。
-
指定将用于存储提取的文字的资源包。特别地,您可以将以下语句添加到您的源代码中:
private static ResourceBundle <field name> = getBundle("<bundle name>");
例如:
private static ResourceBundle myBundle = getBundle("com.intellij.fontChooser.FontChooser");
- 单击突出显示的字符串,按 Alt+Enter,并在意图行为列表中选择 i18nize 硬编码字符串:
- 在"I18nize 硬编码字符串"对话框中指定目标属性文件、属性键和值以及资源包表达式。
如果 ResourceBundle 字段已在源代码中声明(如步骤1所示),则 IntelliJ IDEA 在默认情况下建议它的名称。如果您尚未在源代码中声明此字段,您仍然可以在对话框中立即定义所需的表达式。为此,请在 "资源包表达式" 字段中输入 ResourceBundle 类型的有效表达式。
注意:基本代码完成在该字段中工作。键入类名,并按下 Ctrl+Space ,选择方法:
从建议列表中选择所需的方法,然后再按 Ctrl+Space 一次以填写括号:
之后,在引号中键入包和资源包名称:
-
点击“确定”。具有硬编码字符串文字的行被替换。例如,如果源代码中已经声明了资源包,则将创建以下行:
如果在对话框中定义了资源包,结果将是:
使用自定义资源包类提取字符串文字
- 请确保 IntelliJ IDEA 安装下的
redist/annotations.jar
归档文件被添加到模块依赖关系中。 - 在项目中创建一个新类,并键入以下代码:
import org.jetbrains.annotations.PropertyKey; import org.jetbrains.annotations.NonNls; import java.util.ResourceBundle; import java.text.MessageFormat; public class I18nSupport { @NonNls private static final ResourceBundle bundle = ResourceBundle.getBundle ("com.intellij.FontChooser"); public static String i18n_str (@PropertyKey(resourceBundle ="com.intellij.FontChooser") String key,Object... params){ String value =bundle.getString(key); if (params.length >0) return MessageFormat.format(value, params); return value; } }
- 在包含硬编码字符串的类中,单击突出显示的字符串,按 Alt+Enter,并在意图行为列表中选择 i18nize 硬编码字符串文本。该 I18n-ize 字符串文字对话框显示缺少资源包表达式:
-
点击 "编辑 i18n 模板链接"。在 "文件模板" 对话框中,将 I18nized 表达式更改为指向自定义资源包类的方法:
这个更改是全局性的,并且会影响所有项目!
点击“确定”,保存更新的模板并关闭对话框。
- 在"I18n-ize 字符串文本" 对话框的 "预览" 部分中,请参阅建议的替换,然后单击 "确定"。源代码更改:
隐藏硬编码字符串
有时你可能想隐藏硬编码的文字。要这样做,使用不需要国际化注释。
- 按 Alt+Enter 显示字符串文字的意图行为:
- 从"建议"列表中选择注释为 @NonNls。
- 在打开的“选择路径”对话框中,指定
annotations.xml
文件将被存储的位置 。
或者,您可以添加 @NonNls 注释:
如果您选中该复选框以后不显示此对话框,则您仍然可以在“设置”对话框中选择注释样式(代码样式 |Java 代码生成)。
识别硬编码字符串
您的源代码可以包含您想要识别的硬编码字符串,并进一步提取到属性。要在编辑器中突出显示硬编码的文字,请使用国际化代码检查。
更多建议: