I have some localized string formats with format arguments in different orders. For example I have the phrase synced 12 files on 6/29/2018 which is to be displayed to the user. Where the 12 and the 6/29/2018 are just placeholders. So the string in my resources looks like
<string name="n_synced_on_date" formatted="false">"%d files synced on %s"</string>
The trouble is some of the translators would like to write it
<string name="n_synced_on_date" formatted="false">"bla %s bla bla bla %d bla"</string>
So when I run my code
text = String.format(getString(R.string.n_synced_on_date), numberOfFiles, dateString)
It will crash for any language that reverses the format arguments.
I was hoping that I could use Kotlin string templates so my resources could be defined as
<string name="n_synced_on_date" formatted="false">"$NUMBER files synced on $DATESTRING"</string>
this would allow translators to put the words in any order but according to this link How to apply template to a string returned from a function this is not possible.
My current lousy approach is to catch the number format exception and try the string format with the arguments reversed. I was hoping to find a nice clean solution.