Internationalization
Separate interface locale, content language, direction, formatting and cultural authority.
Five independent decisions
Record these decisions explicitly. Do not derive a cultural identity or publication permission from browser language. A visitor can choose English navigation while reading content in another language.
| Concern | Controls | Does not establish |
|---|---|---|
| Interface locale | Translated navigation and messages | The language of a dictionary entry |
| Content language | lang metadata and pronunciation context | Publication permission or review quality |
| Direction | dir and logical layout properties | A locale inferred from a person’s identity |
| Regional formatting | Numbers, dates, time zones and units | Text translation |
| Authority and consent | Provenance, review and permitted audience | Automatic correctness from a locale code |
Global word choice and local context
Write interface messages so they do not depend on a shared local idiom, institution or unspoken convention. A locally meaningful reference can remain useful when its context is explained. Do not replace a source name, Country name or recorded language form with a generic term merely to make the interface sound global.
Prefer a concrete task and consequence over a metaphor. Keep sentences short enough to follow, but retain necessary source qualifications and permission details. This is editorial judgment; an arbitrary character limit or a synonym replacement script cannot approve meaning.
| Concern | Unclear English interface example | Clearer task wording |
|---|---|---|
| Local reference | Use your council number | Enter the identifier assigned by the named local authority; provide its format and purpose |
| Idiom | You’re good to go | Your local draft is saved. Publication is still pending. |
| Abbreviation | Rec. req. failed | The recording request did not finish. |
| Technical jargon | Upstream operation failed | The service did not respond. Your draft is still here. |
| Unnecessary politeness | Please kindly consider proceeding | Review the consequence, then choose Continue or Cancel |
| Long instruction | A single sentence mixing format, consent, deadline and action | Separate entry requirements, purpose, deadline and next action without losing their relationship |
Pronouns, references and ambiguity
Name the relevant person, record or operation when a pronoun could refer to several things. A short “this” or “that” label is not helpful if the target moves, disappears or is unclear when read outside its visual context. Keep ownership distinct from the product’s speaking role.
Clarify time, quantity, scope and sequence. A date such as 03/04 is ambiguous without a regional convention; a midnight deadline needs its date and time zone. Words such as may, later or current can hide whether an operation is permitted, possible, scheduled or already completed.
| Ambiguity | English rewrite | Verify |
|---|---|---|
| “It was changed” | The source link changed; the entry text is unchanged. | Which fields actually changed |
| “Delete this” | Remove this local draft from this device. | Exact object, effect and recovery |
| “They approved it” | Name the responsible reviewer and the reviewed revision only when established. | Mandate and review evidence |
| “Try that again” | Retry the source search. | Supported operation and retained query |
| “Available tomorrow” | Give the relevant calendar date and time zone when timing matters. | Actual event time, not message capture time |
| “All results” | Results from the named scope and current filters. | Search boundary and completeness |
Translation handoff and semantic integrity
- Supply complete messages, task/state context, screenshots, variable definitions, speaking role and actual action consequence. A translator should not have to infer the meaning of a detached string.
- Identify whether a variable is a display name, count, calendar date, instant, measurement or identifier. Format each according to its meaning; do not add numeric grouping to accession identifiers.
- Explain missing-variable behavior and plural/select categories in the consuming message system. Do not join translated fragments around a dynamic name.
- Keep source quotations and names separate from editable interface copy. Preserve originals and record any authorized rendition with its provenance.
- Review locale-specific punctuation, examples, tone and units with the relevant qualified people. Translating UI copy does not establish permission to publish language data.
- Use the working formatting/direction lab below and the Writing message lab to inspect layout and variable context. They do not generate translations or approve linguistic meaning.
Formatting and direction lab
The fixed instant makes time-zone changes visible. The tool reports the browser’s resolved locale because a syntactically valid requested locale may fall back. Invalid locale/time-zone combinations pause formatting rather than presenting a fabricated result.
Requested en-AU; resolved en-AU. The example instant is 2026-10-13 at 13:15 UTC.
Source details remain attached to this result.
- Formatted number
- 12,345.67
- Formatted date and time
- 13/10/2026, 13:15
Locale formatting changes numbers and dates. It does not translate the interface or verify your text. Direction is selected explicitly so you can inspect bidirectional content without changing the whole page.
Bidirectional layout
- Set direction on the appropriate document or content region. Use dir="auto" for unknown user-provided text when suitable; keep known document direction explicit.
- Use margin-inline, padding-inline, inset-inline and text-align: start. Do not reverse DOM order to imitate RTL.
- Isolate URLs, numeric identifiers and other embedded direction-sensitive content with bdi.
- Mirror directional navigation when meaning requires it. Do not mirror logos, written characters, play symbols or every image indiscriminately.
- Verify portal content inherits the intended direction; local direction on a trigger may not reach a portalled popup.
Reading direction, time and media
Alignment and reading direction are separate. A right-aligned LTR string still reads LTR; setting text-align alone cannot repair bidi order or caret movement. Set the intended dir on the complete content or control region and isolate embedded identifiers. Preserve email username/domain order, URLs and source identifiers rather than reversing their characters.
Pair DirectionProvider with the matching DOM dir for installed composite controls: the provider supplies keyboard/navigation context, while dir supplies browser layout and text direction. A nested LTR region must override an RTL document in both contexts. A DOM ancestor selector such as [dir="rtl"] does not express that effective direction; shared directional presentation variables reset at every explicit LTR/RTL boundary and inherit through its descendants. This preserves a nested direction island without a language-name heuristic. Use explicit direction for navigation/control regions; dir="auto" is for content whose text direction is unknown. Portals require the intended provider and DOM direction at their rendered boundary.
- The Material reference notes locale exceptions for linear time/progress and charts. Record the consuming product’s task/locale decision; do not implement a universal language-name switch or infer policy from identity.
- Use Intl.DateTimeFormat parts for localized time/day-period order instead of manually moving AM/PM. A clock’s clockwise geometry is independent of its localized labels.
- The real audio pattern demonstrates an explicit LTR media control island inside its RTL surrounding layout. The icon, spacing and canonical-layout tools inspect other direction concerns; they do not certify every component or translation.
| Subject | Direction decision | Verification |
|---|---|---|
| Back/forward and reading-order navigation | Mirror directional meaning; preserve DOM task sequence | Check first arrow key, focus, selected state and visual indicator in both directions |
| Logos, source images, written characters | Preserve identity; do not globally scale the interface or every SVG | Inspect original orientation and meaningful text alternatives |
| Linear task progress | Follow task direction; an explicitly LTR region retains LTR movement | Check determinate edge and indeterminate motion; do not infer a task policy solely from a person’s language |
| Media playback controls and timeline | Keep LTR even inside an RTL interface; this differs from reading-order task progress | Right increases playback position, Left decreases it, and native events reflect the seek |
| Circular progress and clocks | Preserve clockwise movement; do not mirror the circle | Verify actual animation and localized time formatting, including day-period placement |
| Charts, diagrams and numeric axes | Choose direction by data semantics and qualified locale review | Do not automatically reverse a scientific axis or assume every RTL language has identical chart conventions |
| Badges, chips, toolbars and fields | Use logical leading/trailing placement; retain meaningful symbols | Check badge corner, remove/clear action, leading icon and tool order |
| Bars, rails and adaptive panes | Use the leading edge and mirror reading-order pane placement | Check list-detail, feed and supporting layouts; open expanded navigation and portal surfaces |
| Swipe/reorder and dismiss | Adapt reading-order gestures with explicit alternatives | Keep keyboard and named action controls; browser tests do not establish Android predictive-back behavior |
Language text and search
- Preserve the original form alongside any normalization used for search. Do not silently strip diacritics from displayed text.
- Use Unicode-aware text operations and avoid splitting by code unit when counting user-perceived characters.
- Locale-aware sorting and case conversion need explicit policy and qualified review for the relevant language. Default English behavior is not universal.
- Avoid country flags as language selectors. A language can cross borders, and a country can contain many languages.
- Never use machine-generated Indigenous vocabulary as a specimen. Use source-attested, permitted content or an explicitly labelled user-input preview.
Messages, plurals and dates
Use complete translation messages with an ICU-compatible plural/select mechanism in the consuming application. Give each variable a meaning and type. Keep source timestamps as instants plus the intended display time zone. A calendar-only date is a different data type and should not be shifted by timezone conversion.
const formatter = new Intl.DateTimeFormat(locale, {
timeZone, dateStyle: "medium", timeStyle: "short",
});
const visible = formatter.format(new Date(isoInstant));
<time dateTime={isoInstant}><bdi>{visible}</bdi></time>
// locale and timeZone are explicit validated product settings.Expansion and font coverage
- Allow labels and help text to wrap. Avoid fixed inline widths based on English strings.
- Test a long-text locale and RTL layout independently; one does not prove the other.
- Load licensed fonts with the necessary glyphs and verify combining marks, line height and fallback.
- Set lang on known content so assistive technology can select pronunciation appropriately. Do not invent a tag when the record has no verified language identifier.
Failure cases
- Do not use CSS text-transform to alter dictionary spelling.
- Do not parse a localized formatted date back into storage; retain structured values.
- Avoid concatenating message fragments around variables or applying English singular/plural rules everywhere.
- Do not claim Intl supports a language’s own formatting conventions merely because it accepts the locale string. Inspect resolved options and verify with speakers.
Verification
- Change the lab to de-DE and another supported time zone; compare separators and the rendered instant.
- Enter an invalid time zone and verify the accessible error and absence of misleading formatted output.
- Enable RTL and inspect mixed-direction text, controls, focus order and portal placement.
- Review translated copy, sorting, dates and language labels with the relevant qualified reviewers. Browser formatting tests cannot verify translation or cultural appropriateness.