如何在带有 i18n 的应用程序中使用 @StringDef

how to use @StringDef in an app with i18n

@StringDef 非常适合替换 Enum

@StringDef(Standard, Mini)
public @interface Type;

但是如果我的应用程序需要支持英语、法语和中文怎么办?

因此三个不同国家/地区的标准可能是 "Standard"、"Norme" 和“标准”。在那种情况下,Standard 和 Mini 可能需要上下文才能获得实际值。

我们怎么还能在带有 i18n 的应用程序中使用 @StringDef

没有开箱即用的解决方案。

推荐的方式是将本地化的字符串资源存放在不同的目录中(res/values-XX/strings.xml,其中XXenfr等)。

https://developer.android.com/guide/topics/resources/localization.html

在这种方法中,您需要使用字符串 id 来获取本地化的字符串。您可以尝试以下方法:

  1. 改用字符串的 ID:

    @IntDef({R.string.standard, R.string.mini})
    
  2. 使用一些帮助程序将 @StringDef 的字符串匹配到本地化的字符串资源。

  3. 使用枚举。