InquirerPy Python localization helps developers translate interactive command-line questions without changing the values a program returns or the permissions a choice represents. If you are looking for InquirerPy select-menu translations, Choice values, validators, checkbox prompts, fuzzy search, Unicode and keyboard testing, start with one separation: the visible name of a choice is written for a person, while its value is written for the application. Translating ‘Restricted’ must not turn a restricted deposit into a public one.
InquirerPy provides prompts for selecting options, entering information and reviewing answers, but the application still owns its language catalogs, validation rules and irreversible operations. A clear prompt can mislead a person if a default has shifted, a transformer is confused with a filter, or a completion message claims success before the archive service saves anything. We follow a fictional archive coordinator who is preparing a digital collection for accession, using that everyday workflow to make each design decision concrete.
This guide explains how to localize InquirerPy choice objects, checkbox and select menus, fuzzy matching, dynamic questions, invalid_message, result filters, language selection, terminal width, right-to-left scripts and release testing. It includes a practical architecture, detailed investigations, failure recovery, a four-week implementation plan and questions readers can use for an acceptance review. The examples show responsible application design; they do not suggest the prompt library automatically translates itself.
Quick answer: translated words, unchanged decisions
- Write down the reader’s real task: classify files, choose an access policy, and submit an accession request.
- Separate the visible question from accession identifier, policy code and actual deposit state.
- Choose a maintained localization catalog with clear fallbacks and context.
- Keep machine keys, permission codes and result identifiers stable.
- Test defaults, validation, selection, cancellation and partial completion.
- Review mixed-script text, terminal width, keyboard operation and redirected execution.
- Do not announce success until the authoritative state confirms it.
- Ship packaged language resources and verify tasks with native speakers.
A real task before a glossary
This guide is for Python developers and translators building a global software experience, including learners who are moving from one-language scripts to maintainable multilingual tools. The scenario is a digital-archive accession wizard, a fictional teaching example rather than a commercial service. Our archive coordinator needs to classify files, choose an access policy, and submit an accession request. The program can help by asking one understandable question at a time, but every answer must lead to the same authorized decision regardless of the display language. We will judge the interface by the reader’s ability to complete that task, rather than by the proportion of string literals replaced.
Picture the last step. The operator has finished answering, but the external system may still be validating credentials, saving records or waiting for review. The question runner knows that an answer was collected; it may not know whether the operation has committed. This is why a translated ‘Completed’ message is often the most consequential sentence in a program. It makes a factual claim. If that claim is unsupported, an excellent translation makes misinformation more persuasive. By keeping accession identifier, policy code and actual deposit state as separate authoritative data, the same workflow can tell the truth in every language.
What InquirerPy provides and what it does not
InquirerPy is a library for interactive terminal questions, not a complete language service, authorization layer or record system. The following capabilities can support a localized interface when used deliberately. Always check the exact version and feature set actually installed; documentation may describe optional paths or versions that your deployment does not support.
1. Prompt surface and input
The documented alternate syntax exposes inquirer.text, inquirer.select, inquirer.checkbox and other interactive controls; each prompt still receives its own message and options. In a digital-archive accession wizard, the practical question is whether the archive coordinator can understand the effect of an answer without the application weakening any existing rule. Keep a trace of what was rendered, what value was returned and what durable state followed. That trace is the difference between testing a sentence and testing a feature.
2. Choice identity and return values
Choice objects can associate a stable value with a human-readable name, avoiding the dangerous practice of storing translated captions. In a digital-archive accession wizard, the practical question is whether the archive coordinator can understand the effect of an answer without the application weakening any existing rule. Keep a trace of what was rendered, what value was returned and what durable state followed. That trace is the difference between testing a sentence and testing a feature.
3. Interaction variants
Separator is a visible but nonselectable grouping item; it should never be transformed into a policy value. In a digital-archive accession wizard, the practical question is whether the archive coordinator can understand the effect of an answer without the application weakening any existing rule. Keep a trace of what was rendered, what value was returned and what durable state followed. That trace is the difference between testing a sentence and testing a feature.
4. Validation and business rules
The select and checkbox prompts can validate input and show localized invalid_message text, with the predicate remaining an application rule. In a digital-archive accession wizard, the practical question is whether the archive coordinator can understand the effect of an answer without the application weakening any existing rule. Keep a trace of what was rendered, what value was returned and what durable state followed. That trace is the difference between testing a sentence and testing a feature.
5. State and visible outcomes
The transformer parameter changes visible result formatting; filter can change the actual returned result, and these are not interchangeable. In a digital-archive accession wizard, the practical question is whether the archive coordinator can understand the effect of an answer without the application weakening any existing rule. Keep a trace of what was rendered, what value was returned and what durable state followed. That trace is the difference between testing a sentence and testing a feature.
6. Locale and terminal reality
InquirerPy is built around terminal interaction and keyboard bindings; behavior must be tested in the runtime and terminal versions the application actually ships. In a digital-archive accession wizard, the practical question is whether the archive coordinator can understand the effect of an answer without the application weakening any existing rule. Keep a trace of what was rendered, what value was returned and what durable state followed. That trace is the difference between testing a sentence and testing a feature.
Four separate layers to keep the system trustworthy
Domain identity
The authority is accession identifier, policy code and actual deposit state. Names, stored IDs, access permissions and audit outcomes belong to the data model, not to the message file. If a translated choice changes a database enum or an event identity, a presentational change has crossed into the wrong layer. Begin with typed values and explicit validation. Translate the explanation of each value, but preserve its identity.
Application rules
Validation, branching, authorization and persistence must execute independently of the user’s language. Localized wording may guide someone toward a valid answer, but cannot replace a rule that checks that answer. When the code sees a stable return value, it can make the same decision across languages. When it compares translated labels, the program can appear to work until a new locale or editor changes the caption.
Translation catalog
Use one maintained source of message keys, context notes and human review for each supported language. Translate complete messages, not fragments assembled in a source-language order. Record placeholders and grammar requirements so translators know whether a number is a count, a deadline or a monetary amount. Establish a deliberate fallback and treat missing high-consequence messages as release defects.
Terminal presentation
Fonts, display-cell widths, combining characters, right-to-left runs, keyboard layouts, standard input redirection and ANSI styling vary in the real world. A library cannot make every terminal behave identically. Test the actual support matrix, including a no-color mode and a narrow window. A usable translation must remain visible at the moment of decision.
Evidence and communication
A successful prompt is an interaction event, not necessarily a successful server operation. Distinguish draft, submitted, queued, denied, failed, committed and unknown. Show a receipt only when an authoritative source supplies one. The same principle governs translations of progress messages, warnings and error summaries. Do not fill an evidence gap with confident prose.
Privacy and recovery
Translated prompts can still leak personal data through debug logs, shell history, crash output or support screenshots. Restrict information collection to what the task needs. When a request fails, tell the operator what is known, whether retry might duplicate an operation and how to recover. Test the failure path in every supported language, not only English.
An eight-stage implementation journey
Draw the user journey
Trace classify files, choose an access policy, and submit an accession request from first screen through a verified or unverified result. Annotate where language changes the reader’s understanding, where code accepts data and where an external service makes a durable decision. Include conditions that are hard to reproduce in a happy-path demonstration, such as expired permissions, a missing network response and an interrupted terminal session.
Inventory every visible message
Record prompt questions, option labels, hints, validation messages, disabled reasons, help text, warnings, receipts, time formatting and cancellation notices. Each key needs a domain description that a translator can understand without seeing internal code. Mark which messages carry security, money, privacy, accessibility or irreversible-operation consequences.
Lock stable values
Define the machine identities that must remain unchanged when a message is edited: accession identifier, policy code and actual deposit state. Return canonical identifiers or convert indexes to IDs before business rules execute. Do not use the displayed order as a database key, and do not build branch conditions by comparing localized phrases.
Build the locale layer
Choose a catalog resource appropriate to Python, a language-selection precedence and a missing-key policy. Centralize lookup, placeholders and locale-aware number or date formatting. Use separate keys for unrelated meanings of a short word. Preserve the distinction between translating what a user sees and changing what an application actually stores.
Make error states explicit
Write localized outcomes for invalid data, forbidden actions, intentional cancellation, a network timeout and an uncertain commit. Avoid one generic ‘Something went wrong’ sentence as the only recovery route. Tell users what they can retry safely and what they should verify first. A failure message should not imply that an irreversible action was rolled back unless there is proof.
Test keyboards and scripts
Use keyboard-only interaction, actual supported terminal emulators and multiple widths. Enter CJK, combining marks, accented characters, emoji and mixed right-to-left identifiers as appropriate. Observe focus and selection, not just screenshot appearance. Compare raw strings and stable returned values with the rendered result.
Run native-language task reviews
Give a reviewer a goal instead of telling them which keys to press. Ask them to explain the effect of every consequential decision in their own words. Compare their expectations with the application outcome. This exposes ambiguity that a literal bilingual checklist or an automated string-coverage report might miss.
Ship and reconcile
Install a clean release containing exactly the chosen dependencies and localization resources. Check fallback, missing files, interaction without a terminal, output redirection and cancellation. Compare authoritative state after each task. Document supported locales and limitations, then keep regression cases for every defect found during review.
Thirty practical design decisions: examples, corrections and evidence
The following investigations turn abstract principles into specific implementation questions. They are organized around InquirerPy behavior and the a digital-archive accession wizard scenario. Each includes a potential user-visible failure, an engineering correction and a test that can disprove a false sense of readiness. The goal is to teach what to inspect, not to promise that copying a string will fix a domain rule.
1. Stable Choice values
Localized policy labels could replace exact internal codes if the same string is reused for display and storage. Words are an interface between a person and an operation; the operation itself belongs to the application’s data model. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Use Choice objects with immutable values and translated names, so policy logic branches on codes rather than readable captions. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. A natural sentence is not evidence that the returned value is right.
Select every policy in English and two target languages and compare stored accession metadata. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
2. Separators are not decisions
A section header in a long access-policy menu may accidentally become an option if represented as ordinary text. A successful translation lets readers predict what will happen, including the limits of the system’s authority. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Use the documented nonselectable Separator for grouping rather than adding a fake choice to the returned list. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. An elegant label can still point to the wrong record if a positional assumption is left in code.
Navigate through the entire list and confirm separators cannot be submitted. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
3. Select defaults
An option originally at position zero may move after locale-aware sorting, creating an unsafe preselection. Choose explicit stable identifiers and outcome states before editing visible strings or button labels. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Resolve defaults using canonical values and then find the correct visible choice for each localized list. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. Treat the tester’s interpretation as evidence alongside the application’s actual return value.
Record the highlighted option and returned policy for every supported locale. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
4. Checkbox multiselect
Several archival categories can be chosen together, and display order must not determine the selected set. Locale changes are a useful stress test of assumptions embedded in an English-first implementation. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Store a set of immutable category IDs; validate compatibility and minimum selections using actual values. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. A screen that hides uncertainty is not genuinely helpful, whatever language it uses.
Choose the same categories in a different order and compare the resulting metadata sets. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
5. Transformer or filter
A translated summary may look attractive but a result filter can quietly alter the real answer. An irreversible operation needs both understandable copy and an independent authorization check. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Use transformer for presentation-only formatting and reserve filter for explicit, tested conversions of returned data. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. The interface should not create permissions or facts that the underlying service never granted.
Compare the displayed summary, raw return value and final database representation. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
6. Input validation
A translated message may say a collection title is required while whitespace-only titles pass unchecked. Testing only the happy path misses the situation where translation most affects trust: uncertain or failed results. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Maintain a language-independent validation predicate and pair it with clear local-language invalid_message wording. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. Good localization is a joint exercise in precise language, robust software and observable behavior.
Try empty, whitespace, valid multilingual and overlong titles against every locale. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
7. Fuzzy searching
The user may search for a policy using a local synonym that an English-only matching layer cannot find. Words are an interface between a person and an operation; the operation itself belongs to the application’s data model. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Build a locale-aware search surface for approved labels and synonyms while returning stable policy identifiers. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. A natural sentence is not evidence that the returned value is right.
Query common synonyms and confirm the same underlying option appears. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
8. Dynamic lists
An access-policy list returned by a service can be incomplete or temporarily out of date. A successful translation lets readers predict what will happen, including the limits of the system’s authority. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Preserve server capability identifiers and authorization, using translated descriptions only for presentation. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. An elegant label can still point to the wrong record if a positional assumption is left in code.
Inject a stale option and check that submission fails safely with an actionable explanation. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
9. Confirmation polarity
A negative question such as ‘Do not keep this private?’ can reverse what Yes means in translation. Choose explicit stable identifiers and outcome states before editing visible strings or button labels. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Choose affirmative action-specific confirmations and show the consequence before accepting the answer. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. Treat the tester’s interpretation as evidence alongside the application’s actual return value.
Ask native speakers what action Yes performs, then exercise both answers. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
10. Question identifiers
In classic syntax, a name may be used as the result dictionary key and must not change with the label. Locale changes are a useful stress test of assumptions embedded in an English-first implementation. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Keep internal question names stable; place each natural-language question in a separate catalog entry. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. A screen that hides uncertainty is not genuinely helpful, whatever language it uses.
Compare the returned dictionary schema across locales and ensure integrations still consume it. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
11. Conditional branching
Later prompts may depend on a previous confidentiality choice, not the natural-language spelling of the answer. An irreversible operation needs both understandable copy and an independent authorization check. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Branch on canonical values and build subsequent questions from application state, never from translated phrases. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. The interface should not create permissions or facts that the underlying service never granted.
Switch language after the first question and verify exactly the same subsequent branch. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
12. Prechecked consent
A default checked checkbox can be experienced as consent even when the person has not actively selected it. Testing only the happy path misses the situation where translation most affects trust: uncertain or failed results. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Review defaults as permission decisions, not visual style, and require explicit action where appropriate. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. Good localization is a joint exercise in precise language, robust software and observable behavior.
Run a first-use session under several locales and inspect every enabled option. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
13. Cancel versus No
Closing a prompt, pressing Ctrl-C and selecting No may have different consequences for a pending deposit. Words are an interface between a person and an operation; the operation itself belongs to the application’s data model. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Model aborted, declined and submitted outcomes separately rather than collapsing them into one false result. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. A natural sentence is not evidence that the returned value is right.
Cancel at every step and verify no record is marked successfully deposited. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
14. Keyboard guidance
An instruction might promise a shortcut that is unavailable in a target terminal or keyboard layout. A successful translation lets readers predict what will happen, including the limits of the system’s authority. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Translate the intended action and document only supported key bindings, with an alternative when possible. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. An elegant label can still point to the wrong record if a positional assumption is left in code.
Use keyboard-only navigation in the actual supported terminals. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
15. Long translated labels
A detailed access-policy description can wrap over multiple lines and hide the focused selection. Choose explicit stable identifiers and outcome states before editing visible strings or button labels. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Keep short labels and move longer consequences into contextual guidance where the UI allows. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. Treat the tester’s interpretation as evidence alongside the application’s actual return value.
Test narrow terminals and CJK wide characters while moving focus through the options. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
16. Unicode text preservation
Names can contain combining marks and non-Latin scripts that must not be lost by normalization assumptions. Locale changes are a useful stress test of assumptions embedded in an English-first implementation. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Preserve actual user input and distinguish display adjustment from any documented storage-normalization rule. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. A screen that hides uncertainty is not genuinely helpful, whatever language it uses.
Compare entered names, exported records and display after a round trip. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
17. Bidirectional text
Arabic instructions next to Latin accession IDs can appear in confusing visual order. An irreversible operation needs both understandable copy and an independent authorization check. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Keep the accession code separate from prose and inspect actual mixed-direction rendering rather than rewriting IDs. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. The interface should not create permissions or facts that the underlying service never granted.
Compare raw return values with screenshots under right-to-left locales. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
18. Validation severity
A harmless missing description and a forbidden public release should not produce the same vague message. Testing only the happy path misses the situation where translation most affects trust: uncertain or failed results. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Classify domain and formatting errors before translating them; explain what action is available next. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. Good localization is a joint exercise in precise language, robust software and observable behavior.
Induce each failure independently and ask reviewers to explain the appropriate response. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
19. Plural grammar
A count of one file and one hundred files may need different sentence structures in another language. Words are an interface between a person and an operation; the operation itself belongs to the application’s data model. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Translate complete plural-sensitive messages rather than concatenating English fragments. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. A natural sentence is not evidence that the returned value is right.
Test zero, one, two and many attachments using approved translations. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
20. Date and timezone
A deposit timestamp can be formatted locally but must not silently change the authoritative instant. A successful translation lets readers predict what will happen, including the limits of the system’s authority. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Use explicit timezone and locale formatting, leaving machine timestamps unmodified. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. An elegant label can still point to the wrong record if a positional assumption is left in code.
Compare the same UTC event in different locale displays and verify the stored instant. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
21. Locale change mid-flow
A user can change language after entering a policy but before seeing the final confirmation. Choose explicit stable identifiers and outcome states before editing visible strings or button labels. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Re-render subsequent prompts from the selected locale without converting earlier returned values. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. Treat the tester’s interpretation as evidence alongside the application’s actual return value.
Change locale between steps and inspect the final accession data. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
22. Missing string fallback
An absent translation for a sensitive restriction can leave the operator with an obscure technical key. Locale changes are a useful stress test of assumptions embedded in an English-first implementation. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Choose a visible, safe fallback and gate high-risk missing messages in release tests. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. A screen that hides uncertainty is not genuinely helpful, whatever language it uses.
Temporarily remove the relevant key and verify the expected fallback or failed build. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
23. Sensitive details
File names or depositor contact details may appear in a debug print of all answers. An irreversible operation needs both understandable copy and an independent authorization check. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Redact diagnostics and prevent personal data from reaching support screenshots or terminal logs. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. The interface should not create permissions or facts that the underlying service never granted.
Cause a validation exception and inspect logs for identifiers and private content. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
24. Noninteractive context
A background import or CI process cannot answer an interactive select prompt. Testing only the happy path misses the situation where translation most affects trust: uncertain or failed results. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Provide flags or a separate noninteractive input route and reject unsupported TTY absence promptly. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. Good localization is a joint exercise in precise language, robust software and observable behavior.
Redirect stdin and ensure the process does not hang or invent a choice. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
25. Review summary truth
A screen can say ‘Deposited’ when it merely collected the last answer, before the server accepted the files. Words are an interface between a person and an operation; the operation itself belongs to the application’s data model. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Separate proposed, queued and confirmed states and show a receipt only after authoritative confirmation. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. A natural sentence is not evidence that the returned value is right.
Force a server failure and check that no saved-state claim is displayed. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
26. Archive terminology
The word ‘Open’ may describe access policy or the act of opening an uploaded file, creating ambiguity. A successful translation lets readers predict what will happen, including the limits of the system’s authority. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Provide context-rich message keys and review each term against the real archival rule. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. An elegant label can still point to the wrong record if a positional assumption is left in code.
Have a domain reviewer perform the task and explain each visible option. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
27. Result filter safety
An innocent-looking filter might turn a blank string into a default approval state. Choose explicit stable identifiers and outcome states before editing visible strings or button labels. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Restrict data transformations to explicit business rules and test unusual inputs rather than relying on presentation wording. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. Treat the tester’s interpretation as evidence alongside the application’s actual return value.
Try blank, null-like and unexpected values across locales and compare actual output types. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
28. Version compatibility
InquirerPy behavior and prompt parameters can change between installed versions and documentation examples. Locale changes are a useful stress test of assumptions embedded in an English-first implementation. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Pin a supported release, check actual APIs and re-run all localized interaction tests after upgrades. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. A screen that hides uncertainty is not genuinely helpful, whatever language it uses.
Install a clean release and exercise each prompt type with packaged catalogs. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
29. Accessible selection
Color-only highlighting may disappear in monochrome environments and make checked options indistinguishable. An irreversible operation needs both understandable copy and an independent authorization check. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Use meaningful indicators and wording independent of ANSI color, then verify keyboard focus remains discoverable. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. The interface should not create permissions or facts that the underlying service never granted.
Turn off color and ask testers to identify every chosen option. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
30. Cross-session language
Two users working in different languages can share a service but must not leak locale preferences to each other. Testing only the happy path misses the situation where translation most affects trust: uncertain or failed results. For the archive coordinator, the practical concern is whether the displayed instruction can be followed without making an unintended change to accession identifier, policy code and actual deposit state.
Scope locale resolution to the session or request instead of mutable global message state. Do not solve this by placing more translated text beside unchanged faulty logic. Instead, identify the exact value that code will act on, and decide how a reader will recognize the operation before committing it. Good localization is a joint exercise in precise language, robust software and observable behavior.
Interleave two archive sessions and compare their output language and stored values. Record a source-language baseline, the tested target language and the actual persisted or rejected state. A reviewer should be able to explain the result from the visible words, while an engineer can prove the stored identity and permission were correct. Make that comparison repeatable after dependency upgrades.
Twelve focused troubleshooting laboratories
These exercises deliberately turn the first twelve concepts into incidents. They illustrate how a maintainer can triage a multilingual complaint without treating every unexpected screen as a translation-only problem. Log the library version, exact terminal, locale, raw returned value and authoritative state. Never put confidential material in the test record.
Laboratory 1: Stable Choice values
Symptom: Localized policy labels could replace exact internal codes if the same string is reused for display and storage. Reproduce the report in French using a known test record, then check whether the returned choice or input differs from the source-language baseline. A change in wording is acceptable; a change in meaning, permission or outcome requires diagnosis.
Repair: Use Choice objects with immutable values and translated names, so policy logic branches on codes rather than readable captions. Verification: Select every policy in English and two target languages and compare stored accession metadata. Finally repeat the test with an invalid answer, a cancel path or a simulated service failure. The interface must explain the actual result, not just present a reassuring successful path.
Laboratory 2: Separators are not decisions
Symptom: A section header in a long access-policy menu may accidentally become an option if represented as ordinary text. Reproduce the report in Arabic using a known test record, then check whether the returned choice or input differs from the source-language baseline. A change in wording is acceptable; a change in meaning, permission or outcome requires diagnosis.
Repair: Use the documented nonselectable Separator for grouping rather than adding a fake choice to the returned list. Verification: Navigate through the entire list and confirm separators cannot be submitted. Finally repeat the test with an invalid answer, a cancel path or a simulated service failure. The interface must explain the actual result, not just present a reassuring successful path.
Laboratory 3: Select defaults
Symptom: An option originally at position zero may move after locale-aware sorting, creating an unsafe preselection. Reproduce the report in Japanese using a known test record, then check whether the returned choice or input differs from the source-language baseline. A change in wording is acceptable; a change in meaning, permission or outcome requires diagnosis.
Repair: Resolve defaults using canonical values and then find the correct visible choice for each localized list. Verification: Record the highlighted option and returned policy for every supported locale. Finally repeat the test with an invalid answer, a cancel path or a simulated service failure. The interface must explain the actual result, not just present a reassuring successful path.
Laboratory 4: Checkbox multiselect
Symptom: Several archival categories can be chosen together, and display order must not determine the selected set. Reproduce the report in Hindi using a known test record, then check whether the returned choice or input differs from the source-language baseline. A change in wording is acceptable; a change in meaning, permission or outcome requires diagnosis.
Repair: Store a set of immutable category IDs; validate compatibility and minimum selections using actual values. Verification: Choose the same categories in a different order and compare the resulting metadata sets. Finally repeat the test with an invalid answer, a cancel path or a simulated service failure. The interface must explain the actual result, not just present a reassuring successful path.
Laboratory 5: Transformer or filter
Symptom: A translated summary may look attractive but a result filter can quietly alter the real answer. Reproduce the report in German using a known test record, then check whether the returned choice or input differs from the source-language baseline. A change in wording is acceptable; a change in meaning, permission or outcome requires diagnosis.
Repair: Use transformer for presentation-only formatting and reserve filter for explicit, tested conversions of returned data. Verification: Compare the displayed summary, raw return value and final database representation. Finally repeat the test with an invalid answer, a cancel path or a simulated service failure. The interface must explain the actual result, not just present a reassuring successful path.
Laboratory 6: Input validation
Symptom: A translated message may say a collection title is required while whitespace-only titles pass unchecked. Reproduce the report in Korean using a known test record, then check whether the returned choice or input differs from the source-language baseline. A change in wording is acceptable; a change in meaning, permission or outcome requires diagnosis.
Repair: Maintain a language-independent validation predicate and pair it with clear local-language invalid_message wording. Verification: Try empty, whitespace, valid multilingual and overlong titles against every locale. Finally repeat the test with an invalid answer, a cancel path or a simulated service failure. The interface must explain the actual result, not just present a reassuring successful path.
Laboratory 7: Fuzzy searching
Symptom: The user may search for a policy using a local synonym that an English-only matching layer cannot find. Reproduce the report in Spanish using a known test record, then check whether the returned choice or input differs from the source-language baseline. A change in wording is acceptable; a change in meaning, permission or outcome requires diagnosis.
Repair: Build a locale-aware search surface for approved labels and synonyms while returning stable policy identifiers. Verification: Query common synonyms and confirm the same underlying option appears. Finally repeat the test with an invalid answer, a cancel path or a simulated service failure. The interface must explain the actual result, not just present a reassuring successful path.
Laboratory 8: Dynamic lists
Symptom: An access-policy list returned by a service can be incomplete or temporarily out of date. Reproduce the report in Brazilian Portuguese using a known test record, then check whether the returned choice or input differs from the source-language baseline. A change in wording is acceptable; a change in meaning, permission or outcome requires diagnosis.
Repair: Preserve server capability identifiers and authorization, using translated descriptions only for presentation. Verification: Inject a stale option and check that submission fails safely with an actionable explanation. Finally repeat the test with an invalid answer, a cancel path or a simulated service failure. The interface must explain the actual result, not just present a reassuring successful path.
Laboratory 9: Confirmation polarity
Symptom: A negative question such as ‘Do not keep this private?’ can reverse what Yes means in translation. Reproduce the report in Simplified Chinese using a known test record, then check whether the returned choice or input differs from the source-language baseline. A change in wording is acceptable; a change in meaning, permission or outcome requires diagnosis.
Repair: Choose affirmative action-specific confirmations and show the consequence before accepting the answer. Verification: Ask native speakers what action Yes performs, then exercise both answers. Finally repeat the test with an invalid answer, a cancel path or a simulated service failure. The interface must explain the actual result, not just present a reassuring successful path.
Laboratory 10: Question identifiers
Symptom: In classic syntax, a name may be used as the result dictionary key and must not change with the label. Reproduce the report in Swahili using a known test record, then check whether the returned choice or input differs from the source-language baseline. A change in wording is acceptable; a change in meaning, permission or outcome requires diagnosis.
Repair: Keep internal question names stable; place each natural-language question in a separate catalog entry. Verification: Compare the returned dictionary schema across locales and ensure integrations still consume it. Finally repeat the test with an invalid answer, a cancel path or a simulated service failure. The interface must explain the actual result, not just present a reassuring successful path.
Laboratory 11: Conditional branching
Symptom: Later prompts may depend on a previous confidentiality choice, not the natural-language spelling of the answer. Reproduce the report in Turkish using a known test record, then check whether the returned choice or input differs from the source-language baseline. A change in wording is acceptable; a change in meaning, permission or outcome requires diagnosis.
Repair: Branch on canonical values and build subsequent questions from application state, never from translated phrases. Verification: Switch language after the first question and verify exactly the same subsequent branch. Finally repeat the test with an invalid answer, a cancel path or a simulated service failure. The interface must explain the actual result, not just present a reassuring successful path.
Laboratory 12: Prechecked consent
Symptom: A default checked checkbox can be experienced as consent even when the person has not actively selected it. Reproduce the report in Thai using a known test record, then check whether the returned choice or input differs from the source-language baseline. A change in wording is acceptable; a change in meaning, permission or outcome requires diagnosis.
Repair: Review defaults as permission decisions, not visual style, and require explicit action where appropriate. Verification: Run a first-use session under several locales and inspect every enabled option. Finally repeat the test with an invalid answer, a cancel path or a simulated service failure. The interface must explain the actual result, not just present a reassuring successful path.
Four weeks from prototype to a dependable multilingual release
Week 1 — define scope and evidence
Create a journey map for a digital-archive accession wizard. Identify source language, target locales, all visible strings and the exact stable schema. Capture success and at least five negative outcomes. Review InquirerPy documentation for the installed release. Decide what the application considers submitted, saved and published, and write one acceptance test for each distinction.
Week 2 — implement value-safe translations
Create catalog keys and localized questions, labels, hints and validation messages. Separate display strings from machine values and correct dangerous defaults or position-based logic. Build explicit fallback and placeholders. Review critical permission words with a domain specialist, then run the primary task from beginning to end in two different languages.
Week 3 — stress the terminal experience
Test wide and narrow displays, colorless output, keyboard-only interaction, mixed scripts and interrupted input. Trigger invalid data, insufficient authorization and uncertain server outcomes. Inspect logs for private data. Check output redirection and no-TTY behavior. Have a native-language reviewer complete the task without coaching and record any misunderstood consequence.
Week 4 — package, release and learn
Install the release artifact in a clean environment. Verify the exact catalog and dependency set, every supported locale, fallback behavior and recoverability. Confirm that returning users can find help and that stored accession identifier, policy code and actual deposit state never changes when locale changes. Publish only when a successful and a failed scenario are understandable in each promised language.
A release gate that tests the real user outcome
- Visible questions and explanations use clear purpose-specific translation keys.
- Every programmatic response name or stored identifier is stable across locales.
- Selected values and default selections have end-to-end tests.
- Permission and validation rules are independent from localized wording.
- All success claims are backed by actual service or storage results.
- Cancellation, timeout and incomplete submission are distinguishable states.
- Fallback and missing messages are deliberately reviewed.
- Native-language reviewers complete the principal workflow unaided.
- Unicode rendering and keyboard navigation work on supported terminals.
- No-color and redirected-output modes preserve important meaning.
- Logs and crash reports do not expose private user answers.
- Clean packaged installations include the promised language resources.
- The documented noninteractive route exits predictably when unsupported.
- An updated translation can be rolled back without modifying stored records.
Frequently asked questions
Can InquirerPy automatically translate a wizard?
No. The application supplies catalogs and localized messages while InquirerPy renders and collects interactive input. A useful check is to perform classify files, choose an access policy, and submit an accession request under a different locale and inspect accession identifier, policy code and actual deposit state, not just the words presented on the terminal. If the result is inconsistent, investigate the return values and domain rules before modifying additional copy.
Why do Choice values matter?
They keep operational meaning stable when the visible label changes with language or sorting. A useful check is to perform classify files, choose an access policy, and submit an accession request under a different locale and inspect accession identifier, policy code and actual deposit state, not just the words presented on the terminal. If the result is inconsistent, investigate the return values and domain rules before modifying additional copy.
Does transformer alter the returned answer?
The documented transformer is for display; filter is the path that can change returned data. A useful check is to perform classify files, choose an access policy, and submit an accession request under a different locale and inspect accession identifier, policy code and actual deposit state, not just the words presented on the terminal. If the result is inconsistent, investigate the return values and domain rules before modifying additional copy.
Can a Separator be selected?
A real Separator is not a normal selectable choice and should stay that way. A useful check is to perform classify files, choose an access policy, and submit an accession request under a different locale and inspect accession identifier, policy code and actual deposit state, not just the words presented on the terminal. If the result is inconsistent, investigate the return values and domain rules before modifying additional copy.
Is checkbox ordering significant?
Do not make business logic depend on visible order; use stable IDs and validate the selected set. A useful check is to perform classify files, choose an access policy, and submit an accession request under a different locale and inspect accession identifier, policy code and actual deposit state, not just the words presented on the terminal. If the result is inconsistent, investigate the return values and domain rules before modifying additional copy.
What about fuzzy search in another language?
Match local wording or reviewed aliases, but always return the original stable choice value. A useful check is to perform classify files, choose an access policy, and submit an accession request under a different locale and inspect accession identifier, policy code and actual deposit state, not just the words presented on the terminal. If the result is inconsistent, investigate the return values and domain rules before modifying additional copy.
Are localized defaults harmless?
Not necessarily; a shifted default can alter consent or access, so test them as domain decisions. A useful check is to perform classify files, choose an access policy, and submit an accession request under a different locale and inspect accession identifier, policy code and actual deposit state, not just the words presented on the terminal. If the result is inconsistent, investigate the return values and domain rules before modifying additional copy.
How is cancellation represented?
As a separate outcome whose effects are checked against actual state rather than a generic successful finish. A useful check is to perform classify files, choose an access policy, and submit an accession request under a different locale and inspect accession identifier, policy code and actual deposit state, not just the words presented on the terminal. If the result is inconsistent, investigate the return values and domain rules before modifying additional copy.
Can a translated validator accept different data?
Only if deliberately specified by the product; the accepted domain rule should not drift accidentally. A useful check is to perform classify files, choose an access policy, and submit an accession request under a different locale and inspect accession identifier, policy code and actual deposit state, not just the words presented on the terminal. If the result is inconsistent, investigate the return values and domain rules before modifying additional copy.
What should happen without a TTY?
Use a documented noninteractive route or fail quickly without fabricating an answer. A useful check is to perform classify files, choose an access policy, and submit an accession request under a different locale and inspect accession identifier, policy code and actual deposit state, not just the words presented on the terminal. If the result is inconsistent, investigate the return values and domain rules before modifying additional copy.
Why test right-to-left text?
Display direction can obscure which identifier a message describes without changing the underlying string. A useful check is to perform classify files, choose an access policy, and submit an accession request under a different locale and inspect accession identifier, policy code and actual deposit state, not just the words presented on the terminal. If the result is inconsistent, investigate the return values and domain rules before modifying additional copy.
What counts as a ready release?
Native-language task completion, consistent values, safe failures, clean packaging and verified state. A useful check is to perform classify files, choose an access policy, and submit an accession request under a different locale and inspect accession identifier, policy code and actual deposit state, not just the words presented on the terminal. If the result is inconsistent, investigate the return values and domain rules before modifying additional copy.
Official documentation and further study
These links are primary technical references for InquirerPy and relevant supporting behavior. Read the documentation for the package versions your project actually uses; optional features and terminal quirks require practical verification.
- Official project or crate documentation
- Library APIs and examples
- Validation, runtime or supporting reference
- Additional implementation reference
Read within the larger translation library
For the wider study of meaning, fidelity and responsible practice, see Master Art of Translation — The Complete System for Moving Meaning Between Languages. For the complete applied family, visit the Translate Like a Pro series index. The companion JLine 3 Java localization guide addresses the different problem of translating a line editor with completers and persistent history. The present article remains focused on InquirerPy and its interactive question interfaces.
Conclusion: accuracy a reader can act on
A professional localized InquirerPy application lets the archive coordinator understand each choice while keeping accession identifier, policy code and actual deposit state exactly governed by the original application rules. Language changes the path to understanding, not the authority of data. A good sentence matters, but the complete proof is that a person can act on it correctly, see the actual result, and recover safely when something goes wrong.