यदि आप अपने अनुवादकों के लिए बहुत अधिक भ्रम से बचना चाहते हैं, तो मैं स्ट्रिंग्स में सिर्फ एक प्लेसहोल्डर रखने का एक तरीका लेकर आया हूं, जिसे कोड में संभाला जाएगा।
तो, माना जाता है कि यह तार में है:
<string name="test">
<![CDATA[
We found %1$s items]]>
</string>
और आप चाहते हैं कि प्लेसहोल्डर टेक्स्ट का अलग आकार और रंग हो, आप इसका उपयोग कर सकते हैं:
val textToPutAsPlaceHolder = "123"
val formattedStr = getString(R.string.test, "$textToPutAsPlaceHolder<bc/>")
val placeHolderTextSize = resources.getDimensionPixelSize(R.dimen.some_text_size)
val placeHolderTextColor = ContextCompat.getColor(this, R.color.design_default_color_primary_dark)
val textToShow = HtmlCompat.fromHtml(formattedStr, HtmlCompat.FROM_HTML_MODE_LEGACY, null, object : Html.TagHandler {
var start = 0
override fun handleTag(opening: Boolean, tag: String, output: Editable, xmlReader: XMLReader) {
when (tag) {
"bc" -> if (!opening) start = output.length - textToPutAsPlaceHolder.length
"html" -> if (!opening) {
output.setSpan(AbsoluteSizeSpan(placeHolderTextSize), start, start + textToPutAsPlaceHolder.length, 0)
output.setSpan(ForegroundColorSpan(placeHolderTextColor), start, start + textToPutAsPlaceHolder.length, 0)
}
}
}
})
textView.text = textToShow
और परिणाम: