How do you translate a Compose Multiplatform application using composeResources, locale-qualified values directories and generated Res accessors across Android, iOS, desktop and web? This Compose Multiplatform localization guide explains string resources, plurals, formatting, language and script qualifiers, generated resource access, font coverage and cross-platform release QA. It focuses on what real users see when an app is installed in more than one language.
Sharing a Compose UI does not make every platform’s locale, native prompt and packaging behavior identical. The same string resource can be consumed through shared code, yet the surrounding operating system still decides how some inputs, permissions and accessibility services behave. There are also important differences between a resource with a default value and a resource that is missing entirely. A reliable design tests these boundaries instead of assuming that common code has eliminated them.
We will follow a personal-budgeting application through setup, entering transactions, reviewing totals and exporting a report. The aim is to preserve accurate meaning while allowing different words and writing conventions. This includes resource directories, numeric quantities, different scripts, localization during recomposition and the evidence needed before a multilingual release can be trusted.
Quick answer: what a successful translation must achieve
Successful Compose Multiplatform localized resources connects four things: the language a person expects, the resource system that supplies the words, the application state that gives those words their truth, and a tested release that displays them as intended. In Compose Multiplatform, the immediate language source is Compose Multiplatform composeResources directories, generated Res accessors and stringResource or pluralStringResource calls in common UI code. That mechanism helps developers organize translated copy, but it cannot decide whether an instruction is factually right, an account has permission, or a user can recover from an error.
Consider a personal-budget app user switching between mobile and desktop. The main task is to set a budget, record spending, compare categories and export a month-end report. A term such as BudgetRemaining describes a computed balance, not an authorization to spend or a currency conversion. That distinction is invisible to an automated word count and easy to miss when reviewers see an isolated sentence. Begin by writing down the real starting state, the possible changes, the final state and the evidence of completion.
If you only have time for a first audit, review one complete user journey, one missing translation, a changed count, a date or amount, an error after a partial success, an accessible control and a fresh installed build. The main source locations are shared Composable text, resource XML, native platform prompts, persistence and exported documents. Those checks reveal more practical defects than a list of translated menu names.
Contents and how to use this guide
- What the localization mechanism actually does
- Fourteen foundations for trustworthy multilingual applications
- Twenty-four realistic troubleshooting cases
- One complete reader journey
- Release acceptance, common questions and official references
How Compose Multiplatform localization works in practice
The translation structure begins with commonMain/composeResources/values/strings.xml plus values-fr and script-qualified resource variants. Its job is to supply consistent interface messages. The runtime or rendering layer uses Compose Multiplatform composeResources directories, generated Res accessors and stringResource or pluralStringResource calls in common UI code. A person, however, does not interact with resource files; they interact with screens, files, notifications, prompts and a sequence of results. Follow the words all the way to the action they describe. A correct translation on the first screen can be contradicted by the next one.
Create a small inventory before editing. Identify text that is chosen by a resource identifier; text constructed later from data; strings supplied by the operating system; user-generated content; and messages delivered by a remote service. These categories have different owners. In particular, a source string is not permission to rewrite customer data, a transaction, a technical code or a file name. Translate the explanation of a record without quietly altering the record itself.
A good example is this failure: a translated ‘available balance’ appears with the wrong currency after the user changes region. The correct response is not to search for a more fluent synonym. First verify the actual application state, then choose target-language wording that names it truthfully. The source may need to be split into separate messages. The translator, product owner and tester should agree on a small observable acceptance test.
Fourteen foundations for reliable implementation
1. Start with an actual reader task
Choose one sequence that a reader must finish, such as opening a record, editing a field and understanding the final confirmation. Treat every sentence along that route as part of one meaning. A translated button can be grammatically perfect and still be misleading if the next screen does not do what it promises.
In Compose Multiplatform, this becomes concrete: Resources can live inside a common source set under composeResources. The default values folder provides basic strings and localized qualified folders supply alternatives. The relevant user-facing locations include shared Composable text, resource XML, native platform prompts, persistence and exported documents. Check the precise resource and the visible screen together. A note saying only “translated” does not tell a reviewer whether the right key was used, whether the app is in the expected state or whether another layer supplies different words.
Try the following audit. Open the a personal-budget app user switching between mobile and desktop scenario and trace the action to set a budget, record spending, compare categories and export a month-end report. Record one example of a correct message and one counterexample in which a person could make the wrong decision. The release is acceptable only when the message matches the observable result. Keep the source value, target wording, locale, screen, test data and build identity with the evidence so another reviewer can reproduce the finding.
2. Separate interface resources from real records
A locale file normally contains interface language, not every item in the application’s database. Customer-entered names, addresses, transaction amounts and external descriptions may require different treatment. Record who owns each text source, who can change it and whether the text can be lawfully and accurately rewritten.
In Compose Multiplatform, this becomes concrete: Generated Res accessors provide typed references to resources; compilation and regeneration should be checked after new entries are added. The relevant user-facing locations include shared Composable text, resource XML, native platform prompts, persistence and exported documents. Check the precise resource and the visible screen together. A note saying only “translated” does not tell a reviewer whether the right key was used, whether the app is in the expected state or whether another layer supplies different words.
Try the following audit. Open the a personal-budget app user switching between mobile and desktop scenario and trace the action to set a budget, record spending, compare categories and export a month-end report. Record one example of a correct message and one counterexample in which a person could make the wrong decision. The release is acceptable only when the message matches the observable result. Keep the source value, target wording, locale, screen, test data and build identity with the evidence so another reviewer can reproduce the finding.
3. Give each source message a stable identity
Resource identifiers should communicate purpose without being rewritten whenever a translator prefers a new phrase. Preserve key relationships across editions. A label used for deletion must not be reused for archiving simply because both screens show a short verb.
In Compose Multiplatform, this becomes concrete: Locale qualifiers use particular syntax, including language and region rules. A typo can mean a resource is never selected on the target platform. The relevant user-facing locations include shared Composable text, resource XML, native platform prompts, persistence and exported documents. Check the precise resource and the visible screen together. A note saying only “translated” does not tell a reviewer whether the right key was used, whether the app is in the expected state or whether another layer supplies different words.
Try the following audit. Open the a personal-budget app user switching between mobile and desktop scenario and trace the action to set a budget, record spending, compare categories and export a month-end report. Record one example of a correct message and one counterexample in which a person could make the wrong decision. The release is acceptable only when the message matches the observable result. Keep the source value, target wording, locale, screen, test data and build identity with the evidence so another reviewer can reproduce the finding.
4. Write translator context beside ambiguous text
Words such as Open, Close, Draft and Current depend on the action and object. A translator needs to know whether Open means reveal a menu, open a file or move an order into an active state. Give the source screen, example state and consequence of a click.
In Compose Multiplatform, this becomes concrete: Scripts deserve special attention. If you add only Chinese script-specific resources, verify the documented script-less fallback directory requirements on supported platforms. The relevant user-facing locations include shared Composable text, resource XML, native platform prompts, persistence and exported documents. Check the precise resource and the visible screen together. A note saying only “translated” does not tell a reviewer whether the right key was used, whether the app is in the expected state or whether another layer supplies different words.
Try the following audit. Open the a personal-budget app user switching between mobile and desktop scenario and trace the action to set a budget, record spending, compare categories and export a month-end report. Record one example of a correct message and one counterexample in which a person could make the wrong decision. The release is acceptable only when the message matches the observable result. Keep the source value, target wording, locale, screen, test data and build identity with the evidence so another reviewer can reproduce the finding.
5. Distinguish language selection from formatting culture
The language of a sentence and the conventions for writing dates and numbers are related but separate decisions. A person might prefer English explanations while expecting a regional date format. Keep display formatting separate from the stored meaning of timestamps, identifiers, amounts and measurements.
In Compose Multiplatform, this becomes concrete: String and plural resource calls are user-facing contracts. Test grammar with actual numbers and check the installed library version for the available APIs. The relevant user-facing locations include shared Composable text, resource XML, native platform prompts, persistence and exported documents. Check the precise resource and the visible screen together. A note saying only “translated” does not tell a reviewer whether the right key was used, whether the app is in the expected state or whether another layer supplies different words.
Try the following audit. Open the a personal-budget app user switching between mobile and desktop scenario and trace the action to set a budget, record spending, compare categories and export a month-end report. Record one example of a correct message and one counterexample in which a person could make the wrong decision. The release is acceptable only when the message matches the observable result. Keep the source value, target wording, locale, screen, test data and build identity with the evidence so another reviewer can reproduce the finding.
6. Plan fallback deliberately
Missing translations are not evidence that the product has implemented a safe fallback. Specify which language may appear, which messages are too important to fall back silently and which unsupported combinations should be blocked. Check the actual resource resolution path rather than relying on an assumption about a language code.
In Compose Multiplatform, this becomes concrete: An application may have shared code while still relying on native language, number formatting and device preference mechanisms. The relevant user-facing locations include shared Composable text, resource XML, native platform prompts, persistence and exported documents. Check the precise resource and the visible screen together. A note saying only “translated” does not tell a reviewer whether the right key was used, whether the app is in the expected state or whether another layer supplies different words.
Try the following audit. Open the a personal-budget app user switching between mobile and desktop scenario and trace the action to set a budget, record spending, compare categories and export a month-end report. Record one example of a correct message and one counterexample in which a person could make the wrong decision. The release is acceptable only when the message matches the observable result. Keep the source value, target wording, locale, screen, test data and build identity with the evidence so another reviewer can reproduce the finding.
7. Preserve variables and changing quantities
When a message includes a customer name, order total, filename or count, the variable has a specific contract. Translators may need to change sentence order around the value, but they must not invent or delete the value. Check singular, zero and multiple quantities using the rules of the target locale.
In Compose Multiplatform, this becomes concrete: Generated accessors and strings are not a multilingual database. Transaction categories and merchant descriptions may have separate content ownership. The relevant user-facing locations include shared Composable text, resource XML, native platform prompts, persistence and exported documents. Check the precise resource and the visible screen together. A note saying only “translated” does not tell a reviewer whether the right key was used, whether the app is in the expected state or whether another layer supplies different words.
Try the following audit. Open the a personal-budget app user switching between mobile and desktop scenario and trace the action to set a budget, record spending, compare categories and export a month-end report. Record one example of a correct message and one counterexample in which a person could make the wrong decision. The release is acceptable only when the message matches the observable result. Keep the source value, target wording, locale, screen, test data and build identity with the evidence so another reviewer can reproduce the finding.
8. Treat errors as instructions, not decorations
An error message should tell a person what failed, what remains unchanged and what to do next. Do not translate a failed upload as a successful submission. Give higher review priority to permissions, payments, irreversible actions, account access and situations where misunderstanding could cause harm.
In Compose Multiplatform, this becomes concrete: Language changes interact with state and recomposition. Changing resources should not reset account data, unsaved edits or selected categories. The relevant user-facing locations include shared Composable text, resource XML, native platform prompts, persistence and exported documents. Check the precise resource and the visible screen together. A note saying only “translated” does not tell a reviewer whether the right key was used, whether the app is in the expected state or whether another layer supplies different words.
Try the following audit. Open the a personal-budget app user switching between mobile and desktop scenario and trace the action to set a budget, record spending, compare categories and export a month-end report. Record one example of a correct message and one counterexample in which a person could make the wrong decision. The release is acceptable only when the message matches the observable result. Keep the source value, target wording, locale, screen, test data and build identity with the evidence so another reviewer can reproduce the finding.
9. Test text length and reading order on screens
Longer translations may wrap buttons, crowd dialog boxes and hide supporting explanations. Directionality can alter the visual order of controls and symbols. Inspect small screens, high zoom, keyboard focus, large system text and representative right-to-left layouts rather than assuming a successful compilation proves usability.
In Compose Multiplatform, this becomes concrete: Remote resources, raw files and local resources have different offline behavior. Make clear which translated assets are shipped and which may be downloaded. The relevant user-facing locations include shared Composable text, resource XML, native platform prompts, persistence and exported documents. Check the precise resource and the visible screen together. A note saying only “translated” does not tell a reviewer whether the right key was used, whether the app is in the expected state or whether another layer supplies different words.
Try the following audit. Open the a personal-budget app user switching between mobile and desktop scenario and trace the action to set a budget, record spending, compare categories and export a month-end report. Record one example of a correct message and one counterexample in which a person could make the wrong decision. The release is acceptable only when the message matches the observable result. Keep the source value, target wording, locale, screen, test data and build identity with the evidence so another reviewer can reproduce the finding.
10. Make accessibility part of the language contract
A screen reader may announce a different string from the one a sighted person sees. Image descriptions, semantic labels, field errors and focus announcements need the same factual review as visible labels. A language picker should have an understandable name and should not unexpectedly lose a user’s work.
In Compose Multiplatform, this becomes concrete: Font resources and system fallback determine what scripts can render. Test character shaping, mixed-direction identifiers and large text. The relevant user-facing locations include shared Composable text, resource XML, native platform prompts, persistence and exported documents. Check the precise resource and the visible screen together. A note saying only “translated” does not tell a reviewer whether the right key was used, whether the app is in the expected state or whether another layer supplies different words.
Try the following audit. Open the a personal-budget app user switching between mobile and desktop scenario and trace the action to set a budget, record spending, compare categories and export a month-end report. Record one example of a correct message and one counterexample in which a person could make the wrong decision. The release is acceptable only when the message matches the observable result. Keep the source value, target wording, locale, screen, test data and build identity with the evidence so another reviewer can reproduce the finding.
11. Control source change without losing translation history
A revised English sentence can make a formerly accurate translation wrong even if no resource key changes. Record what changed, why, and which translations require re-review. Distinguish a cosmetic punctuation edit from a changed eligibility rule, charge, deadline or permission requirement.
In Compose Multiplatform, this becomes concrete: Localized resources may include more than words, including images and fonts, but a localized decorative asset must not alter a financial claim. The relevant user-facing locations include shared Composable text, resource XML, native platform prompts, persistence and exported documents. Check the precise resource and the visible screen together. A note saying only “translated” does not tell a reviewer whether the right key was used, whether the app is in the expected state or whether another layer supplies different words.
Try the following audit. Open the a personal-budget app user switching between mobile and desktop scenario and trace the action to set a budget, record spending, compare categories and export a month-end report. Record one example of a correct message and one counterexample in which a person could make the wrong decision. The release is acceptable only when the message matches the observable result. Keep the source value, target wording, locale, screen, test data and build identity with the evidence so another reviewer can reproduce the finding.
12. Inspect the release artifact, not only the editor
The translation that appears in a source file is not necessarily the one installed, packaged, cached or delivered to readers. Test a clean installation or deployment and examine its resources. Verify that the generated artifact is associated with the correct code version and supported locales.
In Compose Multiplatform, this becomes concrete: Web target resource loading and cache behavior differ from installed mobile assets; inspect actual delivery after source changes. The relevant user-facing locations include shared Composable text, resource XML, native platform prompts, persistence and exported documents. Check the precise resource and the visible screen together. A note saying only “translated” does not tell a reviewer whether the right key was used, whether the app is in the expected state or whether another layer supplies different words.
Try the following audit. Open the a personal-budget app user switching between mobile and desktop scenario and trace the action to set a budget, record spending, compare categories and export a month-end report. Record one example of a correct message and one counterexample in which a person could make the wrong decision. The release is acceptable only when the message matches the observable result. Keep the source value, target wording, locale, screen, test data and build identity with the evidence so another reviewer can reproduce the finding.
13. Use reviewers with two kinds of expertise
A fluent language reviewer can find tone and grammar problems; a product reviewer can identify false descriptions of application behavior. Both perspectives matter. Give reviewers a reproducible task, source and target screenshots, expected outcomes and a place to document disagreements.
In Compose Multiplatform, this becomes concrete: Accessibility semantics need meaningful translated content descriptions across native screen readers; a visible translated Composable does not ensure full access. The relevant user-facing locations include shared Composable text, resource XML, native platform prompts, persistence and exported documents. Check the precise resource and the visible screen together. A note saying only “translated” does not tell a reviewer whether the right key was used, whether the app is in the expected state or whether another layer supplies different words.
Try the following audit. Open the a personal-budget app user switching between mobile and desktop scenario and trace the action to set a budget, record spending, compare categories and export a month-end report. Record one example of a correct message and one counterexample in which a person could make the wrong decision. The release is acceptable only when the message matches the observable result. Keep the source value, target wording, locale, screen, test data and build identity with the evidence so another reviewer can reproduce the finding.
14. Build a repeatable acceptance decision
A language edition is ready when a real reader can complete important tasks without misreading a control or outcome. Prioritize essential paths over cosmetic completeness. Record failed tests, ownership, repairs and the version that passed, then rerun the relevant checks when behavior changes.
In Compose Multiplatform, this becomes concrete: Validate supported targets and installed plugin versions against official docs, then test the precise artifact built for each platform. The relevant user-facing locations include shared Composable text, resource XML, native platform prompts, persistence and exported documents. Check the precise resource and the visible screen together. A note saying only “translated” does not tell a reviewer whether the right key was used, whether the app is in the expected state or whether another layer supplies different words.
Try the following audit. Open the a personal-budget app user switching between mobile and desktop scenario and trace the action to set a budget, record spending, compare categories and export a month-end report. Record one example of a correct message and one counterexample in which a person could make the wrong decision. The release is acceptable only when the message matches the observable result. Keep the source value, target wording, locale, screen, test data and build identity with the evidence so another reviewer can reproduce the finding.
Twenty-four realistic translation failures and repairs
The cases below are intentionally about outcomes rather than only file syntax. Each begins with a situation that can occur in Compose Multiplatform, then explains a diagnosis, the repair decision and evidence for release. You can use them as test cards. They should not be treated as claims that every installation has the same defaults; framework versions, project configuration and operating-system rules can change behavior.
1. Initial language on a new installation
Imagine this production-like moment: An Android device starts in a different language from the app account preference; specify which setting selects the initial resource edition. For the reader, the essential question is not whether the target sentence sounds elegant. It is whether the words describe the present state and the next available action. Identify the message’s source and the product behavior before revising the language.
Compare first launch with a clean install and a returning session. Separate a chosen locale from a system default, and write down the expected behavior before asking whether the visible language is correct. On Compose Multiplatform, start by checking Compose Multiplatform composeResources directories, generated Res accessors and stringResource or pluralStringResource calls in common UI code. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
2. Language changed while a task is open
A realistic problem looks like this: The user switches languages while entering a transaction; preserve amount, category and unsaved notes through recomposition. The apparent translation defect may actually begin upstream in application state, resource selection or packaging. Do not change the text until you know which of those layers produced the visible result and what the user is entitled to infer from it.
Switch language with an unsaved form. Check whether values, focus, validation and navigation survive. A settings change should not quietly submit, erase or authorize anything. On Compose Multiplatform, start by checking commonMain/composeResources/values/strings.xml plus values-fr and script-qualified resource variants. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
3. A missing translation key
Consider the following test: A resource exists under the default values directory but not under values-fr; inspect actual fallback behavior before claiming a complete French edition. This is worth treating as an entire interaction. A well-translated heading cannot rescue a misleading button, and an accurate confirmation cannot repair a missing warning just before an irreversible action.
Delete one low-risk key in a test build. Observe the exact rendered output and record whether fallback, missing-key markers or blank labels appear; different resource layers may behave differently. On Compose Multiplatform, start by checking Compose Multiplatform composeResources directories, generated Res accessors and stringResource or pluralStringResource calls in common UI code. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
4. A word with two meanings
Here is a practical localization trap: The word ‘Charge’ can mean a fee or an electrical condition; use separate resource identities and contextual notes. Review it through the eyes of someone who has no access to project files. They must understand the consequence from the words and controls that are available, not from what the engineering team knows internally.
Review the label in two distinct screens and read its action target. Where contexts differ, make separate source messages rather than forcing one short translation to represent unrelated work. On Compose Multiplatform, start by checking commonMain/composeResources/values/strings.xml plus values-fr and script-qualified resource variants. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
5. A changing quantity
Imagine this production-like moment: Zero transactions, one transaction and multiple transactions require tested grammar rather than a manually appended noun ending. For the reader, the essential question is not whether the target sentence sounds elegant. It is whether the words describe the present state and the next available action. Identify the message’s source and the product behavior before revising the language.
Try zero, one, two and a larger quantity. Read the entire sentence aloud with the inserted number; test plural categories and number formatting rather than translating a numeric suffix. On Compose Multiplatform, start by checking Compose Multiplatform composeResources directories, generated Res accessors and stringResource or pluralStringResource calls in common UI code. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
6. An interpolated customer name
A realistic problem looks like this: A message includes a merchant name and an amount; keep placeholders stable and make sentence order natural. The apparent translation defect may actually begin upstream in application state, resource selection or packaging. Do not change the text until you know which of those layers produced the visible result and what the user is entitled to infer from it.
Use names containing spaces, apostrophes and non-Latin characters. Verify that the variable is escaped appropriately and that the sentence remains natural without exposing private information in logs. On Compose Multiplatform, start by checking commonMain/composeResources/values/strings.xml plus values-fr and script-qualified resource variants. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
7. Currency and price presentation
Consider the following test: A budget is denominated in USD while the user’s device is set to France; formatting must not silently convert money. This is worth treating as an entire interaction. A well-translated heading cannot rescue a misleading button, and an accurate confirmation cannot repair a missing warning just before an irreversible action.
Change the display locale while retaining the same underlying amount and currency. Compare the currency code, symbol, decimal places and total with a trusted transaction record. On Compose Multiplatform, start by checking Compose Multiplatform composeResources directories, generated Res accessors and stringResource or pluralStringResource calls in common UI code. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
8. Time zone and event date
Here is a practical localization trap: A report date is shown on desktop and mobile in different time zones; keep the underlying date interval explicit. Review it through the eyes of someone who has no access to project files. They must understand the consequence from the words and controls that are available, not from what the engineering team knows internally.
Use an event near midnight and compare two time zones. Keep a timestamp or offset as the source of truth and verify whether the interface has clearly identified the displayed zone. On Compose Multiplatform, start by checking commonMain/composeResources/values/strings.xml plus values-fr and script-qualified resource variants. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
9. A translated irreversible action
Imagine this production-like moment: A Delete category action also affects historical grouping; translate the confirmation to describe its actual effect. For the reader, the essential question is not whether the target sentence sounds elegant. It is whether the words describe the present state and the next available action. Identify the message’s source and the product behavior before revising the language.
Make a destructive action available only in a controlled test account. Check that the warning names what will be deleted, whether restoration is possible, and which button cancels. On Compose Multiplatform, start by checking Compose Multiplatform composeResources directories, generated Res accessors and stringResource or pluralStringResource calls in common UI code. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
10. An error and a recovery instruction
A realistic problem looks like this: Cloud sync fails after a local transaction is saved; the message must distinguish local persistence from remote confirmation. The apparent translation defect may actually begin upstream in application state, resource selection or packaging. Do not change the text until you know which of those layers produced the visible result and what the user is entitled to infer from it.
Trigger a reproducible failure. The error must describe the failure without claiming completion, and the next-step advice must match the application’s available recovery route. On Compose Multiplatform, start by checking commonMain/composeResources/values/strings.xml plus values-fr and script-qualified resource variants. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
11. Right-to-left screen layout
Consider the following test: An Arabic edition shows transaction IDs with Latin characters; inspect bidirectional rendering instead of reversing the IDs. This is worth treating as an entire interaction. A well-translated heading cannot rescue a misleading button, and an accurate confirmation cannot repair a missing warning just before an irreversible action.
Test with a genuine right-to-left locale and mixed-direction values. Check phone numbers, file paths, breadcrumbs, icons, cursor movement and focus order as separate concerns. On Compose Multiplatform, start by checking Compose Multiplatform composeResources directories, generated Res accessors and stringResource or pluralStringResource calls in common UI code. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
12. Font coverage and character shaping
Here is a practical localization trap: One platform renders characters from a resource font while another falls back; check both readability and exported reports. Review it through the eyes of someone who has no access to project files. They must understand the consequence from the words and controls that are available, not from what the engineering team knows internally.
Use realistic words containing accents, joined scripts, combining marks and uncommon symbols. Check that bundled fonts render them as readable text rather than empty boxes. On Compose Multiplatform, start by checking commonMain/composeResources/values/strings.xml plus values-fr and script-qualified resource variants. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
13. Screen-reader descriptions
Imagine this production-like moment: TalkBack and VoiceOver announce a spending chart; give values and categories accessible descriptions, not just colored bars. For the reader, the essential question is not whether the target sentence sounds elegant. It is whether the words describe the present state and the next available action. Identify the message’s source and the product behavior before revising the language.
Navigate with a screen reader and keyboard alone. Verify announcements on changed states and required fields; do not accept a screenshot as proof that an accessible label exists. On Compose Multiplatform, start by checking Compose Multiplatform composeResources directories, generated Res accessors and stringResource or pluralStringResource calls in common UI code. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
14. A very long translation
A realistic problem looks like this: A long target-language balance label clips on a small screen; test large text settings and component constraints. The apparent translation defect may actually begin upstream in application state, resource selection or packaging. Do not change the text until you know which of those layers produced the visible result and what the user is entitled to infer from it.
Increase text scale and insert a representative long phrase. Ensure the user can still see the primary action and its explanation without clipped words or overlapping controls. On Compose Multiplatform, start by checking commonMain/composeResources/values/strings.xml plus values-fr and script-qualified resource variants. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
15. Navigation after a language change
Consider the following test: A deep link to a category should remain on that category after a language switch; avoid falling back to the start page. This is worth treating as an entire interaction. A well-translated heading cannot rescue a misleading button, and an accurate confirmation cannot repair a missing warning just before an irreversible action.
Change language after opening a nested page. Follow Back, breadcrumbs and deep links, then check that the reader lands on the corresponding content rather than an unrelated default. On Compose Multiplatform, start by checking Compose Multiplatform composeResources directories, generated Res accessors and stringResource or pluralStringResource calls in common UI code. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
16. Offline launch and cached content
Here is a practical localization trap: The app is opened on a train without network; packaged localized resources should work while server-updated category names may not. Review it through the eyes of someone who has no access to project files. They must understand the consequence from the words and controls that are available, not from what the engineering team knows internally.
Disable network access during an approved offline flow. Distinguish resources packaged with the app from resources obtained later, and do not promise an offline language that has never been downloaded. On Compose Multiplatform, start by checking commonMain/composeResources/values/strings.xml plus values-fr and script-qualified resource variants. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
17. A background notification
Imagine this production-like moment: A scheduled budget reminder is rendered on a background platform service; localize the delivered notification under a declared policy. For the reader, the essential question is not whether the target sentence sounds elegant. It is whether the words describe the present state and the next available action. Identify the message’s source and the product behavior before revising the language.
Schedule a notification and examine the language at delivery time. The system may construct background text from a different locale context than the screen that scheduled it. On Compose Multiplatform, start by checking Compose Multiplatform composeResources directories, generated Res accessors and stringResource or pluralStringResource calls in common UI code. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
18. An uploaded file or attachment
A realistic problem looks like this: An exported file uses a non-Latin project name; keep filename encoding and exported document language separate concerns. The apparent translation defect may actually begin upstream in application state, resource selection or packaging. Do not change the text until you know which of those layers produced the visible result and what the user is entitled to infer from it.
Attach a document with a multilingual name. Keep filenames intact where required; translate interface instructions, not the bytes or identity of an uploaded file. On Compose Multiplatform, start by checking commonMain/composeResources/values/strings.xml plus values-fr and script-qualified resource variants. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
19. Permissions and role-specific text
Consider the following test: Shared-device permissions mean one profile can edit budgets and another cannot; localize both screens accurately. This is worth treating as an entire interaction. A well-translated heading cannot rescue a misleading button, and an accurate confirmation cannot repair a missing warning just before an irreversible action.
Compare an administrator and a basic user. Confirm that the same translation does not suggest access to actions the underlying account cannot perform. On Compose Multiplatform, start by checking Compose Multiplatform composeResources directories, generated Res accessors and stringResource or pluralStringResource calls in common UI code. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
20. Version upgrades and stale resources
Here is a practical localization trap: A new release renames the meaning of Available funds; flag translations for review even if the Res key remains unchanged. Review it through the eyes of someone who has no access to project files. They must understand the consequence from the words and controls that are available, not from what the engineering team knows internally.
Change a source message without changing its identifier. Confirm the target language is re-reviewed when meaning changes and that stale bundles are not left in the shipped build. On Compose Multiplatform, start by checking commonMain/composeResources/values/strings.xml plus values-fr and script-qualified resource variants. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
21. Search and filtered lists
Imagine this production-like moment: A search field finds merchant names but not translated categories; test the actual data scope rather than the text on its hint. For the reader, the essential question is not whether the target sentence sounds elegant. It is whether the words describe the present state and the next available action. Identify the message’s source and the product behavior before revising the language.
Search for a term in the target language and verify the filter’s actual data scope. A translated search box does not automatically translate underlying indexed material. On Compose Multiplatform, start by checking Compose Multiplatform composeResources directories, generated Res accessors and stringResource or pluralStringResource calls in common UI code. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
22. A test locale with deliberately long strings
A realistic problem looks like this: A pseudo-localized build reveals fixed-size buttons and hard-coded English in platform-specific UI. The apparent translation defect may actually begin upstream in application state, resource selection or packaging. Do not change the text until you know which of those layers produced the visible result and what the user is entitled to infer from it.
Enable a pseudo-localized test edition when supported, or use longer sample strings. Record truncation, hard-coded source text and locale-dependent assumptions before booking a translation review. On Compose Multiplatform, start by checking commonMain/composeResources/values/strings.xml plus values-fr and script-qualified resource variants. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
23. A partial translation rollout
Consider the following test: The product ships only two locale editions on web and four on Android; document the support matrix honestly. This is worth treating as an entire interaction. A well-translated heading cannot rescue a misleading button, and an accurate confirmation cannot repair a missing warning just before an irreversible action.
Publish one language incrementally in a staging environment. Make incomplete portions visible to the team and verify that the reader is not promised full coverage prematurely. On Compose Multiplatform, start by checking Compose Multiplatform composeResources directories, generated Res accessors and stringResource or pluralStringResource calls in common UI code. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
24. The final packaged release
Here is a practical localization trap: A packaged iOS build cannot find a newly added resource while a desktop run can; inspect target packaging and generated accessors. Review it through the eyes of someone who has no access to project files. They must understand the consequence from the words and controls that are available, not from what the engineering team knows internally.
Install or launch the exact release artifact under an alternate locale. Follow the key journey from fresh start to confirmation and keep evidence tied to that build. On Compose Multiplatform, start by checking commonMain/composeResources/values/strings.xml plus values-fr and script-qualified resource variants. Then compare the local resource with the content produced in shared Composable text, resource XML, native platform prompts, persistence and exported documents. The correction should be made at the layer responsible for the mistake: message wording for a semantic error, locale configuration for a lookup error, app state for a false confirmation, and packaging for a missing runtime artifact.
Acceptance test: repeat the same action under the target locale, the default locale and a fresh or reset session. Capture the before-state, the exact message, the action and the after-state. Ask a fluent reviewer to explain what the text tells them to do without offering hints. If their interpretation differs from the application’s behavior, the release is not ready. Where this case involves sensitive information or an irreversible outcome, keep the relevant account and files in a controlled test environment.
A complete worked reader journey
Open the budgeting app with a French locale and a USD-denominated budget. Enter a purchase on mobile and read the confirmation: it should say what was saved, not imply that the bank approved a transaction. Change the language and reopen the same budget on desktop. Check that the stored amount is identical even if separators and sentence order differ. Test an Arabic edition with a mixed-direction merchant code and export a report using the correct date interval. Finally compare Android, iOS, desktop and web artifacts: a shared Res identifier is not evidence that every platform selected the same locale resources.
To document this exercise, use a simple table with the screen or event, the expected message meaning, the tested locale, the observed product state and the action taken. The most useful evidence is a mismatch between what was promised and what happened; merely counting strings is insufficient. Repeat the scenario after a source message changes, a resource package is rebuilt or a target platform receives a runtime update. The goal is continuity of meaning across time and releases.
A realistic release plan
Release gate 1: Define the supported edition
Write down supported languages, regions, platforms and the actual user paths included. Avoid declaring complete coverage because a language selector exists. Mark unsupported routes and important known limitations before release. For Compose Multiplatform, the key release surface is supported resource qualifiers, generated accessors, Android/iOS/desktop/web builds and script-specific testing. Use that surface as the evidence source rather than a general claim that translation files were merged.
Release gate 2: Freeze the meaning to be reviewed
Capture source messages with context, product-state definitions, severity and owners. Separate language-only revisions from changes that alter fees, rights, permissions, status or deadlines. Ask for product clarification when the source is ambiguous. For Compose Multiplatform, the key release surface is supported resource qualifiers, generated accessors, Android/iOS/desktop/web builds and script-specific testing. Use that surface as the evidence source rather than a general claim that translation files were merged.
Release gate 3: Validate the resource path
Build with the exact dependency and runtime versions intended for release. Check missing keys, incorrect identifiers, variable contracts, plural handling and artifacts needed at runtime. This is where syntax errors and omissions should be found before reader testing. For Compose Multiplatform, the key release surface is supported resource qualifiers, generated accessors, Android/iOS/desktop/web builds and script-specific testing. Use that surface as the evidence source rather than a general claim that translation files were merged.
Release gate 4: Test real tasks in every target environment
Use a task that includes navigation, data entry, error recovery and final confirmation. Add alternate screen sizes, locale settings, accessibility aids and a fresh install. The expected result is a person who can finish the job safely. For Compose Multiplatform, the key release surface is supported resource qualifiers, generated accessors, Android/iOS/desktop/web builds and script-specific testing. Use that surface as the evidence source rather than a general claim that translation files were merged.
Release gate 5: Correct and re-test
Track each defect to one cause and one owner. After a correction, run both the failed test and a nearby regression path. A corrected button label must not accidentally reverse the meaning of a dialog in another language. For Compose Multiplatform, the key release surface is supported resource qualifiers, generated accessors, Android/iOS/desktop/web builds and script-specific testing. Use that surface as the evidence source rather than a general claim that translation files were merged.
Release gate 6: Release with evidence
Keep the shipped version, supported locales, acceptance record and known limitations. Verify that the installed or deployed artifact is the one that passed review. Schedule rechecks when source behavior, policies or the translation resources change. For Compose Multiplatform, the key release surface is supported resource qualifiers, generated accessors, Android/iOS/desktop/web builds and script-specific testing. Use that surface as the evidence source rather than a general claim that translation files were merged.
Frequently asked questions
Does a successful build mean the app is translated correctly?
No. It can show that resources and code meet certain technical requirements, not that the language accurately describes user actions. In Compose Multiplatform, validate supported resource qualifiers, generated accessors, Android/iOS/desktop/web builds and script-specific testing. A reviewer should complete a meaningful task without explanations from the developer.
Should we translate everything in the source project?
No. Translate human-facing information only when it should change by language. Preserve stable identifiers, file contents, customer-entered data, program keys and other technical contracts. The distinction matters because changing a value can corrupt the meaning of an actual record.
What happens when a language is incomplete?
The answer depends on resource resolution and the application’s own fallback policy. Test a missing resource deliberately and inspect the actual message. It may be safer to show clearly identified fallback language than to leave a blank warning or imply that a function is supported.
Can we translate one sentence without seeing its screen?
You can suggest wording, but accurate approval needs context. A short message can be a button, status, heading or legal notice. The intended action and result determine the translation. Screenshots and states are especially important for words such as Save, Complete, Approve and Cancel.
Does changing the locale convert prices, measurements or records?
No. Presentation conventions may change; the underlying amount, unit, timezone, authorization and transaction meaning do not automatically change. Conversions require explicit rules and data. Do not use a translated symbol as evidence that a business operation occurred.
When should a translation be blocked from publication?
Block when a material error can mislead a reader about a destructive action, security permission, payment, medical or safety instruction, identity or completion state. Lower-risk stylistic differences can be prioritized separately, but still need ownership and a repair plan.
How do we test right-to-left languages?
Use a real target-language edition rather than only mirrored mockups. Inspect mixed-direction numbers and identifiers, input cursors, focus order, icons and accessibility announcements. A correct string resource is only one part of a readable right-to-left interface.
What is the simplest ongoing maintenance rule?
Whenever source meaning or behavior changes, re-evaluate the associated translations and test the altered journey in a packaged build. Keeping the resource key unchanged is not proof that the existing translation remains accurate.
Official documentation and further reading
The exact implementation depends on the installed version of Compose Multiplatform and on platform configuration. The following primary references document the supported mechanisms. Review them when upgrading a framework or changing how resources are built or installed. They explain technical behavior; a reader-centered translation test still establishes whether that behavior is described correctly.
The larger language and knowledge framework is explained in the following resources:
This guide focuses specifically on Compose Multiplatform localized resources. It complements, rather than duplicates, general translation theory, rapid translation review or instructions for another software platform. In the end, a trustworthy localized application makes the next action understandable, preserves the facts and gives the reader an accurate account of what happened.