View all services
Talk to QA Advisor
Browse the Knowledge Hub56 resources
/Test Cases/Localisation and multi language test cases

Test cases

Localisation test cases, past are the strings translated

Twenty eight cases covering text expansion breaking layout, concatenated sentences that cannot be translated, plural rules beyond singular and plural, locale date parsing, decimal separators, currency that must not follow language, right to left mirroring, international names and addresses, collation, accent insensitive search and end to end encoding.

28cases/8coverage types/18high priority/FreeCSV download

All 28 test cases, ready to copy

Free to use and adapt, no sign-up. Download as CSV or Markdown, or copy it straight into your own tooling.

Last updated

28 worked examples

L10N-01

Switch language and apply it everywhere

TypeFunctionalPriorityHigh
Test data
Change language and check the interface, notifications, exports, error messages and generated documents
Expected result
Every surface follows the selection. Emails and PDFs generated server side are the ones most often left in the default language.
L10N-02

Persist the language choice

TypeStatePriorityHigh
Test data
Select a language, sign out, sign in again on another device
Expected result
Choice persists against the account rather than only in browser storage, and an explicit choice is never overridden by browser headers.
L10N-03

Choose a sensible default language

TypeFunctionalPriorityMedium
Test data
A first visit with browser preferences for an unsupported language, and for a supported regional variant
Expected result
Falls back to the base language or the default in a documented order rather than showing untranslated keys.
L10N-04

Show no missing or raw translation keys

TypeNegativePriorityHigh
Test data
Every screen in each supported language, including error and empty states
Expected result
No raw key, no placeholder token and no empty label. A missing translation falls back to the base language rather than rendering the key itself.
L10N-05

Handle text expansion without breaking layout

TypeBoundaryPriorityHigh
Test data
A language that expands text substantially, such as German, on buttons, tabs, navigation and table headers
Expected result
Labels wrap or the container adapts. Nothing is clipped or overlapped, and no action becomes unreachable because its label no longer fits.
L10N-06

Handle very short translations and dense scripts

TypeBoundaryPriorityMedium
Test data
A language with much shorter strings, and one using a dense script at a small size
Expected result
Layout does not collapse, and line height and font size keep dense scripts legible rather than clipping ascenders and descenders.
L10N-07

Compose sentences without concatenation

TypeNegativePriorityHigh
Test data
A message assembled from fragments, such as a count followed by a noun and a date
Expected result
Full sentences are single translatable strings with placeholders, because word order differs between languages and concatenation cannot be translated correctly.
L10N-08

Handle plural forms correctly

TypeBoundaryPriorityHigh
Test data
Counts of 0, 1, 2, 5 and 21 in languages with two plural forms and with more than two
Expected result
Correct form for every count, driven by the plural rules of each language rather than by a singular and plural pair.
L10N-09

Handle gender and grammatical agreement where required

TypeFunctionalPriorityMedium
Test data
A message referring to a user or an object in a language requiring agreement
Expected result
Translators can supply variants rather than being forced into a single form that is grammatically wrong for some cases.
L10N-10

Format dates by locale rather than by a fixed pattern

TypeBoundaryPriorityHigh
Test data
The same date rendered in locales using day first, month first and year first ordering
Expected result
Each renders in its locale convention, and any ambiguous date is unambiguous in context, since 03/04 means two different days depending on the reader.
L10N-11

Parse a date the user types in their own locale

TypeNegativePriorityHigh
Test data
A typed date in day first format submitted from a locale the server assumes to be month first
Expected result
Interpreted using the user locale, and the parsed date is echoed back unambiguously so a misinterpretation is visible before it is saved.
L10N-12

Handle number formatting and separators

TypeBoundaryPriorityHigh
Test data
A thousands separated decimal in a locale using comma decimals, and one using space grouping
Expected result
Rendered per locale, and user entered numbers are parsed with the locale separator rather than assuming a full stop, which would change the value by a factor of a thousand.
L10N-13

Format currency correctly per locale and currency

TypeBoundaryPriorityHigh
Test data
One currency shown in two locales, and a currency with no minor unit
Expected result
Symbol position, separators and decimal places follow the locale and the currency, and a zero decimal currency is never shown with two decimals.
L10N-14

Never convert currency implicitly with the language

TypeSecurityPriorityHigh
Test data
Switch language on a page showing a price and a total
Expected result
Amount and currency are unchanged. Language is not a currency selector, and any conversion is explicit with a stated rate.
L10N-15

Render right to left layouts correctly

TypeCompatibilityPriorityHigh
Test data
A right to left language across forms, tables, navigation, icons and progress indicators
Expected result
Layout mirrors including alignment and directional icons, while content that must not mirror, such as phone numbers and code, stays left to right.
L10N-16

Handle mixed direction text in one string

TypeBoundaryPriorityMedium
Test data
A right to left sentence containing a Latin product name, a number and a URL
Expected result
Each segment renders in the correct direction with punctuation in the expected position rather than jumping to the wrong end of the line.
L10N-17

Accept and preserve international names

TypeNegativePriorityHigh
Test data
Names with diacritics, an apostrophe, a hyphen, a single word name, a very long name and non Latin scripts
Expected result
Each accepted and stored unchanged, and displayed identically in the interface, in notifications and in exports with no substitution or truncation.
L10N-18

Handle international addresses and postcodes

TypeNegativePriorityHigh
Test data
An address with no postcode, an alphanumeric postcode, a region that is not a state and a single line address
Expected result
Form adapts to the country rather than enforcing one country field set, and no valid address is rejected for missing a field it does not have.
L10N-19

Handle international phone numbers

TypeNegativePriorityHigh
Test data
Numbers with country codes of different lengths, with and without a leading zero, and with spaces and brackets
Expected result
Normalised to a documented format, validated by country rather than by one length rule, and stored so it can be dialled back correctly.
L10N-20

Sort and compare text by locale collation

TypeBoundaryPriorityHigh
Test data
A list containing accented characters, and one in a non Latin script
Expected result
Sorted by locale collation rather than byte order, so accented characters are not grouped after every unaccented one.
L10N-21

Search and filter with accents and case insensitivity

TypeFunctionalPriorityHigh
Test data
A search for a term without accents against records containing them, and mixed case in a non Latin script
Expected result
Matches are found, since accent sensitive search silently returns nothing and reads to the user as missing data.
L10N-22

Apply the correct timezone alongside the locale

TypeBoundaryPriorityHigh
Test data
A timestamp shown to users in two timezones, and a calendar date such as a birthday
Expected result
Timestamps convert to the viewer timezone with the zone shown, while a calendar date is not converted at all and stays the same date everywhere.
L10N-23

Respect regional conventions beyond language

TypeFunctionalPriorityMedium
Test data
First day of the week, 12 against 24 hour time, measurement units and paper size
Expected result
Each follows the locale rather than the language alone, since two locales sharing a language differ on all of these.
L10N-24

Handle text length limits after translation

TypeBoundaryPriorityHigh
Test data
A field with a character limit holding translated content, and a message subject in an expanding language
Expected result
Limits are validated per language and measured in characters rather than bytes, so a multibyte string is not truncated mid character.
L10N-25

Encode content correctly end to end

TypeNegativePriorityHigh
Test data
Non Latin content through the interface, the API, the database, an export and an email
Expected result
Characters survive every hop intact, with correct encoding declared on each, and no replacement characters or double encoded sequences appear.
L10N-26

Localise validation and error messages

TypeFunctionalPriorityHigh
Test data
Client validation, server validation and a third party provider error
Expected result
All are translated or handled so an untranslated provider message is replaced, rather than surfacing English text inside a translated interface.
L10N-27

Serve the correct localised URL and metadata

TypeCompatibilityPriorityMedium
Test data
Each language version of a public page, its canonical and alternate declarations and its page metadata
Expected result
Each has a stable URL, declares its language, references its alternates, and carries translated title and description rather than the default language.
L10N-28

Verify with a native reader rather than machine translation

TypeFunctionalPriorityHigh
Test data
One core journey reviewed in each supported language by a fluent speaker
Expected result
Terminology is consistent and contextually correct, since a technically correct translation of an isolated string is frequently wrong for the screen it appears on.

What goes in each field

ID

Required

Stable identifier, prefixed by module.

Test case

Required

What is being verified, in one line.

Type

Functional, negative, boundary, security, state, performance, accessibility or compatibility. Use it to check coverage is spread rather than clustered on the happy path.

Priority

Risk based. Anything that blocks a task in a supported language, corrupts a name, or formats a number or date so it means something different is High. Cosmetic truncation is Medium unless it hides an action.

Test data

The specific values, including the invalid and boundary ones.

Expected result

Required

The precise observable outcome, including message text where the wording itself is the requirement.

How To Use This

Switch to German and look at the buttons

Translated strings are the part that gets planned. These four conditions are where localisation actually breaks.

Pick the language that expands most

German or Finnish on buttons, tabs and table headers. Labels that no longer fit get clipped or overlap, and sometimes an action becomes unreachable entirely.

Look for concatenated sentences

A count plus a noun plus a date assembled from fragments cannot be translated correctly, because word order differs. Full sentences with placeholders are the only version that works.

Type a date in the local format

Submit day first from a locale the server assumes is month first. 03/04 is two different days, and on a contract or a booking that is not a formatting issue.

Enter a number with a comma decimal

A locale using comma decimals parsed as though it used a full stop changes the value by a factor of a thousand. Nothing errors and the record looks plausible.

What Most Sets Miss

Why localisation defects change meaning

The assumption behind most localisation work is that it is a translation problem, and the string catalogue is the easy part. Layout is where it first goes visibly wrong: several languages expand text substantially, so buttons, tabs, navigation and table headers designed around English labels clip, overlap or push actions off screen. That is testable by switching language and looking, and it is frequently deferred until after launch because the English build looks finished.

The structural problem is concatenation. A message assembled from a count, a noun and a date in code cannot be translated correctly into any language whose word order differs, and no translator can fix it because they never see the whole sentence. Full sentences as single translatable strings with placeholders are the only workable form. Plural rules sit alongside it: a singular and plural pair covers English and is wrong for languages with three or more forms, so a count of two, five and twenty one need distinct cases.

Numbers and dates are where a localisation defect stops being cosmetic and starts changing meaning. A decimal comma parsed as a thousands separator alters a value by a factor of a thousand, silently, with a result that looks entirely plausible in the record. A date typed day first and interpreted month first produces a different day, which on a contract, a booking or a claim is consequential. Both are fixed by parsing with the user locale and echoing the interpreted value back unambiguously before it is saved. The related trap is currency: switching language must never change the amount or the currency, because language is not a currency selector.

Finally, the data layer needs its own attention. Sorting by byte order rather than locale collation groups every accented name after every unaccented one, which looks broken to anyone whose name has an accent. Accent sensitive search silently returns nothing and reads to the user as missing data rather than as a search limitation. Names, addresses and phone numbers vary far more than a single field set allows, and rejecting a valid address because the country has no postcode is a hard blocker. And encoding needs verifying at every hop, since a character that survives the interface and the API can still arrive as a replacement character in an export or an email.

Suggest an improvement

Launching in new languages or markets?

QAble tests localisation end to end, including layout under expansion, right to left mirroring, locale formatting and parsing, collation and native language review.

Localization testing services

More test case sets

View all

Test cases for a login page

Test cases
25 cases across functional, negative, boundary, security, session and accessibility paths, including account enumeration and lockout.

Test cases for a registration form

Test cases
28 cases covering validation, duplicate accounts, email verification, password rules and the enumeration leak most signup forms ship with.

Test cases for search functionality

Test cases
28 cases across relevance, partial and fuzzy matching, filters, pagination, empty states, injection attempts and performance under load.

Test cases for a shopping cart

Test cases
27 cases on quantity limits, price recalculation, stock changes, coupon stacking, guest to account merge and cart persistence.

Test cases for checkout and payment

Test cases
30 cases including 3D Secure, declines, timeouts, duplicate charges, idempotency, refunds and partial captures.

Test cases for file upload

Test cases
28 cases on size and type limits, spoofed content types, malicious filenames, progress, resume, virus scanning and storage limits.

Test cases for forgot password

Test cases
26 cases on reset token expiry, single use enforcement, session invalidation and the enumeration and rate limit gaps that are routine here.

Test cases for OTP verification

Test cases
26 cases on expiry, resend throttling, attempt limits, code reuse, delivery failure and the brute force window teams forget to close.

Test cases for user roles and permissions

Test cases
26 cases on horizontal and vertical privilege checks, direct object access, role changes mid-session and permission inheritance.

Test cases for form validation

Test cases
27 rules-based cases on required fields, length and numeric boundaries, client and server parity, hidden field tampering and error accessibility.

Test cases for a date picker

Test cases
26 cases on timezone shifts, ambiguous day and month order, impossible dates, min and max limits, leap years and keyboard operation.

Test cases for pagination

Test cases
24 cases on ordering stability, records changing mid-session, page size caps, deep offset cost, permission-filtered totals and state restore.

Test cases for push notifications

Test cases
26 cases on app states, deep link routing, token release on sign out, lock screen privacy, preferences, provider failures and platform differences.

Test cases for reports and data export

Test cases
25 cases on permission filtering in the file, spreadsheet formula injection, encoding, typed numbers and dates, row limits and audit logging.

Test cases for a chatbot

Test cases
28 cases on paraphrased intents, context, fallback loops, human handoff, policy grounding, prompt injection and data scoping.

Test cases for net banking transactions

Test cases
28 cases on duplicate debits from a retried request, concurrent transfers against one balance, daily limits across channels, beneficiary cooling periods, second factor binding and reconciliation.

Test cases for wallet and UPI payments

Test cases
28 cases on payments that time out with no response, idempotency on retry, racing balances, caps across devices, collect request fraud, mandates and refunds.

Test cases for insurance claim submission

Test cases
28 cases on coverage at the date of loss, waiting periods, deductibles and sub limits, exclusions and riders, duplicate claims and settlement reconciliation.

Test cases for patient records in an EHR

Test cases
28 cases on duplicate detection and merge, wrong patient entry, units of measure, allergy and interaction alerting, break glass access and audit of reads.

Test cases for CRM lead management

Test cases
28 cases on duplicate leads under concurrency, routing and the unrouted fallback, round robin races, territory visibility, conversion and bulk import.

Test cases for an ERP purchase order

Test cases
28 cases on approval thresholds, amendments that must reset approval, budget commitment races, over receipt tolerance, three-way match and duplicate invoices.

Test cases for OTT video playback

Test cases
28 cases on bitrate recovery after a dip, DRM renewal mid stream, concurrent stream limits and leaked slots, resume conflicts, ad cue points and offline expiry.

Test cases for game level progression

Test cases
28 cases on save corruption during a crash write, cloud save conflicts, offline queue replay, unlock gating, currency exploits and purchase restore.

Test cases for a REST API

Test cases
28 cases on status code correctness, cross tenant resource access, mass assignment, idempotent retries, cursor pagination, rate limits and contract drift.

Test cases for SSO and social login

Test cases
28 cases on linking an account on an unverified email, state and code replay, redirect allow lists, token signature and issuer, deprovisioning and session rotation.

Test cases for subscription and billing

Test cases
28 cases on mid cycle proration, duplicate and out of order webhooks, renewal double charges, dunning and grace, trials, coupons, metered usage and tax.

Test cases for data tables, filters and sorting

Test cases
28 cases on unstable sorts across pages, filters that must reset pagination, selection surviving a filter change, bulk action scope and export fidelity.

Test cases for session timeout and concurrent login

Test cases
28 cases on tokens that survive sign out, refresh token reuse, idle against absolute lifetime, multi tab expiry, session limits and remote revocation.

Test cases for a multi step form wizard

Test cases
28 cases on values lost to back navigation, refresh and session expiry, step skipping, server side revalidation, duplicate submission and conditional branches.

Test cases for email verification

Test cases
28 cases on token reuse and expiry, invalidating earlier links, account enumeration, header injection, safe address change and mail scanner prefetching.

Test cases for dashboards and analytics widgets

Test cases
28 cases on reconciling against source rows, widgets that disagree, timezone aggregation, zero baselines, no data shown as zero and permission leaks in aggregates.

Test cases for booking and reservation

Test cases
28 cases on concurrent bookings for the last slot, inventory holds that leak, payment without a booking, cancellation boundaries and channel sync.

Test cases for mobile app install and update

Test cases
28 cases on migration chains across skipped versions, crashes during post upgrade migration, forced update lockouts, deep links and clean reinstall.

Test cases for accessibility (WCAG 2.2 AA)

Test cases
28 cases on keyboard only completion, focus management, live region announcements, contrast, reflow at 320 pixels, target size and screen reader verification.

Test cases for performance and load

Test cases
28 cases on spikes with no ramp, recovery after peak, soak and leak detection, pool exhaustion, cold caches, retry storms and data correctness under load.

Test cases for the OWASP Top 10

Test cases
28 cases on broken access control, mass assignment, injection across every input surface, credential stuffing, session invalidation, SSRF and exposed secrets.

Test cases for cross browser compatibility

Test cases
28 cases on storage that throws in private mode, blocked third party cookies, engine date parsing, mobile viewport units, in app browsers and ad blockers.

Test cases for database and data integrity

Test cases
28 cases on uniqueness under concurrency, lost updates, counter races, orphaned rows, migration and backfill safety, replica lag and verified restores.

Want your localisation proven, not assumed?

QAble covers functional, layout and locale data paths with ISTQB-certified engineers. Start with a free QA audit of your product.

Talk to QA Advisor