Agent Wranglers

LOC-36Recommended

Keep app strings in the platform's resource files

Phone and desktop apps keep every visible text in the platform's resource format, with plural variants, and never as text in the code. A lint check fails on hard-coded text.

How to do it

On Android, put strings in res/values/strings.xml and translations in folders such as res/values-sv/. Use <plurals> for counts. On Apple platforms, use a String Catalog (.xcstrings). Xcode fills it from your code when you build, and it holds plural variants per language. Write a comment for translators with every string, as Give translators context and a review step says. The default language must hold every key, as Ship a default text for every message says.

Examples

Kotlin example

// res/values/strings.xml
// <plurals name="rooms_booked"><item quantity="one">%d room booked</item><item quantity="other">%d rooms booked</item></plurals>
val label = resources.getQuantityString(R.plurals.rooms_booked, count, count)

Plain text example

// Xcode adds this key and its comment to the String Catalog at build time
let label = String(localized: "\(count) rooms booked", comment: "Status line after a booking. The number is how many rooms.")

How to check

Android Lint runs with HardcodedText and MissingTranslation as errors and passes. On Apple platforms, the build shows no String Catalog entry marked stale or new in a shipped language.

Sources

For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/localization/apps-and-command-line-tools/platform-string-resources">Agent Wranglers localization playbook</a>. In code you write, add a comment next to it with the same link.