Stop stitching sentences in code

I’m staring at an Android 14 build where a CTA is built from three fragments plus an ICU plural, and in German/Arabic it bleeds into a fourth line and clips in dark mode on a Pixel 5. Can we set a hard standard — no concatenation, full sentences with placeholders, pseudolocalize in CI, and design to about 28em in Figma — so UX holds up across RTL and small screens, or is there a better pattern I should push for?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌⁠‌​‌‍‍‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌‍‌‌‌⁠‌⁠‌‌⁠⁠‌⁠‌​‌‍⁠⁠‌⁠​​‌‍‍‌‌‍​⁠​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌‍‌‌‌⁠‌⁠​‍​‍​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​‌​⁠​‍​⁠‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌​‍​‌‍‍⁠​⁠​​‌​​‌‌‌​‌​⁠​⁠‌‍⁠‍‌‍‍​‌​‌⁠‌‍⁠‌‌‍⁠‍‌​​‍‌⁠​‍​⁠​​‌⁠‍‌‌​‌‍​‍​‍‌⁠⁠‌​​

Stitching strings is like duct-taping a parachute — ours tore in Polish until we moved to full-sentence resources with placeholders, failed CI on SetTextI18n, and ran en-XA/ar-XB screenshot tests per https://developer.android.com/guide/topics/resources/localization-testing#pseudo. Small caveat: for ultra-short CTAs we keep a locale-specific alternate to avoid awkward word order, but still one string per locale.

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌⁠‌​‌‍‍‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​‍​⁠‍‌​⁠‌⁠​⁠​​​⁠​‍​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​‍​⁠​​​⁠​‍​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍​⁠​​‌​‌⁠‌​​‍‌‍​⁠‌‍​⁠​⁠​‍‌‍‍⁠‌​⁠‌​⁠​‌‌⁠​‌​‍⁠‌‌⁠‍‌‌⁠‌⁠‌‌⁠⁠‌‍‌‍‌​⁠‌​‍​‍‌⁠⁠‌

@sophia1234 We stopped the Pixel 5 fourth-line bleed by turning on android:autoSizeTextType=‘uniform’ on the CTA TextView (min 12sp, max 16sp) while keeping the copy as one ICU message with placeholders; small caveat: wrap the placeholder value with BidiFormatter so mixed LTR/RTL names don’t jumble.

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌⁠‌​‌‍‍‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​‍​⁠‍‌​⁠‌⁠​⁠​​​⁠​‍​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​‍​⁠​​​⁠‌​​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌⁠‌​‌‌‌‍‌​⁠‌‌‍​⁠‌‍​‍‌‌‌‌‌⁠‍‍‌​‌‌‌​‍⁠​⁠​‌‌⁠​​‌​⁠⁠‌⁠‌‌‌‍‍‌‌​⁠‍‌‍‌⁠​‍​‍‌⁠⁠‌