Skip to content
Back to skills

Fieldworks Localization Review

ASecurity

Review 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.

  • 111 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 3, 2026
datac#node

Security analysis

A100/100

Scanned September 3, 2026

npx -y skills add sillsdev/FieldWorks --skill fieldworks-localization-review --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Fieldworks Localization Review?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Fieldworks Localization Review
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/sillsdev-fieldworks-localization-review/badge)](https://www.skillsdirectory.com/skills/sillsdev-fieldworks-localization-review)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: fieldworks-localization-review
description: "Review 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."
---

# FieldWorks Localization Review

## Use This For

- Product-facing text in WinForms, Avalonia, settings UI, dialogs,
  validation messages, fallback or unsupported-state text, and promoted
  preview paths.
- `.resx` additions or changes, localization key flow, and Crowdin-sensitive
  resource updates.
- Automation metadata where `Name`, tooltip, or label is localized but
  stable `AutomationId` must remain nonlocalized.

## The Localization Strategies

1. **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 a `LocalizationKey` per
   node; never bake English label text into the IR or region model.
2. **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`/`FwAvaloniaDialogsStrings` are
   thin accessors resolving via `ResourceManager` over
   `FwAvaloniaStrings.resx`/`FwAvaloniaDialogsStrings.resx`; a missing
   entry falls back to the string id so drift is visible, and
   `AvaloniaLocalizationTests` pins 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.
3. **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`/`Chorus` catalog 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 `AutomationId` and 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`/`Chorus` catalog 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`.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…