#java #android #kotlin #multilingual
#java #Android #kotlin #многоязычный
Вопрос:
Я хочу добавить многоязычную поддержку в свое приложение, используя редактор переводов Android Studio. Но он поддерживает только строки .xml. У меня есть несколько строк в классе данных, и я использую класс данных для создания ArrayList. Я действительно хочу вызвать эти строки из .xml, но я не мог понять, как это сделать.
мой класс данных:
data class Infodc (
val id: Int,
val header: String,
val image: Int,
val infoOne: String,
val infoTwo: String
)
мой список
object Constants{
fun getInfo(): ArrayList<Infodc>{
val infoList = ArrayList<Infodc>()
val inf1 = Infodc(
1, "header_str", R.drawable.image0,
"string_1", "string_2")
infoList.add(inf1)
return infoList
}
}
Я пытался R.string.string_header
header = "header_str"
, но это показывает только 10 цифр, а не саму строку.
После этого я попытался getString
, но снова потерпел неудачу.
Ответ №1:
Вы можете сделать это следующим образом:
class MainActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val infodc = Infodc(
1,
R.string.header,
R.drawable.ic_launcher_foreground,
R.string.info_one,
R.string.info_two,
this
)
Log.d("MyTag", "$infodc") // D/MyTag: Infodc(id=1, header=Header, image=2131099744, infoOne=Info One, infoTwo=Info Two)
}
}
data class Infodc(
val id: Int,
val header: String,
val image: Int,
val infoOne: String,
val infoTwo: String
)
{
constructor(
id: Int,
@StringRes header: Int,
@DrawableRes image: Int,
@StringRes infoOne: Int,
@StringRes infoTwo: Int,
context: Context
) : this(
id,
context.getString(header),
image,
context.getString(infoOne),
context.getString(infoTwo)
)
}
Теперь вы можете передать конструктору идентификатор строки и изображения, но в качестве поля класса вы получите String
Другой способ — создать класс, который содержит только идентификатор строки, а затем, когда вы захотите его использовать, используйте getString
это поле.
Комментарии:
1. Спасибо за вашу помощь, это работает. Я хочу спросить
) : this(
, это идентификатор или он исходит отcontext: Context
?2. Я не понимаю:/
: this
вызывает конструктор, и вы передаетеcontext
, чтобы иметь возможность получать строку из приложения