9.3 KiB
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 |
|
|
true |
|
|
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.mdPhase 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
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>