硬编码字符串文字
最后修改时间:2023 年 8 月 23 日所需插件:资源包编辑器
如果您的源代码包含硬编码的字符串文字,您可以启用国际化代码检查以突出显示它们。然后,您可以将这些字符串提取到属性文件中进行本地化,或者如果不需要本地化,则忽略它们。
启用硬编码字符串文字的突出显示
打开“设置”对话框,展开“编辑器”并单击“检查”。CtrlAlt0S
选择所需的配置文件,然后找到Java下的“国际化”节点。
启用硬编码字符串检查以在编辑器中突出显示硬编码字符串文字。
应用更改并关闭对话框。
现在编辑器将突出显示硬编码的字符串文字,如下面的屏幕截图所示:
笔记
您可以配置此检查的严重性,并准确指定在哪些情况下应识别硬编码字符串。例如,您可以选择跳过方法的内容
toString()
或不带字母字符的文字。
提取硬编码字符串文字
IntelliJ IDEA 提供了一种特殊意图操作i18nize 硬编码字符串文字,用于将字符串文字提取到属性文件中。您可以使用java.util.ResourceBundle 类或自定义资源包类来访问资源包。
在源代码中,按以下形式指定将用于存储提取的文字的资源包:
private static ResourceBundle <field name> = ResourceBundle.getBundle("<bundle name>");
例如:
private static ResourceBundle myBundle = ResourceBundle.getBundle("awesomeBundle");
单击突出显示的字符串,按并选择i18nize 硬编码字符串文字。AltEnter
在“I18nize 硬编码字符串文字”对话框中,指定目标属性文件、属性的键和值以及资源包表达式。
如果该
ResourceBundle
字段已在源代码中声明,IntelliJ IDEA 默认会建议其名称。如果您尚未在源代码中声明此字段,您仍然可以立即在对话框中定义所需的表达式。为此,请ResourceBundle
在资源包表达式字段中输入该类型的有效表达式。单击“确定”。包含硬编码字符串文字的行将被替换。
如果资源包已在源代码中声明:
System.out.println(myBundle.getString("hello.world"));
如果资源包已在对话框中定义:
System.out.println(ResourceBundle.getBundle("awesomeBundle").getString("hello.world"));
笔记
您可以跳过此步骤并在I18nize 硬编码字符串文字对话框中指定所需的资源包表达式。
提示
指定资源包表达式时,您可以使用基本代码完成。输入类名称并在句点后按以选择方法。CtrlSpace
确保IntelliJ IDEA 安装下的redist/annotations.jar存档已添加到模块依赖项中。
在项目中创建一个新的 Java 类,并粘贴以下代码:
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; } }
在包含硬编码文字的类中,单击突出显示的字符串,按,然后在意图操作列表中选择i18nize 硬编码字符串文字。I18nize硬编码字符串对话框打开时没有有效的资源包表达式。AltEnter
单击编辑 i18n 模板。在“文件模板”对话框中,将I18nized 表达式更改为指向自定义资源包类的方法。
单击“确定”保存更新的模板并关闭对话框。
在I18nize 硬编码字符串对话框的预览部分中,验证建议的替换,然后单击确定。源代码也相应改变:
System.out.println(I18nSupport.i18n_str("hello.world"));
警告
此更改是全局性的,影响所有项目!
忽略硬编码的字符串文字
如果要忽略硬编码字符串文字,请使用不需要国际化注释。
按显示字符串文字的意图操作。AltEnter
从操作列表中选择注释为@NonNls 。
指定您要存储annotations.xml文件的位置。
感谢您的反馈意见!