FieldWorks Localization Review
SkillDev toolsReview or change FieldWorks user-facing strings: LocalizationManager/XLIFF and legacy .resx resources, localization keys, the StringTable strategy for XML-configuration labels, Crowdin-facing assets, and localization-sensitive automation metadata. Use whenever a change adds or edits any user-visible text in WinForms or Avalonia, adds a new UI project, touches resource files, or claims localization parity — even for a single new label or error message.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the FieldWorks Localization Review skill
What this skill tells your AI
The instructions your AI receives, as published by sillsdev/fieldworks in .claude/skills/fieldworks-localization-review/SKILL.md and read by ahel’s review.
Use This For
- Product-facing text in WinForms, Avalonia, settings UI, dialogs, validation messages, fallback or unsupported-state text, and promoted preview paths.
.resxadditions or changes, localization key flow, and Crowdin-sensitive resource updates.- Automation metadata where
Name, tooltip, or label is localized but stableAutomationIdmust remain nonlocalized.
The Localization Strategies
- Field labels (text originating in XML configuration: layout/part
labels, browse column headings, XCore menu labels) come from layout data
and resolve through the StringTable strategy
(
XmlUtils.GetLocalizedAttributeValue,strings-{locale}.xml) at render time. The view-definition IR carries aLocalizationKeyper node; never bake English label text into the IR or region model. - FieldWorks-owned UI text — WinForms and Avalonia forms, controls,
and dialogs (Save, Cancel, validation errors, unsupported-row text,
dialog labels, accessible names) — lives in the owning project's
.resx; translations ship as Crowdin-built satellite assemblies. This matches the official Avalonia localization guidance (https://docs.avaloniaui.net/docs/app-development/localizing). For the Avalonia projects,FwAvaloniaStrings/FwAvaloniaDialogsStringsare thin accessors resolving viaResourceManageroverFwAvaloniaStrings.resx/FwAvaloniaDialogsStrings.resx; a missing entry falls back to the string id so drift is visible, andAvaloniaLocalizationTestspins every accessor property against the neutral resx. No live UI-language switching is needed: FLEx already shows a restart-required prompt on UI-language change (LexOptionsDlg), matching the Avalonia doc's caveat that x:Static/resx does not live-update. - L10NSharp/XLIFF is only for UI supplied by Palaso, FlexBridge, or
Chorus (or a FieldWorks form hosting an L10NSharp widget). Never add
L10NSharp usage for FieldWorks-owned strings, and never borrow
Palaso/Choruscatalog ids (e.g. "Common.Help") for FieldWorks-owned text — put such strings in the project resx with FwAvalonia-owned keys.
Current source of truth. For FieldWorks-owned Avalonia UI text, the
neutral .resx is the authoritative English source; the accessor classes
(FwAvaloniaStrings.cs, FwAvaloniaDialogsStrings.cs) are thin
ResourceManager wrappers over it, not an independent string source.
FwAvaloniaLocalization/FwAvaloniaLocalizationBootstrap were deleted, and
FieldWorks.InitializeLocalizationManager no longer registers FwAvalonia
namespaces.
Required Checks
- Product-facing user-visible strings live in the established localization mechanism; preview-only hardcoded text stays clearly preview-only.
- New UI mode labels, fallback or unsupported messages, validation errors, and diagnostics are localized before a product path is exposed.
- Stable
AutomationIdand other selectors remain nonlocalized; localized names, tooltips, and labels may vary by locale. - Resource keys and neutral-resx English entries stay aligned with existing Crowdin and repo conventions (same seed English as any WinForms twin so Crowdin translation memory matches).
- New SDK-style csprojs declare
<RootNamespace>explicitly — it keeps satellite resource names stable, and the Crowdin satellite-assembly build (Build/Src/FwBuildTasks/Localization/ProjectLocalizer.cs) fails without it. - Resx satellites need no runtime bootstrap; only hosts exercising genuine Palaso/FlexBridge/Chorus-supplied UI need an L10NSharp LocalizationManager, and those prove their bootstrap or their intentional English fallback.
- If localization parity is claimed, tests or evidence cover the localized path and confirm selectors do not depend on localized text. English on the Avalonia view where legacy shows translations is a parity failure, not cosmetics.
Review Red Flags
- Hardcoded English text in product C#, XAML, or product-facing preview-promotion paths.
- Field labels rendered raw from the IR without StringTable resolution.
- New L10NSharp usage — or a borrowed
Palaso/Choruscatalog id — for a FieldWorks-owned string; those belong in the project resx with FieldWorks-owned keys. - Tests or automation selectors depending on localized labels when stable IDs exist or are required.
- A product route reusing preview-only placeholder text.
- Localization claims without resource updates or without identifying remaining hardcoded strings.
Handoff
List the resx keys, accessor properties, StringTable entries, or XLIFF ids (Palaso/FlexBridge/Chorus UI only) touched, remaining hardcoded product strings, automation identity strategy, and whether localized behavior has executable evidence or is still pending.
Keep This Skill Current
When a new localization strategy, Crowdin constraint, or resource convention
appears (or a gap like the <RootNamespace> one is found), record it here
in the same PR; route durable lessons through
../fieldworks-winforms-to-avalonia-migration/references/lessons-learned.md.
Signals
- GitHub stars
- 111
- Forks
- 42
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
fieldworks-localization-review- Source
- github.com/sillsdev/fieldworks