1

@StringDef отлично подходит для замены Enum.Как использовать @StringDef в приложении с i18n

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

Но что делать, если мое приложение должно поддерживать английский, французский и китайский?

Таким образом, стандартом могут быть «Стандарт», «Норм» и «标准» в трех разных странах. В этом случае стандарту и миниму может понадобиться контекст для получения реальной стоимости.

Как мы можем использовать @StringDef в приложении с i18n.

ответ

1

Нет готового решения.

Рекомендуемый способ для хранения локализованных строковых ресурсов в различных каталогах (res/values-XX/strings.xml, где находится XXen, fr и т.д.).

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

При таком подходе вам необходимо использовать идентификатор строки, чтобы получить локализованную строку. Вы можете попробовать следующее:

  1. Используйте идентификаторы строк вместо:

    @IntDef({R.string.standard, R.string.mini}) 
    
  2. Используйте некоторый помощник, чтобы соответствовать @StringDef «s строки локализованной строки resorce.

  3. Использовать перечисления.
+0

О решении 2, я плохо понимаю. Не могли бы вы объяснить это больше? И первое решение отлично! – songzhw

+0

# 2 - Я могу написать некоторую утилиту 'StringHelper' для соответствия элементам' @ StringDef' ресурсам R.string.xxx', используя 'switch' или что-то подобное. Это не предпочтительный, но возможный вариант :) –