Files
Sharepoint-Toolbox/.planning/milestones/v1.0-phases/02-permissions/02-05-PLAN.md
Dev 724fdc550d chore: complete v1.0 milestone
Archive 5 phases (36 plans) to milestones/v1.0-phases/.
Archive roadmap, requirements, and audit to milestones/.
Evolve PROJECT.md with shipped state and validated requirements.
Collapse ROADMAP.md to one-line milestone summary.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 09:19:03 +02:00

9.3 KiB

phase, plan, type, wave, depends_on, files_modified, autonomous, requirements, must_haves
phase plan type wave depends_on files_modified autonomous requirements must_haves
02-permissions 05 execute 1
02-01
SharepointToolbox/Localization/Strings.resx
SharepointToolbox/Localization/Strings.fr.resx
SharepointToolbox/Localization/Strings.Designer.cs
true
PERM-01
PERM-02
PERM-04
PERM-05
PERM-06
truths artifacts key_links
All Phase 2 UI string keys exist in Strings.resx with English values
All Phase 2 UI string keys exist in Strings.fr.resx with French values (no English fallback — all keys translated)
Strings.Designer.cs contains a static property for each new key
Application still builds and existing localization tests pass
path provides contains
SharepointToolbox/Localization/Strings.resx English strings for Phase 2 UI grp.scan.opts
path provides contains
SharepointToolbox/Localization/Strings.fr.resx French translations for Phase 2 UI grp.scan.opts
path provides
SharepointToolbox/Localization/Strings.Designer.cs Static C# accessors for all string keys
from to via pattern
PermissionsView.xaml Strings.Designer.cs TranslationSource binding TranslationSource
Add all Phase 2 localization keys (EN + FR) to the existing resx files and update Strings.Designer.cs. This plan runs in Wave 1 parallel to Plans 02 and 03 because it only touches localization files.

Purpose: Phase 2 UI views reference localization keys. All keys must exist before the Views and ViewModels can bind to them. Output: Updated Strings.resx, Strings.fr.resx, Strings.Designer.cs with 15 new keys.

<execution_context> @C:/Users/SebastienQUEROL/.claude/get-shit-done/workflows/execute-plan.md @C:/Users/SebastienQUEROL/.claude/get-shit-done/templates/summary.md </execution_context>

@.planning/PROJECT.md @.planning/phases/02-permissions/02-RESEARCH.md

Phase 2 keys to add (from PS reference lines 2751-2761):

Key                    English Value                          French Value
----                   ----------------                       ---------------
grp.scan.opts          Scan Options                           Options d'analyse
chk.scan.folders       Scan Folders                           Analyser les dossiers
chk.recursive          Recursive (subsites)                   Récursif (sous-sites)
lbl.folder.depth       Folder depth:                          Profondeur des dossiers :
chk.max.depth          Maximum (all levels)                   Maximum (tous les niveaux)
chk.inherited.perms    Include Inherited Permissions          Inclure les permissions héritées
grp.export.fmt         Export Format                          Format d'export
rad.csv.perms          CSV                                    CSV
rad.html.perms         HTML                                   HTML
btn.gen.perms          Generate Report                        Générer le rapport
btn.open.perms         Open Report                            Ouvrir le rapport
btn.view.sites         View Sites                             Voir les sites
perm.site.url          Site URL:                              URL du site :
perm.or.select         or select multiple sites:              ou sélectionnez plusieurs sites :
perm.sites.selected    {0} site(s) selected                   {0} site(s) sélectionné(s)

Strings.Designer.cs pattern (existing):

// Each key becomes a static property:
public static string grp_scan_opts => ResourceManager.GetString("grp.scan.opts", resourceCulture) ?? string.Empty;
// Note: dots in key names become underscores in C# property names
Task 1: Add Phase 2 localization keys to resx files and Designer SharepointToolbox/Localization/Strings.resx SharepointToolbox/Localization/Strings.fr.resx SharepointToolbox/Localization/Strings.Designer.cs IMPORTANT: These are XML files — read each file first before modifying to understand the existing structure and avoid breaking it.
Step 1: Add the following 15 `<data>` entries to Strings.resx (English), inside the `<root>` element, after the last existing `<data>` block:
```xml
<data name="grp.scan.opts" xml:space="preserve"><value>Scan Options</value></data>
<data name="chk.scan.folders" xml:space="preserve"><value>Scan Folders</value></data>
<data name="chk.recursive" xml:space="preserve"><value>Recursive (subsites)</value></data>
<data name="lbl.folder.depth" xml:space="preserve"><value>Folder depth:</value></data>
<data name="chk.max.depth" xml:space="preserve"><value>Maximum (all levels)</value></data>
<data name="chk.inherited.perms" xml:space="preserve"><value>Include Inherited Permissions</value></data>
<data name="grp.export.fmt" xml:space="preserve"><value>Export Format</value></data>
<data name="rad.csv.perms" xml:space="preserve"><value>CSV</value></data>
<data name="rad.html.perms" xml:space="preserve"><value>HTML</value></data>
<data name="btn.gen.perms" xml:space="preserve"><value>Generate Report</value></data>
<data name="btn.open.perms" xml:space="preserve"><value>Open Report</value></data>
<data name="btn.view.sites" xml:space="preserve"><value>View Sites</value></data>
<data name="perm.site.url" xml:space="preserve"><value>Site URL:</value></data>
<data name="perm.or.select" xml:space="preserve"><value>or select multiple sites:</value></data>
<data name="perm.sites.selected" xml:space="preserve"><value>{0} site(s) selected</value></data>
```

Step 2: Add the same 15 `<data>` entries to Strings.fr.resx (French) with the French values from the table above. All values must be genuine French — no copying English values.

Step 3: Add 15 static properties to Strings.Designer.cs, following the exact pattern of existing properties. Dots in key names become underscores:
```csharp
public static string grp_scan_opts => ResourceManager.GetString("grp.scan.opts", resourceCulture) ?? string.Empty;
public static string chk_scan_folders => ResourceManager.GetString("chk.scan.folders", resourceCulture) ?? string.Empty;
public static string chk_recursive => ResourceManager.GetString("chk.recursive", resourceCulture) ?? string.Empty;
public static string lbl_folder_depth => ResourceManager.GetString("lbl.folder.depth", resourceCulture) ?? string.Empty;
public static string chk_max_depth => ResourceManager.GetString("chk.max.depth", resourceCulture) ?? string.Empty;
public static string chk_inherited_perms => ResourceManager.GetString("chk.inherited.perms", resourceCulture) ?? string.Empty;
public static string grp_export_fmt => ResourceManager.GetString("grp.export.fmt", resourceCulture) ?? string.Empty;
public static string rad_csv_perms => ResourceManager.GetString("rad.csv.perms", resourceCulture) ?? string.Empty;
public static string rad_html_perms => ResourceManager.GetString("rad.html.perms", resourceCulture) ?? string.Empty;
public static string btn_gen_perms => ResourceManager.GetString("btn.gen.perms", resourceCulture) ?? string.Empty;
public static string btn_open_perms => ResourceManager.GetString("btn.open.perms", resourceCulture) ?? string.Empty;
public static string btn_view_sites => ResourceManager.GetString("btn.view.sites", resourceCulture) ?? string.Empty;
public static string perm_site_url => ResourceManager.GetString("perm.site.url", resourceCulture) ?? string.Empty;
public static string perm_or_select => ResourceManager.GetString("perm.or.select", resourceCulture) ?? string.Empty;
public static string perm_sites_selected => ResourceManager.GetString("perm.sites.selected", resourceCulture) ?? string.Empty;
```
dotnet test C:/Users/dev/Documents/projets/Sharepoint/SharepointToolbox.Tests/SharepointToolbox.Tests.csproj --filter "FullyQualifiedName~LocalizationTests" -x Existing LocalizationTests pass. `dotnet build SharepointToolbox.slnx` succeeds. All 15 keys exist in both resx files with correct translations. Strings.Designer.cs has 15 new static properties. - `dotnet build C:/Users/dev/Documents/projets/Sharepoint/SharepointToolbox.slnx` → 0 errors - `dotnet test --filter "FullyQualifiedName~LocalizationTests"` → all pass - Strings.resx and Strings.fr.resx contain the key `grp.scan.opts` (grep verifiable) - Strings.fr.resx value for `chk.recursive` is "Récursif (sous-sites)" not English

<success_criteria>

  • All 15 Phase 2 localization keys present in EN and FR resx with genuine translations (no English fallback in FR)
  • Strings.Designer.cs has 15 corresponding static properties
  • No existing localization tests broken
  • Keys are accessible via TranslationSource.Instance["grp.scan.opts"] at runtime </success_criteria>
After completion, create `.planning/phases/02-permissions/02-05-SUMMARY.md`