Android: Resolving Issue with Formatted Attribute while Translating String Resources

Take a look at the below string

<string name="notifications_talk_page_message" formatted="false">%s left a message on your %s page</string>

The string contains a format parameter, %s which can be replaced by a string value. This innocent looking string resource was a part of a pull request that i submitted to Wikimedia Commons Android app. The changes were tested and finally merged to master. With new string resources in master, translate wiki begin its magic of translating it to over 100 languages that the app currently supports.

The pipeline is setup to auto merge changes from translate wiki to master. The translation of the above string literal led to compilation errors. The problem is that apparently translatewiki.net cannot preserve the formatted=”false” attribute.

However, even if translatewiki.net supports it, they should be replaced with positional arguments anyway? I think sometimes translation may break the ordering of arguments. Checkout argument_index in https://developer.android.com/reference/java/util/Formatter.html by ‘positional arguments’.

The fix for this issue was to do away with the formatted parameter and use positional arguments.

<string name="notifications_talk_page_message">%1$s left a message on your %2$s page</string>

This change had to be made in all the string resource files to fix the issue.


Written on February 13, 2018 by Vivek Maskara.

Originally published on Medium

Vivek Maskara
Vivek Maskara
SDE @ Remitly

SDE @ Remitly | Graduated from MS CS @ ASU | Ex-Morgan, Amazon, Zeta

Related