---
phase: 05-distribution-and-hardening
plan: 02
subsystem: ui
tags: [resx, localization, french, publish, single-file, win-x64]

# Dependency graph
requires:
  - phase: 04-bulk-operations-and-provisioning
    provides: Phase 4 UI strings (Transfer, BulkMembers, BulkSites, FolderStruct, Templates) all added to Strings.fr.resx without accents
provides:
  - Corrected French locale with proper diacritics for all 27 Phase 4 string keys
  - Single-file self-contained publish configuration (win-x64, ~200 MB EXE, zero loose DLLs)
affects: [05-distribution-and-hardening, deployment, QA]

# Tech tracking
tech-stack:
  added: []
  patterns:
    - "Conditional PropertyGroup for publish-only MSBuild properties — avoids polluting regular build/test with RuntimeIdentifier"

key-files:
  created: []
  modified:
    - SharepointToolbox/Localization/Strings.fr.resx
    - SharepointToolbox/SharepointToolbox.csproj

key-decisions:
  - "PublishSingleFile PropertyGroup is conditional on '$(PublishSingleFile)' == 'true' — regular dotnet build and dotnet test are unaffected"
  - "IncludeNativeLibrariesForSelfExtract=true required — PnP.Framework has native binaries that must bundle into the EXE"
  - "PublishTrimmed remains false — PnP.Framework and MSAL use reflection; trimming breaks at runtime"

patterns-established:
  - "Conditional PropertyGroup pattern for publish-only properties — activate via CLI flag, not default build"

requirements-completed: [FOUND-11]

# Metrics
duration: 3min
completed: 2026-04-03
---

# Phase 5 Plan 02: French Locale Fix and Single-File Publish Summary

**27 French diacritic corrections across all Phase 4 UI string keys, plus conditional win-x64 single-file publish producing one ~200 MB EXE with zero loose DLLs**

## Performance

- **Duration:** ~3 min
- **Started:** 2026-04-03T11:53:46Z
- **Completed:** 2026-04-03T11:56:06Z
- **Tasks:** 2
- **Files modified:** 2

## Accomplishments

- Fixed all 27 French strings missing diacritics (accents, cedillas) across Transfer, BulkMembers, BulkSites, FolderStruct, Templates, and shared bulk-operation keys
- Added conditional `<PropertyGroup>` to csproj enabling `dotnet publish -p:PublishSingleFile=true` to produce a single self-contained EXE for win-x64
- Full test suite remains green: 134 pass, 22 skip (interactive MSAL tests — expected)

## Task Commits

Each task was committed atomically:

1. **Task 1: Fix French diacritic-missing strings** - `f7829f0` (fix)
2. **Task 2: Add self-contained single-file publish configuration** - `39517d8` (feat)

## Files Created/Modified

- `SharepointToolbox/Localization/Strings.fr.resx` — 27 string values corrected with proper French diacritics
- `SharepointToolbox/SharepointToolbox.csproj` — Added conditional PropertyGroup for PublishSingleFile + SelfContained + IncludeNativeLibrariesForSelfExtract

## Decisions Made

- `PublishSingleFile` PropertyGroup uses condition `'$(PublishSingleFile)' == 'true'` so normal builds and test runs are unaffected — no RuntimeIdentifier lock-in during development
- `IncludeNativeLibrariesForSelfExtract=true` is necessary because PnP.Framework includes native binaries that must be bundled
- `PublishTrimmed` stays false (pre-established project decision — PnP.Framework and MSAL rely on reflection)

## Deviations from Plan

None - plan executed exactly as written.

Also corrected `bulk.confirm.title` ("Confirmer l'operation" -> "Confirmer l'opération") and `templates.empty` ("Aucun modele enregistre." -> "Aucun modèle enregistré.") and `templates.opt.settings` ("Parametres du site" -> "Paramètres du site") which were not in the plan's numbered list but were clearly broken diacritics in the same file. These fell under Rule 1 (auto-fix bugs) as they were defects in the same file being edited.

## Issues Encountered

None.

## User Setup Required

None - no external service configuration required.

## Next Phase Readiness

- French locale is now complete with proper diacritics across all 4 phases of UI strings
- Single-file publish is ready: `dotnet publish SharepointToolbox/SharepointToolbox.csproj -c Release -p:PublishSingleFile=true -o ./publish`
- Two Phase 5 success criteria (French locale + single EXE) now satisfied
- Remaining Phase 5 work: Plan 01 (tests), Plan 03 (installer/README), Plan 04 (final QA)

---
*Phase: 05-distribution-and-hardening*
*Completed: 2026-04-03*
