How do you translate Frappe and ERPNext when a multilingual business needs understandable forms, custom app labels, invoice descriptions and printed documents? This Frappe localization guide explains translatable strings, per-language CSV files, newer Gettext PO files, user language selection, custom translations and end-to-end ERPNext QA.
An ERP system makes the stakes particularly clear. A sales quotation may need a French description for a customer while its item code, quantity, tax calculation and transaction currency remain exactly the same. Translating an interface or print template must not replace the accounting records that people rely on.
Use this practical Frappe and ERPNext translation walkthrough to identify the source text, choose the correct resource format for the installed major version, mark custom strings properly, review target-language text in context and test both the interactive form and the printed customer document.
What this guide solves, and what it does not
A multilingual Frappe / ERPNext project can produce a beautiful interface while leaving the real work unsafe or confusing. This guide concentrates on Frappe application translation strings, CSV and version-16 PO files, custom app localization, user language, ERPNext print formats and QA. It explains where language choices enter the product, which strings should be translated through the platform’s supported mechanisms, how to preserve business data, and how to prove that the result works for people using different locales. It is intended for product owners, implementers, translators, testers and support teams anywhere in the world.
There is a limit to what a general translation article should own. This one is not a dictionary, not a language-learning syllabus and not a promise that automated translation makes an application correct. Its job is the Frappe / ERPNext-specific relationship between an interface string, its runtime context and the action users take. For broad principles, the source of record remains the Master Art of Translation, linked at the end; other platform articles deal with their own software rather than repeating these implementation details.
The quickest workable route
- Identify the actual deployed Frappe / ERPNext version, interface technology, language packs and licensed capabilities.
- Inventory visible strings, saved data and external outputs separately.
- Choose a primary source locale and document locale fallback before translating.
- Use the product-supported resource or rule mechanism for each eligible string.
- Give translators context, field purpose and realistic data examples.
- Test access rights, errors, printed or exported outputs and mobile layouts in each required language.
- Keep release evidence, reviewer decisions and a route for correcting a defective phrase.
The working distinction: interface, data, action and evidence
Interface text includes buttons, instructions, field captions, confirmation prompts and error messages. Business data includes a customer’s address, a part number, a case identifier, an invoice total or a recorded status. Some data may contain natural-language descriptions that require translation, but the fact that a value is readable text does not mean it can be replaced without affecting the record. Actions include submission, approval, payment and escalation. Evidence is what proves which action occurred. A safe multilingual design keeps these four kinds of information separate even when a screen displays them together.
A common example is a service request with a stable status code and a localized status label. People working in different languages should see an appropriate caption for the same state, not create different states accidentally. A date should be localized for display without changing the stored instant. An amount should display with suitable separators and currency information without silently converting its value. A translated warning must describe the same actual risk. These distinctions supply the foundation for the detailed product-specific sections below.
A full worked example: one international request, three languages
An ERPNext distributor supplies customers in Belgium, Morocco and Germany. Its sales staff maintain one authoritative item catalogue with item codes and prices, but quotations and invoices should be readable in the recipient’s chosen language. A customer-facing print view may translate an approved product description, while the quantity and price still come from the same transaction. Meanwhile the internal Frappe app has custom form labels that need their own translation resources. A robust plan separates UI string extraction, custom app deployment and ERPNext Custom Translations for print-facing content, testing each link with a representative customer and the same document ID.
Use a harmless training record and walk the entire request from first view to completion. In the source language, record the visible name of the action, the condition that makes it available, and the resulting status. Repeat with a second and third locale without changing the identity of the training record. The desired result is the same business operation represented by language appropriate to each user. Where the application stores locale preferences or translations separately, inspect both rather than guessing from the visible text.
Then introduce a controlled problem. Leave one optional help message untranslated, deliberately provide a long personal name, and trigger a validation error. Does the page expose its fallback clearly? Does the error explain how to recover? Is the name preserved accurately? Is any user asked to consent to something different because the sentence was translated literally? Capture the screenshots and record state before closing the test. This is a more meaningful definition of localization quality than a green check next to every spreadsheet cell.
Understanding Frappe / ERPNext before translating anything
Frappe Framework documents a built-in approach for extracting translatable strings from code and DocType metadata. Some DocType labels and descriptions are automatically marked, while code strings must be identified appropriately. The documentation explains that Python uses _() and JavaScript can use translation helper conventions; strings should be literal and variables handled with supported placeholders rather than assembled by concatenation.
Version matters. The Frappe command reference states that CSV-based translations were common through version 15 and that version 16 introduces GNU Gettext PO management; custom apps may retain CSV or adopt the new format. The new commands include generating POT templates, updating PO files, compiling PO into MO and migrating from CSV. Therefore a tutorial that says ‘all Frappe translations use CSV forever’ would mislead readers about newer installations.
ERPNext adds business-facing requirements beyond labels: customer or supplier language preferences, translated print content and Custom Translations for values such as item descriptions. Its official guide illustrates a transaction print preview using a party’s preferred language and optional selection of another print language. Distinguish translated display content from the original commercial transaction throughout.
From source strings to a reviewed release
A useful release workflow starts with a source freeze. This does not mean development stops; it means the translation team knows which version of the interface its work describes. Record the date, application build and language set for that review. Export or inventory the strings through the supported mechanism, review unresolved terminology, bring the translations into a test environment, and verify both the words and the actions. Approval belongs to the complete workflow, not merely to an attachment marked final.
Make the test matrix compact enough that someone will actually use it. A matrix row should say which locale, role, screen, action, sample record, expected text and expected result is being checked. Keep separate columns for translation accuracy, technical rendering and business behavior. A team can then distinguish a mistranslated verb from a missing language resource or a failed permission check. Those are different defects, with different owners and different remedies.
1. Start with the installed Frappe major version
Start with the visible decision, not the translation file. Translation-file conventions differ across versions, especially the move toward PO management in v16. A reader who sees a label is trying to perform a real action: identify a record, confirm a choice, or understand what will happen after submission. In Frappe / ERPNext, the words are part of the interaction, but they are not a replacement for the underlying business rules. Treat language as an interface to those rules. The first useful question is therefore what the reader is expected to understand and do, rather than how quickly a source phrase can be converted into another language.
Consider this practical situation: An administrator follows an older CSV tutorial on a fresh version-16 environment. Write down the exact screen, user role, selected locale, source string, intended meaning and observable result. This small evidence trail prevents a common misunderstanding: a translated screenshot can look correct while the actual workflow does something different. Read the wording aloud to a target-language colleague and ask what action they expect. Their prediction should match the application behavior. If the prediction and behavior differ, the translation is not ready, even if every word is grammatical.
A workable implementation is to check the installed version and choose the documented resource format and commands Separate source capture, target-language review and deployment verification. Do not silently overwrite a string merely because two labels look similar in English; identical words may have different meanings in a form, report and confirmation dialogue. Record which locale and product version the instruction applies to. When a feature is absent from the tenant, application or release, document the alternative rather than inventing a switch.
The failure to anticipate here is a team treats obsolete workflow details as universal installation instructions. Test an ordinary user and an administrator separately, then repeat with a missing translation, invalid form value and a narrow screen. A good acceptance check asks whether people can complete the task safely, not only whether characters appear. Keep a defect with the original text, observed target text, steps to reproduce, expected outcome, screenshot or evidence, owner and retest date. This makes the result maintainable when the next application update changes the source wording.
2. Automatically translatable DocType metadata
The hidden complication is that a phrase has a job in a particular workflow. Field labels and certain descriptions in DocType JSON can be picked up by translation extraction. That job may be to explain an irreversible action, distinguish two records, or tell the user how to recover from an error. An international deployment needs the underlying concept to remain stable while the language changes. In Frappe / ERPNext, check which layer owns that concept before editing anything: interface configuration, translated message, structured content, user record or a separate application rule.
Take an example that a team could actually encounter: A custom procurement DocType has form labels absent from a Spanish locale. The easiest mistake is to polish the target-language wording while ignoring where the source value came from. Draw a short chain from source owner to rendering component to user action to saved state. Mark the points where translation is allowed and where stable IDs, permissions, amounts or case status must remain unchanged. Review that chain with someone who understands the application data model.
For implementation, confirm which metadata is extracted and inspect the actual translation catalogue Prefer a reversible, versioned change that can be compared with the prior release. Ask reviewers to evaluate the entire sentence in context, particularly when inserting a name, date, monetary value or choice label. Verify how the system handles an absent locale value. Visible fallback may be acceptable for a harmless menu hint, but a consent notice or safety warning might need to block release until fully reviewed.
One failure worth rehearsing is a developer wraps labels in unsupported dynamic code instead of using the framework metadata. A screen review alone cannot catch that reliably. Use a test account, a known record and a predictable expected result. Change the locale, perform the action, then inspect the stored record or event rather than inferring success from the interface. Also check a target language that produces longer words and a right-to-left sample when your supported-language scope requires it. Retain the result as evidence of functional equivalence.
3. Marking Python source strings with _()
Think about who owns the truth in this part of the product. Frappe documents _() around literal messages for translation extraction. The display text should make that truth easier to understand, not become a second and contradictory copy of it. Translation programs often fail at this boundary because a user-visible value may look like ordinary prose while actually encoding a workflow status, category, permission or regulatory obligation. In Frappe / ERPNext, preserve the authoritative object first and translate its presentation through the supported mechanism.
A specific case makes the boundary clearer: A server validation raises ‘Quantity must be positive’ in the source language. Before doing any editing, have the team identify what must stay constant after switching languages: the record ID, actor, timestamp, amount, policy condition or exact category. Then identify what may legitimately change: label order, grammatical form, explanatory note, direction and locally appropriate formatting. This separation is particularly important when two people in different countries operate on the same underlying case.
For a practical sequence, wrap a literal source message using the framework translation helper and test its target version Review each candidate string against its screen and user journey instead of viewing a translation export in isolation. A spreadsheet can be efficient for large batches, but its rows do not show layout clipping, button position, conditional visibility or the next screen. The review cycle therefore needs both a linguistic pass and a functioning application pass. For each issue, state whether the defect belongs to terminology, missing resource, data, rendering or business logic.
Watch for a dynamically constructed expression escapes the extraction process. Reproduce the problem first in the original language and then the target language. If both fail, it is probably not only a localization defect. If only one fails, inspect locale configuration and translated resource selection before modifying workflow logic. Finish with a regression test on an unaffected language so a local fix does not accidentally alter another user’s experience.
4. JavaScript frontend translation helpers
A translated system is useful only if people can predict its consequences. Custom client scripts need translatable literals handled through supported conventions. An ordinary user rarely knows whether a phrase came from a built-in product pack, a custom resource, a database value or a translator’s spreadsheet. They simply see a message and act on it. The design task in Frappe / ERPNext is to make those sources agree at the point of use, especially where the application confirms, rejects or escalates an action.
Imagine this scenario: A custom button and toast notification remain English after changing the user language. Ask three concrete questions. What did the source-language user think this screen meant? What will the target-language user think it means? What actually happens when the button is pressed or the value is saved? When those answers do not align, making the translation more fluent may hide the defect rather than solve it. Show reviewers the surrounding fields and a sample value so they can judge the full meaning.
An effective repair route is to identify the JS message and mark it through the documented helper before rebuilding when needed Do not make a hidden shortcut by changing a business key, report column name or permission to match a translated word. If the product provides a supported locale resource or translation table, use that. If a capability depends on a particular release or UI technology, state the boundary and test on the deployed version. Keep the source term and intended definition available so a later reviewer can reconstruct the decision.
The warning sign is a developer changes visible text but forgets the build or cache that serves the page. Build a small acceptance test with a valid case, an invalid case and an incomplete locale. Observe not just text but focus order, tab sequence, accessible name and any output document or notification generated by the action. A sign-off is stronger when a reviewer can explain the business outcome in their own words than when they merely tick a box saying the screen appears translated.
5. Placeholders and dynamic values
The important distinction is between a language preference and permission to change information. Frappe’s string extraction guidance describes positional placeholders such as {0} for dynamic content. Localizing text cannot make a restricted record public, cannot alter the meaning of a stored status, and cannot substitute for a product’s actual access-control checks. In Frappe / ERPNext, users should be able to choose or receive an appropriate locale without being given a different business process simply because of that language choice.
Consider how this becomes visible in practice: A notification displays a user’s name, item number and expected shipping date. Document the actors and expected outcomes before translating: who can view the screen, who can submit the form, which values are accepted and what confirmation proves success. Then switch language while keeping the user, role and data identical. If a localized string misleads someone into choosing another action, the team has found a functional product defect expressed through language.
To handle the case, translate the complete literal around supported placeholders and format values afterward Use terminology notes for terms that must remain uniform across workflows, while allowing ordinary sentences to sound natural in the target language. A glossary should record definitions and examples, not merely a column of paired words. Verify the rendering mechanism and fallback policy separately. Translation is not complete until the application has been exercised with representative personal names, long strings, dates, numbers and empty values.
A practical failure case is concatenation creates unnatural order or prevents extraction entirely. Put a regression test in the release checklist and assign an owner. Include one target-language reviewer who is unfamiliar with the project’s internal jargon; their misunderstandings are often the best signal that the product is too dependent on the original team’s assumptions. Preserve the source version and the observed result to avoid debating what a phrase meant months later.
6. Context for words with several meanings
Here the challenge is maintaining meaning across a changing system. Translation entries can need context when the same source word has unrelated business senses. Labels can be rewritten, workflow rules can be upgraded and external content can arrive in another language. Each change creates a possible mismatch between what the interface says and what the application does. For Frappe / ERPNext, establish an explicit owner for the text and another owner for the business behavior, even when one person performs both roles.
Use the following realistic example: The word ‘charge’ appears for an invoice fee and a phone battery. The team should capture not only the source phrase but also the user intent, surrounding control, expected result and relevant locale. Ask the translator to explain any ambiguous term, then ask a product specialist to confirm whether that interpretation matches the rule. This conversational exchange prevents the false precision of a glossary entry with no context and no tested behavior.
A dependable workflow is to use contextual translation entries where supported and provide translator notes After importing or configuring the translation, verify its appearance in the actual runtime instead of trusting a development preview alone. Check one path from initial screen to persisted result, including cancellation or error recovery. If the workflow creates a document, sends a notification or appears in a report, follow that output too; users experience the whole chain rather than the isolated screen where the string was edited.
Be alert to a single unqualified translation turns a financial label into a technical instruction. Keep a record of the observation and the release on which it occurred. Where the official documentation is versioned, consult the version matching the installation. An experienced team treats uncertainty openly: it says what has been verified, what is a suggested design pattern and what must still be tested. That is more useful than an impressive configuration claim that fails in production.
7. Custom app translations folder
Start with the visible decision, not the translation file. Official Frappe guidance describes a translations directory in the custom app package. A reader who sees a label is trying to perform a real action: identify a record, confirm a choice, or understand what will happen after submission. In Frappe / ERPNext, the words are part of the interaction, but they are not a replacement for the underlying business rules. Treat language as an interface to those rules. The first useful question is therefore what the reader is expected to understand and do, rather than how quickly a source phrase can be converted into another language.
Consider this practical situation: An internal warehouse app needs Arabic labels after its first international rollout. Write down the exact screen, user role, selected locale, source string, intended meaning and observable result. This small evidence trail prevents a common misunderstanding: a translated screenshot can look correct while the actual workflow does something different. Read the wording aloud to a target-language colleague and ask what action they expect. Their prediction should match the application behavior. If the prediction and behavior differ, the translation is not ready, even if every word is grammatical.
A workable implementation is to place per-language resources in the documented app translation directory and verify deployment Separate source capture, target-language review and deployment verification. Do not silently overwrite a string merely because two labels look similar in English; identical words may have different meanings in a form, report and confirmation dialogue. Record which locale and product version the instruction applies to. When a feature is absent from the tenant, application or release, document the alternative rather than inventing a switch.
The failure to anticipate here is files sit in the wrong folder and the app continues to show source strings. Test an ordinary user and an administrator separately, then repeat with a missing translation, invalid form value and a narrow screen. A good acceptance check asks whether people can complete the task safely, not only whether characters appear. Keep a defect with the original text, observed target text, steps to reproduce, expected outcome, screenshot or evidence, owner and retest date. This makes the result maintainable when the next application update changes the source wording.
8. CSV format for compatible app versions
The hidden complication is that a phrase has a job in a particular workflow. Frappe documents source, translated text and optional context fields for custom-app CSV resources. That job may be to explain an irreversible action, distinguish two records, or tell the user how to recover from an error. An international deployment needs the underlying concept to remain stable while the language changes. In Frappe / ERPNext, check which layer owns that concept before editing anything: interface configuration, translated message, structured content, user record or a separate application rule.
Take an example that a team could actually encounter: A custom app uses es.csv for Spanish strings and ar.csv for Arabic. The easiest mistake is to polish the target-language wording while ignoring where the source value came from. Draw a short chain from source owner to rendering component to user action to saved state. Mark the points where translation is allowed and where stable IDs, permissions, amounts or case status must remain unchanged. Review that chain with someone who understands the application data model.
For implementation, preserve encoding, CSV columns, source text and context exactly Prefer a reversible, versioned change that can be compared with the prior release. Ask reviewers to evaluate the entire sentence in context, particularly when inserting a name, date, monetary value or choice label. Verify how the system handles an absent locale value. Visible fallback may be acceptable for a harmless menu hint, but a consent notice or safety warning might need to block release until fully reviewed.
One failure worth rehearsing is a spreadsheet program corrupts quotation marks or non-Latin characters. A screen review alone cannot catch that reliably. Use a test account, a known record and a predictable expected result. Change the locale, perform the action, then inspect the stored record or event rather than inferring success from the interface. Also check a target language that produces longer words and a right-to-left sample when your supported-language scope requires it. Retain the result as evidence of functional equivalence.
9. PO and POT files in Frappe version 16
Think about who owns the truth in this part of the product. Current Frappe command references introduce Gettext file workflows and compile steps for PO to MO. The display text should make that truth easier to understand, not become a second and contradictory copy of it. Translation programs often fail at this boundary because a user-visible value may look like ordinary prose while actually encoding a workflow status, category, permission or regulatory obligation. In Frappe / ERPNext, preserve the authoritative object first and translate its presentation through the supported mechanism.
A specific case makes the boundary clearer: A version-16 team plans a new translation catalog rather than converting the old CSV blindly. Before doing any editing, have the team identify what must stay constant after switching languages: the record ID, actor, timestamp, amount, policy condition or exact category. Then identify what may legitimately change: label order, grammatical form, explanatory note, direction and locally appropriate formatting. This separation is particularly important when two people in different countries operate on the same underlying case.
For a practical sequence, generate POT templates, maintain PO language files and compile according to versioned instructions Review each candidate string against its screen and user journey instead of viewing a translation export in isolation. A spreadsheet can be efficient for large batches, but its rows do not show layout clipping, button position, conditional visibility or the next screen. The review cycle therefore needs both a linguistic pass and a functioning application pass. For each issue, state whether the defect belongs to terminology, missing resource, data, rendering or business logic.
Watch for a manual rename from CSV to PO is mistaken for a valid migration. Reproduce the problem first in the original language and then the target language. If both fail, it is probably not only a localization defect. If only one fails, inspect locale configuration and translated resource selection before modifying workflow logic. Finish with a regression test on an unaffected language so a local fix does not accidentally alter another user’s experience.
10. Translation commands and build responsibilities
A translated system is useful only if people can predict its consequences. Frappe includes commands for translation maintenance, and build needs depend on resources changed. An ordinary user rarely knows whether a phrase came from a built-in product pack, a custom resource, a database value or a translator’s spreadsheet. They simply see a message and act on it. The design task in Frappe / ERPNext is to make those sources agree at the point of use, especially where the application confirms, rejects or escalates an action.
Imagine this scenario: A developer edits source JavaScript while an operator edits only a language file. Ask three concrete questions. What did the source-language user think this screen meant? What will the target-language user think it means? What actually happens when the button is pressed or the value is saved? When those answers do not align, making the translation more fluent may hide the defect rather than solve it. Show reviewers the surrounding fields and a sample value so they can judge the full meaning.
An effective repair route is to use the version-appropriate translation commands and verify whether a frontend rebuild is required Do not make a hidden shortcut by changing a business key, report column name or permission to match a translated word. If the product provides a supported locale resource or translation table, use that. If a capability depends on a particular release or UI technology, state the boundary and test on the deployed version. Keep the source term and intended definition available so a later reviewer can reconstruct the decision.
The warning sign is the testing session sees stale assets and incorrectly concludes all translated phrases are missing. Build a small acceptance test with a valid case, an invalid case and an incomplete locale. Observe not just text but focus order, tab sequence, accessible name and any output document or notification generated by the action. A sign-off is stronger when a reviewer can explain the business outcome in their own words than when they merely tick a box saying the screen appears translated.
11. Caching and language-state troubleshooting
The important distinction is between a language preference and permission to change information. A valid translation resource can appear absent because browser or application caches have not refreshed. Localizing text cannot make a restricted record public, cannot alter the meaning of a stored status, and cannot substitute for a product’s actual access-control checks. In Frappe / ERPNext, users should be able to choose or receive an appropriate locale without being given a different business process simply because of that language choice.
Consider how this becomes visible in practice: A Spanish user changes preference but still sees yesterday’s label. Document the actors and expected outcomes before translating: who can view the screen, who can submit the form, which values are accepted and what confirmation proves success. Then switch language while keeping the user, role and data identical. If a localized string misleads someone into choosing another action, the team has found a functional product defect expressed through language.
To handle the case, inspect preference, resource availability and cache state before modifying the source again Use terminology notes for terms that must remain uniform across workflows, while allowing ordinary sentences to sound natural in the target language. A glossary should record definitions and examples, not merely a column of paired words. Verify the rendering mechanism and fallback policy separately. Translation is not complete until the application has been exercised with representative personal names, long strings, dates, numbers and empty values.
A practical failure case is teams duplicate strings repeatedly when refresh would have exposed the approved value. Put a regression test in the release checklist and assign an owner. Include one target-language reviewer who is unfamiliar with the project’s internal jargon; their misunderstandings are often the best signal that the product is too dependent on the original team’s assumptions. Preserve the source version and the observed result to avoid debating what a phrase meant months later.
12. ERPNext customer and supplier language preferences
Here the challenge is maintaining meaning across a changing system. ERPNext’s print documentation allows party-linked language preferences affecting document preview. Labels can be rewritten, workflow rules can be upgraded and external content can arrive in another language. Each change creates a possible mismatch between what the interface says and what the application does. For Frappe / ERPNext, establish an explicit owner for the text and another owner for the business behavior, even when one person performs both roles.
Use the following realistic example: A German customer receives quotations in English even though the customer master says German. The team should capture not only the source phrase but also the user intent, surrounding control, expected result and relevant locale. Ask the translator to explain any ambiguous term, then ask a product specialist to confirm whether that interpretation matches the rule. This conversational exchange prevents the false precision of a glossary entry with no context and no tested behavior.
A dependable workflow is to review party language, print preview setting and supported translation entries together After importing or configuring the translation, verify its appearance in the actual runtime instead of trusting a development preview alone. Check one path from initial screen to persisted result, including cancellation or error recovery. If the workflow creates a document, sends a notification or appears in a report, follow that output too; users experience the whole chain rather than the isolated screen where the string was edited.
Be alert to the internal employee’s UI language is mistaken for the customer’s document language. Keep a record of the observation and the release on which it occurred. Where the official documentation is versioned, consult the version matching the installation. An experienced team treats uncertainty openly: it says what has been verified, what is a suggested design pattern and what must still be tested. That is more useful than an impressive configuration claim that fails in production.
13. Custom Translations for printed descriptions
Start with the visible decision, not the translation file. ERPNext documents Custom Translations to translate content such as item descriptions in prints. A reader who sees a label is trying to perform a real action: identify a record, confirm a choice, or understand what will happen after submission. In Frappe / ERPNext, the words are part of the interaction, but they are not a replacement for the underlying business rules. Treat language as an interface to those rules. The first useful question is therefore what the reader is expected to understand and do, rather than how quickly a source phrase can be converted into another language.
Consider this practical situation: One line of a Spanish quotation translates while a second product description stays original. Write down the exact screen, user role, selected locale, source string, intended meaning and observable result. This small evidence trail prevents a common misunderstanding: a translated screenshot can look correct while the actual workflow does something different. Read the wording aloud to a target-language colleague and ask what action they expect. Their prediction should match the application behavior. If the prediction and behavior differ, the translation is not ready, even if every word is grammatical.
A workable implementation is to enter and review explicit custom translations for eligible text and inspect each line Separate source capture, target-language review and deployment verification. Do not silently overwrite a string merely because two labels look similar in English; identical words may have different meanings in a form, report and confirmation dialogue. Record which locale and product version the instruction applies to. When a feature is absent from the tenant, application or release, document the alternative rather than inventing a switch.
The failure to anticipate here is a team expects all inventory descriptions to translate automatically. Test an ordinary user and an administrator separately, then repeat with a missing translation, invalid form value and a narrow screen. A good acceptance check asks whether people can complete the task safely, not only whether characters appear. Keep a defect with the original text, observed target text, steps to reproduce, expected outcome, screenshot or evidence, owner and retest date. This makes the result maintainable when the next application update changes the source wording.
14. Print-preview language selection
The hidden complication is that a phrase has a job in a particular workflow. The print preview can support choosing an alternative language for a transaction. That job may be to explain an irreversible action, distinguish two records, or tell the user how to recover from an error. An international deployment needs the underlying concept to remain stable while the language changes. In Frappe / ERPNext, check which layer owns that concept before editing anything: interface configuration, translated message, structured content, user record or a separate application rule.
Take an example that a team could actually encounter: A customer requests an extra French quotation after receiving an English one. The easiest mistake is to polish the target-language wording while ignoring where the source value came from. Draw a short chain from source owner to rendering component to user action to saved state. Mark the points where translation is allowed and where stable IDs, permissions, amounts or case status must remain unchanged. Review that chain with someone who understands the application data model.
For implementation, select the desired print language in the documented preview flow and compare outputs Prefer a reversible, versioned change that can be compared with the prior release. Ask reviewers to evaluate the entire sentence in context, particularly when inserting a name, date, monetary value or choice label. Verify how the system handles an absent locale value. Visible fallback may be acceptable for a harmless menu hint, but a consent notice or safety warning might need to block release until fully reviewed.
One failure worth rehearsing is staff change the transaction’s source data just to generate a different-language print. A screen review alone cannot catch that reliably. Use a test account, a known record and a predictable expected result. Change the locale, perform the action, then inspect the stored record or event rather than inferring success from the interface. Also check a target language that produces longer words and a right-to-left sample when your supported-language scope requires it. Retain the result as evidence of functional equivalence.
15. Document IDs, totals and currencies
Think about who owns the truth in this part of the product. Financial meaning must survive every display language and printed output. The display text should make that truth easier to understand, not become a second and contradictory copy of it. Translation programs often fail at this boundary because a user-visible value may look like ordinary prose while actually encoding a workflow status, category, permission or regulatory obligation. In Frappe / ERPNext, preserve the authoritative object first and translate its presentation through the supported mechanism.
A specific case makes the boundary clearer: A quotation moves from a UK employee to a Moroccan customer with different number formatting. Before doing any editing, have the team identify what must stay constant after switching languages: the record ID, actor, timestamp, amount, policy condition or exact category. Then identify what may legitimately change: label order, grammatical form, explanatory note, direction and locally appropriate formatting. This separation is particularly important when two people in different countries operate on the same underlying case.
For a practical sequence, compare item codes, quantities, exchange rates, taxes and amounts in source and target prints Review each candidate string against its screen and user journey instead of viewing a translation export in isolation. A spreadsheet can be efficient for large batches, but its rows do not show layout clipping, button position, conditional visibility or the next screen. The review cycle therefore needs both a linguistic pass and a functioning application pass. For each issue, state whether the defect belongs to terminology, missing resource, data, rendering or business logic.
Watch for a locale formatting change looks like a conversion and causes a customer to misread the price. Reproduce the problem first in the original language and then the target language. If both fail, it is probably not only a localization defect. If only one fails, inspect locale configuration and translated resource selection before modifying workflow logic. Finish with a regression test on an unaffected language so a local fix does not accidentally alter another user’s experience.
16. User-entered text and customer records
A translated system is useful only if people can predict its consequences. Ordinary user records need their own content governance even if a label is translatable. An ordinary user rarely knows whether a phrase came from a built-in product pack, a custom resource, a database value or a translator’s spreadsheet. They simply see a message and act on it. The design task in Frappe / ERPNext is to make those sources agree at the point of use, especially where the application confirms, rejects or escalates an action.
Imagine this scenario: A customer address includes proper names and legal entity details beside translated form headings. Ask three concrete questions. What did the source-language user think this screen meant? What will the target-language user think it means? What actually happens when the button is pressed or the value is saved? When those answers do not align, making the translation more fluent may hide the defect rather than solve it. Show reviewers the surrounding fields and a sample value so they can judge the full meaning.
An effective repair route is to keep authoritative names and identifiers intact and translate only approved descriptive content Do not make a hidden shortcut by changing a business key, report column name or permission to match a translated word. If the product provides a supported locale resource or translation table, use that. If a capability depends on a particular release or UI technology, state the boundary and test on the deployed version. Keep the source term and intended definition available so a later reviewer can reconstruct the decision.
The warning sign is automatic replacement changes a registered business name on the document. Build a small acceptance test with a valid case, an invalid case and an incomplete locale. Observe not just text but focus order, tab sequence, accessible name and any output document or notification generated by the action. A sign-off is stronger when a reviewer can explain the business outcome in their own words than when they merely tick a box saying the screen appears translated.
17. Multilingual validation and access rights
The important distinction is between a language preference and permission to change information. Localized forms must reject invalid business data and protect records identically. Localizing text cannot make a restricted record public, cannot alter the meaning of a stored status, and cannot substitute for a product’s actual access-control checks. In Frappe / ERPNext, users should be able to choose or receive an appropriate locale without being given a different business process simply because of that language choice.
Consider how this becomes visible in practice: An operator enters a negative quantity after switching to a target language. Document the actors and expected outcomes before translating: who can view the screen, who can submit the form, which values are accepted and what confirmation proves success. Then switch language while keeping the user, role and data identical. If a localized string misleads someone into choosing another action, the team has found a functional product defect expressed through language.
To handle the case, verify localized errors, persisted values and permission checks using the same scenario Use terminology notes for terms that must remain uniform across workflows, while allowing ordinary sentences to sound natural in the target language. A glossary should record definitions and examples, not merely a column of paired words. Verify the rendering mechanism and fallback policy separately. Translation is not complete until the application has been exercised with representative personal names, long strings, dates, numbers and empty values.
A practical failure case is a translated form hides a required-field failure or suggests a bypass. Put a regression test in the release checklist and assign an owner. Include one target-language reviewer who is unfamiliar with the project’s internal jargon; their misunderstandings are often the best signal that the product is too dependent on the original team’s assumptions. Preserve the source version and the observed result to avoid debating what a phrase meant months later.
18. Regression across UI, print and upgrade
Here the challenge is maintaining meaning across a changing system. Frappe upgrades can change extraction behavior or translation resource conventions. Labels can be rewritten, workflow rules can be upgraded and external content can arrive in another language. Each change creates a possible mismatch between what the interface says and what the application does. For Frappe / ERPNext, establish an explicit owner for the text and another owner for the business behavior, even when one person performs both roles.
Use the following realistic example: An inventory app migrates toward PO files while the ERPNext print system remains in use. The team should capture not only the source phrase but also the user intent, surrounding control, expected result and relevant locale. Ask the translator to explain any ambiguous term, then ask a product specialist to confirm whether that interpretation matches the rule. This conversational exchange prevents the false precision of a glossary entry with no context and no tested behavior.
A dependable workflow is to test a full quotation path and review translation catalogs after version upgrades After importing or configuring the translation, verify its appearance in the actual runtime instead of trusting a development preview alone. Check one path from initial screen to persisted result, including cancellation or error recovery. If the workflow creates a document, sends a notification or appears in a report, follow that output too; users experience the whole chain rather than the isolated screen where the string was edited.
Be alert to internal labels improve but customer documents regress to source-language descriptions. Keep a record of the observation and the release on which it occurred. Where the official documentation is versioned, consult the version matching the installation. An experienced team treats uncertainty openly: it says what has been verified, what is a suggested design pattern and what must still be tested. That is more useful than an impressive configuration claim that fails in production.
Six guided exercises you can run on a test environment
1. The language-switching audit
Start with a signed-in test account and a familiar record in Frappe / ERPNext. Note the source-language captions and business result. Select another supported locale by the documented method, revisit the same object, and check whether navigation, action labels and feedback messages change together. Repeat after signing out and back in if the product requires a fresh session. If different surfaces use different locale sources, write down those sources instead of expecting one selection to control everything.
Deliverable: a two-language comparison sheet listing visible phrases, unchanged record IDs, user roles, dates and the result of one completed action.
For this exercise in Frappe / ERPNext, the reviewer should identify who owns a failing result before making a fix. If the source-language action fails too, investigate the workflow, configuration or data. If only one language fails, inspect locale selection and resources. If the words are correct but users still misunderstand the result, revise the contextual explanation and test again with someone who did not author the copy. This discipline keeps technical changes focused and prevents the translation work from masking a separate product defect.
2. The untranslatable-data test
Create a sample customer name, reference number, status code and descriptive note. Work in two languages. Confirm that an interface translation changes only what it is allowed to change. The reference number must remain exact, the status should have consistent underlying meaning, and any translated descriptive note should not overwrite the original unless that is explicitly the approved content design. This exercise exposes the dangerous habit of treating every readable field as interchangeable text.
Deliverable: a before-and-after record comparison with the rendered labels and persisted raw values clearly separated.
For this exercise in Frappe / ERPNext, the reviewer should identify who owns a failing result before making a fix. If the source-language action fails too, investigate the workflow, configuration or data. If only one language fails, inspect locale selection and resources. If the words are correct but users still misunderstand the result, revise the contextual explanation and test again with someone who did not author the copy. This discipline keeps technical changes focused and prevents the translation work from masking a separate product defect.
3. The fallback and missing-resource test
Remove or leave absent a noncritical test string in one locale without changing production content. Observe which language the application displays and whether any error appears. Compare the actual result with the documented fallback behavior for this product version. A fallback is a design decision, not automatically a defect; its safety depends on the text’s purpose. An untranslated navigation hint may be tolerable temporarily, while a medical or legal consent instruction may require a controlled release hold.
Deliverable: an agreed fallback policy with examples of acceptable, warning-level and release-blocking missing content.
For this exercise in Frappe / ERPNext, the reviewer should identify who owns a failing result before making a fix. If the source-language action fails too, investigate the workflow, configuration or data. If only one language fails, inspect locale selection and resources. If the words are correct but users still misunderstand the result, revise the contextual explanation and test again with someone who did not author the copy. This discipline keeps technical changes focused and prevents the translation work from masking a separate product defect.
4. The dynamic value and long-string test
Test messages containing a very long personal name, a zero amount, a negative amount if allowed, an international phone number and a date near a time-zone boundary. Use genuine target-language sentences rather than appending translated words to the end of an English phrase. Watch for placeholder order, punctuation, grammatical agreement and wrapping. The same system should preserve the original value even when its displayed format changes.
Deliverable: screen evidence for value insertion, focus and layout at both a narrow and wide viewport.
For this exercise in Frappe / ERPNext, the reviewer should identify who owns a failing result before making a fix. If the source-language action fails too, investigate the workflow, configuration or data. If only one language fails, inspect locale selection and resources. If the words are correct but users still misunderstand the result, revise the contextual explanation and test again with someone who did not author the copy. This discipline keeps technical changes focused and prevents the translation work from masking a separate product defect.
5. The permission and error-path test
Sign in as a viewer, an editor and an administrator, or equivalent roles available in your configuration. Change only the locale and try a protected action. The user should see an understandable prohibition or recovery instruction, but translating the label must not create a new entitlement. Trigger a required-field error and a duplicate-record error where a safe test permits it. Check that the error text is localized and that no invalid data is committed.
Deliverable: role-by-locale test records proving that language choices do not modify access control or validation outcomes.
For this exercise in Frappe / ERPNext, the reviewer should identify who owns a failing result before making a fix. If the source-language action fails too, investigate the workflow, configuration or data. If only one language fails, inspect locale selection and resources. If the words are correct but users still misunderstand the result, revise the contextual explanation and test again with someone who did not author the copy. This discipline keeps technical changes focused and prevents the translation work from masking a separate product defect.
6. The output and regression test
Complete one workflow that produces a notification, export, PDF or print view where the chosen Frappe / ERPNext setup supports such output. Examine its language, units, currency, placeholders and identifying values. Confirm it is consistent with what the person saw during submission. Finally, rerun one short case in the original locale. A localized release that breaks its source-language route has not achieved reliable internationalization.
Deliverable: linked screenshots, generated output, record audit and signed-off regression result.
For this exercise in Frappe / ERPNext, the reviewer should identify who owns a failing result before making a fix. If the source-language action fails too, investigate the workflow, configuration or data. If only one language fails, inspect locale selection and resources. If the words are correct but users still misunderstand the result, revise the contextual explanation and test again with someone who did not author the copy. This discipline keeps technical changes focused and prevents the translation work from masking a separate product defect.
Frequently asked questions
Does changing the interface language translate every business record?
No. Interface resources and stored records are different objects, even when a form presents them together. Frappe / ERPNext may display localized labels while customer-entered notes and imported values stay in their original language. Identify and review content translation as a separate business requirement. Record identity, audit history and structured codes should not be altered merely to improve the screen’s language.
Can machine translation be used as the first draft?
It can be useful for triage or preliminary wording when organizational policy permits, but the result needs human review in context. A fluent sentence may still describe the wrong permission, amount or business action. Never paste confidential records into unapproved external services. For high-impact messages, require a domain specialist to confirm the intended action and a target-language reviewer to confirm how people are likely to understand it.
How should missing translations be handled?
A platform-defined fallback is often preferable to an empty label, but fallback should be visible and governed by risk. Record missing strings and the actual locale that appears. Decide which harmless hints may fall back temporarily and which consent, safety, legal or financial text must be complete before release. Test the behavior in the running Frappe / ERPNext application; a translation file alone cannot prove the fallback route.
What should remain unchanged in the database?
Stable identifiers, event timestamps, authorization outcomes, quantities and source-of-truth status values should normally remain intact. Localized display labels, human explanations and formatting may vary while pointing to the same underlying fact. When the business explicitly maintains translated descriptions as distinct content, model their language and version rather than silently overwriting the source.
Is a localized screen enough to claim international readiness?
No. Check navigation, validation, notifications, exports, accessibility and the completed business process. A text-only review does not reveal a button clipped by a longer target phrase or a report showing the wrong currency symbol. At least one full workflow per required locale should be exercised with representative sample data.
How do you prevent translation updates from breaking old workflows?
Store translation changes with a source version or release ID. Rerun a small set of normal, invalid and unauthorized cases whenever source wording, application rules or locale configuration changes. Maintain terminology notes that explain business concepts rather than simply pairing words. Review what changed and who approved it; do not rely on the assumption that yesterday’s translated label remains correct forever.
What should a translator receive besides the source words?
Provide the screen, user role, action, intended consequence, sample dynamic values and any constraints on length or terminology. A source word can mean two different things in a menu and a financial report. A translator who can inspect contextual examples can resolve ambiguity before development, reducing rework and making the target language more natural.
Do right-to-left languages need separate testing?
Yes, when they are in scope. Text direction affects more than alignment: icons, punctuation, mixed-script identifiers, focus movement and number placement can create unexpected outcomes. Some products localize specific interface technologies differently, so confirm the actual supported behavior. Do not mirror serial numbers or change stored identifiers just to follow visual direction.
Which document is the authoritative source for platform features?
Use the official Frappe / ERPNext documentation for the release and interface technology in production. This guide explains a tested design method and highlights relevant mechanisms; it cannot guarantee that every tenant exposes exactly the same options. When product behavior is unclear, record the observation and follow the vendor’s versioned documentation rather than presenting a guess as a feature.
Official product documentation and further reading
- Frappe Framework: Translations
- Frappe: Custom Application Translations
- Frappe Bench Translation Commands
- ERPNext Custom Translations in Print Formats
- ERPNext Translations
Product behavior and feature availability are version-dependent. The official references above identify documented mechanisms at the time of writing; deployers must check their own edition, user permissions and environment before making production changes. The scenarios and acceptance tests here are explanatory recommendations, not claims that every application has a built-in automatic translation switch.
Where this specialist article belongs in the translation library
Architecture: EDKSG-TRANS-MASTER-WORLD-6200. This child article owns Frappe application translation strings, CSV and version-16 PO files, custom app localization, user language, ERPNext print formats and QA. The Master Art of Translation owns the general principles of moving meaning between languages. The Translate Like a Pro series index helps readers locate other platform-specific implementations. The neighboring Translate, How People Translate Quickly and Master Art of Translation families retain their own scope; this article does not attempt to replace them.
The final test is not whether the target-language wording sounds impressive. It is whether a reader using Frappe / ERPNext can understand the decision, complete the intended action and trust that the record and evidence mean the same thing afterward. That is the practical standard of a professional translation workflow.