How do you localize an Avalonia UI application with RESX resources, XAML labels, runtime language switching and right-to-left layouts? This practical Avalonia localization tutorial explains how to choose a culture, generate accessible resource classes, keep reactive translations current and test real desktop workflows. A translated resource file is only the starting point; the result must work when somebody switches language halfway through a task.
Avalonia is a cross-platform .NET UI framework. Its documentation shows localization with default and culture-specific .resx files, static resource references in XAML, a publicly accessible generated resource class, and alternative binding strategies for dynamic updates. The important distinction is that changing a culture does not necessarily cause a value previously resolved through x:Static to refresh. A designer must decide which properties are static and which need a reactive service.
Consider a small museum collection manager used in English, Japanese, Arabic and Filipino. A registrar searches objects, assigns condition labels, records a date, chooses an export language and prints a transfer receipt. This longform guide follows the entire journey, from a first-run language preference through culture-aware formatting, keyboard navigation, typography, missing resources and packaged Windows, macOS and Linux builds.
Quick answer: connect language resources to the live interface deliberately
Start with default RESX keys and culture-specific equivalents. Decide who chooses the app language, where that decision is stored and which UI elements must update at runtime. If XAML uses x:Static for a resource, remember that the value is evaluated rather than continuously observed; reload the affected view or use a localization service that raises property-change notifications. Do not claim a language switch is instantaneous unless every supported screen, dialog and report is refreshed.
Keep the display language distinct from dates, currencies, measurements and object metadata. Museum object numbers, accession identifiers and recorded titles are source data, not interface labels. A Japanese interface must not change the accession number from the catalog, and an Arabic reading direction must not reverse a barcode. Only the human-facing instructions and appropriate format presentation should change.
A registrar’s real multilingual task
A registrar on a laptop chooses Arabic and opens an existing collection. The app displays translated navigation and right-to-left layout where appropriate, but the Latin accession numbers remain readable. The registrar changes an object status from ‘in storage’ to ‘on loan’, enters a date and prints an English transfer receipt for an institution overseas. The receipt retains the original object titles and source identifiers with a clearly specified date convention.
Halfway through the work, the registrar changes to Japanese. If the navigation responds but an already-open dialog remains in Arabic, the workflow is not fully localized. A robust application either refreshes that dialog through a bound localization service or explains that a specific view must reopen. The user should not need to guess whether the stored object status was changed by a language preference.
RESX structure and key ownership
Avalonia’s official ResX guide illustrates a default file such as Resources.resx and culture-specific files such as Resources.ja-JP.resx and Resources.fil-PH.resx. Keys name source concepts; values supply text in the corresponding edition. For a real application, organize resources around domain meaning and use comments to explain where each string is displayed, what its placeholders mean and which action follows. Keep keys stable when improving phrasing.
Do not localize text by mechanically searching English words in the markup. ‘Collection’ could mean a set of museum objects, the act of collecting a payment or a computer data structure. Translators need context, a screenshot and the audience. A key like object.loan.return_due_label is far safer than a key named collection2. Explicit semantics also help testing tools identify which message should appear after a state transition.
Make generated resources accessible from XAML
The Avalonia documentation explains that a generated ResX resource class may initially be internal. A XAML reference using x:Static needs a class that the markup can access; the documented public-code-generation approach uses PublicResXFileCodeGenerator for the default resource file. This is a build-time detail that should be verified on the exact .NET project rather than assumed. Language files contribute values, while the default file usually owns code generation.
A missing class or namespace error is not a translator’s failure. Inspect the generated file, resource folder, namespace and build action. Avoid marking every translated resource file as an independent code generator, which can create collisions. Keep the project configuration review separate from linguistic review so each defect goes to the person who can resolve it.
Static lookup versus reactive language switching
A markup expression such as an x:Static resource reference can provide a simple translated label when the view is created, but it will not automatically notify an existing control that the selected culture changed. The Avalonia docs advise reloading a view or exposing strings through a localization service with INotifyPropertyChanged. Choose deliberately. A settings dialog may be easy to recreate, while a complex editor needs reactive bindings to avoid losing unsaved user work.
A locale change should preserve selection, cursor position and pending edits when the product promises in-place switching. The message service may raise changes for localized properties, while date and number formatters may need re-evaluation. Test the whole screen, not merely the first TextBlock. If a view cannot safely refresh, a clear restart requirement can be more honest than leaving a hybrid-language interface.
Culture and formatting are different responsibilities
The displayed language is not always the same as the formatting convention. CultureInfo can influence date, numeric and currency formatting, and the chosen resource culture can control which messages are read. They may be intentionally linked or separately configurable. Keep the underlying date and value typed, then format them for the intended reader; do not turn a culturally formatted string back into stored data without explicit parsing rules.
A museum may store a historical object date as approximate or uncertain. Translating that label must preserve the uncertainty rather than convert ‘circa 1900’ to a falsely precise day. Likewise, a locale-aware timestamp should not change the event’s actual instant. Test precision, units, uncertain dates and international loan documents as carefully as ordinary interface labels.
Right-to-left controls and mixed-script evidence
Avalonia exposes FlowDirection, including RightToLeft, for controls and layouts. Setting a direction is a layout decision; the registrar still needs to inspect object codes, barcode data, numbers, file paths, website addresses and mixed English-Arabic titles exactly as recorded. Some controls mirror their arrangement, while embedded identifiers need deliberate text-direction isolation and visual checking.
An RTL screen is not validated by mirroring a screenshot. Test focus order, keyboard shortcuts, scrollbars, text selection, screen-reader names and the visual relationship between labels and inputs. Confirm that the person can identify an object and complete an action without changing the object itself. Include typography checks for target scripts on each platform and in printing.
Implementation and review sequence
First inventory messages, resource owners, locale tags and user journeys. Build the default RESX and one fully reviewed target edition, confirm generated public access and establish a predictable culture preference. Connect resource strings to controls through either static references with controlled view recreation or live bindings. Add a consistent flow-direction policy and a tested formatter for numeric and temporal values.
Next, exercise a practical registrar workflow with object search, status update, loan date, print preview, export and an intentionally failed save. Compare what the message claims with the stored action. Add missing-resource checks and placeholder validation to the build. Finally, test installed builds in each supported operating system using representative fonts and assistive technology. A successful desktop release must preserve data while changing presentation.
Twenty-eight practical Avalonia localization failures
The cases below are worked examples from an imaginary museum tool. Each is designed to help a developer and a language reviewer observe a real task, diagnose a cause and check a correction. They are not claims that Avalonia inherently produces these errors; they are points where application decisions can lose meaning.
1. A XAML resource class is inaccessible
Observed behavior and cause. A developer references a generated Resources class from XAML and receives a visibility or type-resolution error. By default the resource-code generator can produce an internal class, which a static XAML reference cannot access as expected.
Correction and evidence. Review the namespace and make the generated default resources class public using the documented approach, then rebuild cleanly. Verify multiple translated keys in XAML and inspect the generated code to avoid duplicate classes.
Why the review matters. This is a project configuration problem, not evidence that the translation value is missing. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
2. Every translated RESX generates a class
Observed behavior and cause. Adding Japanese and Filipino resources results in conflicting generated definitions or confusing resource lookups. The build treats each culture-specific file as an independent source of strongly typed code instead of a satellite resource.
Correction and evidence. Generate strongly typed code from the default resource and let culture-specific files supply values according to the chosen .NET setup. Rebuild from scratch and change culture while checking one stable resource property.
Why the review matters. Correct resource ownership keeps language variants interchangeable rather than competing at compile time. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
3. An x:Static label does not update
Observed behavior and cause. The user changes from English to Japanese, but the main navigation remains in English until a window is reopened. A static markup lookup was evaluated when the control was constructed, and no later notification told the control to refresh.
Correction and evidence. Recreate the view when safe or replace static labels with reactive bindings supplied by an observable localization service. Switch language inside a multi-panel editor and verify every visible panel, not only newly opened windows.
Why the review matters. Language refresh behavior must match user expectations and preserve work in progress. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
4. A language switch destroys unsaved edits
Observed behavior and cause. Recreating a view refreshes its labels but silently discards an object description that the registrar had not saved. The refresh strategy coupled translated UI construction to the lifecycle of editable business data.
Correction and evidence. Separate draft object state from view instances and restore selection and unsaved values after a controlled refresh. Type an unsaved description, switch language, then compare the editor and stored model before saving.
Why the review matters. Translation controls should never become an unannounced data-loss operation. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
5. Resource culture and number culture differ
Observed behavior and cause. The interface is Japanese but a measurement appears formatted in an unexpected decimal convention. The resource culture was changed without a clear decision about CurrentCulture or the formatter used by bindings.
Correction and evidence. Define a display-culture policy and set message and formatting cultures deliberately, including any user overrides. Render 1234.50 beside the actual stored value and test multiple locale choices.
Why the review matters. Formatting should be explainable to the reader and must not alter the measurement. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
6. Neutral culture fallback masks missing text
Observed behavior and cause. A target-language resource is missing an important warning and the app displays its default-language text. Resource fallback is behaving as designed, but missing critical keys are not flagged during release review.
Correction and evidence. Audit target keys against a required catalog and treat safety or transaction messages as release-blocking omissions. Remove a required key in a test build and confirm the coverage check catches it.
Why the review matters. Fallback protects runtime resilience but cannot substitute for honest translation coverage. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
7. An accession number is translated
Observed behavior and cause. A localized receipt changes a record identifier because its alphabetic prefix resembles an English word. The template did not distinguish a machine identifier from human language.
Correction and evidence. Preserve accession numbers as exact string data and translate only label text around them. Print and re-import a sample receipt containing identifiers with punctuation and mixed scripts.
Why the review matters. Object identity must survive every language and export destination. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
8. Approximate dates become precise
Observed behavior and cause. A note recorded as ‘around 1900’ appears in another language as a definite date. The translator lacked domain context for uncertainty and converted a flexible historical expression into a fixed calendar value.
Correction and evidence. Represent uncertainty in the data model and use localized templates for approximate, range and unknown dates. Check circa, before, after and unknown examples in printed reports and screen readers.
Why the review matters. Cultural understanding depends on preserving the degree of evidence, not adding false precision. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
9. RTL reverses a barcode sequence
Observed behavior and cause. A mixed Arabic-Latin identifier displays in reverse order and a curator copies the wrong characters. The interface mirrors direction globally without isolating technical identifiers as independent segments.
Correction and evidence. Use RTL layout where needed and give codes explicit direction handling, with a copy function that preserves original data. Compare visual, clipboard and scanner results for a test identifier.
Why the review matters. Layout direction must not rewrite a stable record key. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
10. One control inherits the wrong FlowDirection
Observed behavior and cause. Most Arabic screens read naturally, but a nested panel uses the wrong reading order and confuses the form sequence. The control tree has conflicting direction choices or components that do not mirror as assumed.
Correction and evidence. Audit the hierarchy, apply deliberate FlowDirection at the correct scope and review nested custom controls individually. Navigate with a keyboard through each field and inspect focus order and label pairing.
Why the review matters. A single misplaced panel can make a form difficult to complete even when translations are accurate. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
11. A font renders missing characters
Observed behavior and cause. Japanese titles appear correctly on the developer machine but as empty glyph boxes on a clean Linux installation. The application depends on locally installed fallback fonts or a font family without needed glyph coverage.
Correction and evidence. Choose supported font fallbacks with appropriate language coverage and test their licensing and deployment. Run clean platform installations, render long names with diacritics and print samples.
Why the review matters. Font coverage is a functional requirement for multilingual catalogues. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
12. Plural categories are hard-coded
Observed behavior and cause. An Arabic item count uses one English-style plural template for zero, one, two and larger quantities. The source design assumes two plural categories and resists target-language grammar.
Correction and evidence. Use an appropriate plural-message strategy with context and typed counts, separate from ordinary singular labels. Check representative counts and partial results in each target language with native review.
Why the review matters. A count is a claim about how much work was completed, so its message must be precise. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
13. A modal uses a fixed English button
Observed behavior and cause. The main form is localized, but a confirmation modal includes a custom English button label. That modal obtains its text from a different code path rather than a central resource key.
Correction and evidence. Trace the button owner, connect it to the catalog and validate its action identifier independently. Open confirm, cancel and retry dialogs after changing language during the session.
Why the review matters. Users need consistent action descriptions at decisions with irreversible consequences. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
14. An exception leaks a technical message
Observed behavior and cause. A failed save shows a raw .NET exception in the user’s selected language environment. The UI directly renders an exception.Message field that was written for developers rather than users.
Correction and evidence. Map exception categories to safe localized recovery guidance and log technical details separately with appropriate privacy controls. Simulate a read-only folder and verify that the actual object state matches the message.
Why the review matters. An understandable error should neither reveal internals nor pretend a failed save succeeded. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
15. A shortcut hint remains untranslated
Observed behavior and cause. A menu label changes language but displays an accelerator instruction that is incorrect on macOS. Human shortcut descriptions were embedded as literal strings rather than derived from actual platform bindings.
Correction and evidence. Bind commands to stable identifiers and generate localized labels and accurate shortcut hints per supported platform. Test shortcuts with multiple keyboard layouts and accessibility technologies.
Why the review matters. A translated command is useful only when it describes the behavior the keyboard actually triggers. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
16. Binding fails after changing culture
Observed behavior and cause. A localization service raises a change, yet one nested view continues to show the former language. The binding context or property notification does not reach an embedded control, even though the top-level window refreshes.
Correction and evidence. Inspect the localization service’s property notifications and each view’s DataContext inheritance. Switch languages repeatedly while observing nested lists, tooltips, error panels and popovers.
Why the review matters. A successful test of the root window does not prove the entire visual tree updated. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
17. Report language is inferred from UI
Observed behavior and cause. A registrar uses Arabic but must print a French transfer document; the report language silently follows the interface. The application treats interface preference as the universal language for every recipient and exported artifact.
Correction and evidence. Offer an explicit report-language choice, label it clearly and preserve accession data and original record titles. Print and export in a different language from the live UI, then compare source records.
Why the review matters. Documents travel between readers who may not share the operator’s language. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
18. Currency labels are ambiguous
Observed behavior and cause. A collection purchase amount appears with a symbol that is valid for more than one currency. Currency amount and currency code were not stored or presented explicitly enough for international review.
Correction and evidence. Preserve the currency code in the model and format the monetary amount with appropriate contextual information. Compare a receipt exported for two markets with identically shaped symbols.
Why the review matters. Formatting is not merely decorative when it changes the interpretation of money. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
19. Screen readers announce stale accessible names
Observed behavior and cause. A localized icon has an Arabic tooltip but the accessibility name remains English. The tooltip and accessibility property come from different literals or the latter did not receive a change notification.
Correction and evidence. Localize names, descriptions and live announcements from approved message keys and refresh bindings with the culture. Use a screen reader to navigate, search and save an object in each supported language.
Why the review matters. A visually translated interface can still be inaccessible to readers using assistive technologies. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
20. Long words overrun form columns
Observed behavior and cause. A German status phrase extends beyond its control and hides the confirmation button. The view’s widths were tuned for short English text rather than responsive translation expansion.
Correction and evidence. Prefer flexible layout, safe wrapping and minimum hit-target sizes to hard-coded button widths. Run pseudolocalized expansion and verify real German, French and Japanese copy in narrow window sizes.
Why the review matters. Translation coverage without layout capacity is not usable localized software. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
21. The selected culture is not retained
Observed behavior and cause. A user chooses Filipino but reopening the application returns it to English. The language setting was held only in memory or reset during startup.
Correction and evidence. Persist the user’s explicit choice with a defined scope and reapply it before creating key views. Restart on each supported operating system and confirm both the language and date-format preferences.
Why the review matters. A persistent selection is essential to making multilingual operation predictable. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
22. UI and background jobs use different cultures
Observed behavior and cause. A background-generated receipt uses English resource values while the main application uses Japanese. The background worker executes under a different culture context or reads a shared static property unexpectedly.
Correction and evidence. Pass an explicit report culture into background operations and avoid relying on incidental thread state. Start a background print, switch UI language and inspect which chosen culture owns the resulting file.
Why the review matters. The language of a document should depend on a declared reader choice, not thread timing. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
23. Resource placeholders disappear
Observed behavior and cause. A Japanese status string omits the object number from a confirmation, making it unclear which record changed. The translation replaced or deleted a structured placeholder because no context or validation was provided.
Correction and evidence. Define named placeholders, test exact parameter coverage and ensure translations keep required identifiers in safe positions. Change two objects and inspect confirmations that must distinguish them.
Why the review matters. Missing placeholders can obscure the actual subject of a completed operation. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
24. A search label changes query semantics
Observed behavior and cause. The search button is translated correctly, but selecting a translated status label changes the underlying filter value. The model uses displayed human text as if it were a stable status enumeration.
Correction and evidence. Bind selection to stable status codes and localize the displayed description separately. Filter by loan status, switch languages and verify the result count and record IDs do not change.
Why the review matters. A label may change while the data’s meaning and filters remain fixed. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
25. Untranslated keyboard focus instructions
Observed behavior and cause. The user can read Arabic labels but cannot understand an English keyboard-navigation hint. Accessibility help and focus instructions were outside the core translation inventory.
Correction and evidence. Include keyboard-help descriptions, focus messages and validation errors in the resource plan. Complete a form without using the mouse and verify that all help text matches the active language.
Why the review matters. Multilingual inclusion requires access to the workflow, not just to its visible text. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
26. An upgraded resource pack is incompatible
Observed behavior and cause. After updating the app, the Japanese resource satellite lacks messages used by a new transfer workflow. The code and localization assets were released with different catalog revisions.
Correction and evidence. Version required keys, check packaged satellite resources and test upgrade migration with existing preferences. Install an earlier build, upgrade and run all newly added actions in Japanese.
Why the review matters. Version compatibility matters for language packs just as it does for binary components. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
27. A wrong date format becomes an audit dispute
Observed behavior and cause. A localized loan receipt presents 03/04/2026 without explaining whether the day or month comes first. A culturally ambiguous numeric string was chosen for an international document.
Correction and evidence. Prefer unambiguous date presentation or explicitly state the convention; retain typed dates and time zones. Export one receipt in Japanese and one in English, then verify both refer to the same underlying event.
Why the review matters. Readers should be able to reconstruct when a decision occurred without guessing conventions. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
28. Only the source project is tested
Observed behavior and cause. Everything appears correct in the development build, but the installed macOS application lacks a satellite resource. Testing skipped packaging and clean-machine deployment of language-specific resources.
Correction and evidence. Inspect published build artifacts, then test clean installations, upgrades, offline use and representative font coverage. Repeat the same object-management tasks on every platform that the product claims to support.
Why the review matters. Quality belongs to the shipped application, not the developer’s workstation. For this case, save the selected culture, the exact task, the relevant resource key and a comparison with actual stored data; a screenshot alone can hide an incorrect transaction or stale binding.
Build a release gate around user journeys
A useful release gate begins with the source-key catalogue, a reviewed default-language edition and target-language resource files. The build verifies generated resource accessibility, available culture-specific resources and placeholder consistency. A reviewer checks high-impact instructions, status changes and failures before signing off ordinary copy. The team records which culture controls message lookup and which controls the formatting of numeric and date values.
The second gate uses task tests. Ask a person to search for an object, change a status, save a draft, trigger a denied save, recover, switch language and export a receipt for another audience. Compare each visible message with the actual state change. Repeat with long translated strings, assistive technology, Arabic layout, mixed-script accession numbers and uncertain historical dates. The test passes only if the workflow remains understandable and no user-authored data changes just because the UI language changes.
The final gate tests deployed artifacts. Check Windows, macOS and Linux where supported; include clean installations, upgrade paths, offline startup, available font fallback and printers or export readers used in real work. Record any platform-specific differences instead of promising perfect uniformity. If a failed test results from a project configuration error, fix the build; if it results from an ambiguous source string, improve the source context; if it results from layout, adjust the interface. Distinct causes need distinct remedies.
Frequently asked questions
Can Avalonia localize its user interface with RESX files?
Yes. Its documentation describes default and culture-specific .resx resources with XAML references. Configure accessible generated classes and verify the project’s actual build settings.
Why did an x:Static label fail to update after language switching?
A static expression is resolved when the control is created. Recreate the view or use a localization service and notifications for live updates.
Is setting the current culture enough to update an open window?
Not necessarily. Resource lookup, formatting and binding refresh have separate responsibilities. Test existing controls after the change.
What is FlowDirection for?
It can help arrange UI controls in right-to-left language contexts. Mixed-script numbers, identifiers and paths still need individual visual checks.
Can an accession number be translated?
The identifier should remain exact. Translate the explanatory label around it, not the record key itself.
Should an exported report always follow the UI language?
No. Offer an export-language decision when the document’s reader differs from the operator, while preserving original metadata.
How do I catch missing target keys?
Compare required target resource keys against the default catalogue during the build and run high-risk failure scenarios in each supported language.
What proves a multilingual Avalonia release is ready?
Validated resource builds and installed artifacts, normal and failure task tests, correct RTL and formatting, accessibility checks, data integrity and an upgrade test.
Primary references and further study
See the official Avalonia localization guide for RESX files, generated public resource classes, runtime switching, FlowDirection and culture formatting. The Avalonia 11 guide provides additional project-configuration examples; verify its version against your application. For translation principles beyond the framework, read Master Art of Translation and browse the Translate Like a Pro series index.
Final principle: language must not disrupt the record
A good multilingual Avalonia desktop application lets the registrar understand an action, perform it confidently and prove what happened. Culture-specific resources, reactive bindings, reliable layouts and real deployment tests work together to preserve meaning. The text may change when a person chooses another language; the identity of the collection, the state of the record and the truth of the result must not.