Browse the Knowledge Hub56 resources
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
RequiredStable identifier, prefixed by module.
Test case
RequiredWhat 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
RequiredThe precise observable outcome, including message text where the wording itself is the requirement.
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.
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 improvementLaunching 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 servicesMore test case sets
View allTest cases for a login page
Test cases25 cases across functional, negative, boundary, security, session and accessibility paths, including account enumeration and lockout.Test cases for a registration form
Test cases28 cases covering validation, duplicate accounts, email verification, password rules and the enumeration leak most signup forms ship with.Test cases for search functionality
Test cases28 cases across relevance, partial and fuzzy matching, filters, pagination, empty states, injection attempts and performance under load.Test cases for a shopping cart
Test cases27 cases on quantity limits, price recalculation, stock changes, coupon stacking, guest to account merge and cart persistence.Test cases for checkout and payment
Test cases30 cases including 3D Secure, declines, timeouts, duplicate charges, idempotency, refunds and partial captures.Test cases for file upload
Test cases28 cases on size and type limits, spoofed content types, malicious filenames, progress, resume, virus scanning and storage limits.Test cases for forgot password
Test cases26 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 cases26 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 cases26 cases on horizontal and vertical privilege checks, direct object access, role changes mid-session and permission inheritance.Test cases for form validation
Test cases27 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 cases26 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 cases24 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 cases26 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 cases25 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 cases28 cases on paraphrased intents, context, fallback loops, human handoff, policy grounding, prompt injection and data scoping.Test cases for net banking transactions
Test cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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 cases28 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.