- ProfileManagementViewModel: IAppRegistrationService injected, RegisterAppCommand/RemoveAppCommand added - IsRegistering, ShowFallbackInstructions, RegistrationStatus observable properties - HasRegisteredApp computed property, CanRegisterApp/CanRemoveApp guards - RegisterAppAsync: admin check, fallback panel, AppId persistence - RemoveAppAsync: removal + MSAL clear + AppId null + persistence - App.xaml.cs: IAppRegistrationService singleton registered - Strings.resx/fr.resx: 16 new localization keys for register/remove/fallback flow
438 lines
27 KiB
XML
438 lines
27 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<root>
|
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
|
<xsd:element name="root" msdata:IsDataSet="true">
|
|
<xsd:complexType>
|
|
<xsd:choice maxOccurs="unbounded">
|
|
<xsd:element name="metadata">
|
|
<xsd:complexType>
|
|
<xsd:sequence>
|
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
|
</xsd:sequence>
|
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
|
<xsd:attribute name="type" type="xsd:string" />
|
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
|
<xsd:attribute ref="xml:space" />
|
|
</xsd:complexType>
|
|
</xsd:element>
|
|
<xsd:element name="assembly">
|
|
<xsd:complexType>
|
|
<xsd:attribute name="alias" type="xsd:string" />
|
|
<xsd:attribute name="name" type="xsd:string" />
|
|
</xsd:complexType>
|
|
</xsd:element>
|
|
<xsd:element name="data">
|
|
<xsd:complexType>
|
|
<xsd:sequence>
|
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
|
</xsd:sequence>
|
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
|
<xsd:attribute name="type" type="xsd:string" />
|
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
|
<xsd:attribute ref="xml:space" />
|
|
</xsd:complexType>
|
|
</xsd:element>
|
|
<xsd:element name="resheader">
|
|
<xsd:complexType>
|
|
<xsd:sequence>
|
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
</xsd:sequence>
|
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
|
</xsd:complexType>
|
|
</xsd:element>
|
|
</xsd:choice>
|
|
</xsd:complexType>
|
|
</xsd:element>
|
|
</xsd:schema>
|
|
<resheader name="resmimetype">
|
|
<value>text/microsoft-resx</value>
|
|
</resheader>
|
|
<resheader name="version">
|
|
<value>2.0</value>
|
|
</resheader>
|
|
<resheader name="reader">
|
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
</resheader>
|
|
<resheader name="writer">
|
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
</resheader>
|
|
<data name="app.title" xml:space="preserve">
|
|
<value>SharePoint Toolbox</value>
|
|
</data>
|
|
<data name="toolbar.connect" xml:space="preserve">
|
|
<value>Connect</value>
|
|
</data>
|
|
<data name="toolbar.manage" xml:space="preserve">
|
|
<value>Manage Profiles...</value>
|
|
</data>
|
|
<data name="toolbar.clear" xml:space="preserve">
|
|
<value>Clear Session</value>
|
|
</data>
|
|
<data name="tab.permissions" xml:space="preserve">
|
|
<value>Permissions</value>
|
|
</data>
|
|
<data name="tab.storage" xml:space="preserve">
|
|
<value>Storage</value>
|
|
</data>
|
|
<data name="tab.search" xml:space="preserve">
|
|
<value>File Search</value>
|
|
</data>
|
|
<data name="tab.duplicates" xml:space="preserve">
|
|
<value>Duplicates</value>
|
|
</data>
|
|
<data name="tab.templates" xml:space="preserve">
|
|
<value>Templates</value>
|
|
</data>
|
|
<data name="tab.bulk" xml:space="preserve">
|
|
<value>Bulk Operations</value>
|
|
</data>
|
|
<data name="tab.structure" xml:space="preserve">
|
|
<value>Folder Structure</value>
|
|
</data>
|
|
<data name="tab.settings" xml:space="preserve">
|
|
<value>Settings</value>
|
|
</data>
|
|
<data name="tab.comingsoon" xml:space="preserve">
|
|
<value>Coming soon</value>
|
|
</data>
|
|
<data name="btn.cancel" xml:space="preserve">
|
|
<value>Cancel</value>
|
|
</data>
|
|
<data name="settings.language" xml:space="preserve">
|
|
<value>Language</value>
|
|
</data>
|
|
<data name="settings.lang.en" xml:space="preserve">
|
|
<value>English</value>
|
|
</data>
|
|
<data name="settings.lang.fr" xml:space="preserve">
|
|
<value>French</value>
|
|
</data>
|
|
<data name="settings.folder" xml:space="preserve">
|
|
<value>Data output folder</value>
|
|
</data>
|
|
<data name="settings.browse" xml:space="preserve">
|
|
<value>Browse...</value>
|
|
</data>
|
|
<data name="profile.name" xml:space="preserve">
|
|
<value>Profile name</value>
|
|
</data>
|
|
<data name="profile.url" xml:space="preserve">
|
|
<value>Tenant URL</value>
|
|
</data>
|
|
<data name="profile.clientid" xml:space="preserve">
|
|
<value>Client ID</value>
|
|
</data>
|
|
<data name="profile.add" xml:space="preserve">
|
|
<value>Add</value>
|
|
</data>
|
|
<data name="profile.rename" xml:space="preserve">
|
|
<value>Rename</value>
|
|
</data>
|
|
<data name="profile.delete" xml:space="preserve">
|
|
<value>Delete</value>
|
|
</data>
|
|
<data name="status.ready" xml:space="preserve">
|
|
<value>Ready</value>
|
|
</data>
|
|
<data name="status.cancelled" xml:space="preserve">
|
|
<value>Operation cancelled</value>
|
|
</data>
|
|
<data name="err.auth.failed" xml:space="preserve">
|
|
<value>Authentication failed. Check tenant URL and Client ID.</value>
|
|
</data>
|
|
<data name="err.generic" xml:space="preserve">
|
|
<value>An error occurred. See log for details.</value>
|
|
</data>
|
|
<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="chk.simplified.mode" xml:space="preserve"><value>Simplified mode</value></data>
|
|
<data name="grp.display.opts" xml:space="preserve"><value>Display Options</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.detail.detailed" xml:space="preserve"><value>Detailed (all rows)</value></data>
|
|
<data name="rad.detail.simple" xml:space="preserve"><value>Simple (summary only)</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>
|
|
<!-- Phase 3: Storage Tab -->
|
|
<data name="chk.per.lib" xml:space="preserve"><value>Per-Library Breakdown</value></data>
|
|
<data name="chk.subsites" xml:space="preserve"><value>Include Subsites</value></data>
|
|
<data name="stor.note" xml:space="preserve"><value>Note: deeper folder scans on large sites may take several minutes.</value></data>
|
|
<data name="btn.gen.storage" xml:space="preserve"><value>Generate Metrics</value></data>
|
|
<data name="btn.open.storage" xml:space="preserve"><value>Open Report</value></data>
|
|
<data name="stor.col.library" xml:space="preserve"><value>Library</value></data>
|
|
<data name="stor.col.site" xml:space="preserve"><value>Site</value></data>
|
|
<data name="stor.col.files" xml:space="preserve"><value>Files</value></data>
|
|
<data name="stor.col.size" xml:space="preserve"><value>Total Size</value></data>
|
|
<data name="stor.col.versions" xml:space="preserve"><value>Version Size</value></data>
|
|
<data name="stor.col.lastmod" xml:space="preserve"><value>Last Modified</value></data>
|
|
<data name="stor.col.share" xml:space="preserve"><value>Share of Total</value></data>
|
|
<data name="stor.rad.csv" xml:space="preserve"><value>CSV</value></data>
|
|
<data name="stor.rad.html" xml:space="preserve"><value>HTML</value></data>
|
|
<!-- Phase 3: File Search Tab -->
|
|
<data name="grp.search.filters" xml:space="preserve"><value>Search Filters</value></data>
|
|
<data name="lbl.detail.level" xml:space="preserve"><value>Detail level:</value></data>
|
|
<data name="lbl.extensions" xml:space="preserve"><value>Extension(s):</value></data>
|
|
<data name="ph.extensions" xml:space="preserve"><value>docx pdf xlsx</value></data>
|
|
<data name="lbl.regex" xml:space="preserve"><value>Name / Regex:</value></data>
|
|
<data name="ph.regex" xml:space="preserve"><value>Ex: report.* or \.bak$</value></data>
|
|
<data name="chk.created.after" xml:space="preserve"><value>Created after:</value></data>
|
|
<data name="chk.created.before" xml:space="preserve"><value>Created before:</value></data>
|
|
<data name="chk.modified.after" xml:space="preserve"><value>Modified after:</value></data>
|
|
<data name="chk.modified.before" xml:space="preserve"><value>Modified before:</value></data>
|
|
<data name="lbl.created.by" xml:space="preserve"><value>Created by:</value></data>
|
|
<data name="ph.created.by" xml:space="preserve"><value>First Last or email</value></data>
|
|
<data name="lbl.modified.by" xml:space="preserve"><value>Modified by:</value></data>
|
|
<data name="ph.modified.by" xml:space="preserve"><value>First Last or email</value></data>
|
|
<data name="lbl.library" xml:space="preserve"><value>Library:</value></data>
|
|
<data name="ph.library" xml:space="preserve"><value>Optional relative path e.g. Shared Documents</value></data>
|
|
<data name="lbl.max.results" xml:space="preserve"><value>Max results:</value></data>
|
|
<data name="lbl.site.url" xml:space="preserve"><value>Site URL:</value></data>
|
|
<data name="lbl.summary.users" xml:space="preserve"><value>user(s)</value></data>
|
|
<data name="ph.site.url" xml:space="preserve"><value>https://tenant.sharepoint.com/sites/MySite</value></data>
|
|
<data name="btn.run.search" xml:space="preserve"><value>Run Search</value></data>
|
|
<data name="btn.open.search" xml:space="preserve"><value>Open Results</value></data>
|
|
<data name="srch.col.name" xml:space="preserve"><value>File Name</value></data>
|
|
<data name="srch.col.ext" xml:space="preserve"><value>Extension</value></data>
|
|
<data name="srch.col.created" xml:space="preserve"><value>Created</value></data>
|
|
<data name="srch.col.modified" xml:space="preserve"><value>Modified</value></data>
|
|
<data name="srch.col.author" xml:space="preserve"><value>Created By</value></data>
|
|
<data name="srch.col.modby" xml:space="preserve"><value>Modified By</value></data>
|
|
<data name="srch.col.size" xml:space="preserve"><value>Size</value></data>
|
|
<data name="srch.col.path" xml:space="preserve"><value>Path</value></data>
|
|
<data name="srch.rad.csv" xml:space="preserve"><value>CSV</value></data>
|
|
<data name="srch.rad.html" xml:space="preserve"><value>HTML</value></data>
|
|
<!-- Phase 3: Duplicates Tab -->
|
|
<data name="grp.dup.type" xml:space="preserve"><value>Duplicate Type</value></data>
|
|
<data name="rad.dup.files" xml:space="preserve"><value>Duplicate files</value></data>
|
|
<data name="rad.dup.folders" xml:space="preserve"><value>Duplicate folders</value></data>
|
|
<data name="grp.dup.criteria" xml:space="preserve"><value>Comparison Criteria</value></data>
|
|
<data name="lbl.dup.note" xml:space="preserve"><value>Name is always the primary criterion. Check additional criteria:</value></data>
|
|
<data name="chk.dup.size" xml:space="preserve"><value>Same size</value></data>
|
|
<data name="chk.dup.created" xml:space="preserve"><value>Same creation date</value></data>
|
|
<data name="chk.dup.modified" xml:space="preserve"><value>Same modification date</value></data>
|
|
<data name="chk.dup.subfolders" xml:space="preserve"><value>Same subfolder count</value></data>
|
|
<data name="chk.dup.filecount" xml:space="preserve"><value>Same file count</value></data>
|
|
<data name="chk.include.subsites" xml:space="preserve"><value>Include subsites</value></data>
|
|
<data name="ph.dup.lib" xml:space="preserve"><value>All (leave empty)</value></data>
|
|
<data name="btn.run.scan" xml:space="preserve"><value>Run Scan</value></data>
|
|
<data name="btn.open.results" xml:space="preserve"><value>Open Results</value></data>
|
|
<!-- Phase 4: Tab headers -->
|
|
<data name="tab.transfer" xml:space="preserve"><value>Transfer</value></data>
|
|
<data name="tab.bulkMembers" xml:space="preserve"><value>Bulk Members</value></data>
|
|
<data name="tab.bulkSites" xml:space="preserve"><value>Bulk Sites</value></data>
|
|
<data name="tab.folderStructure" xml:space="preserve"><value>Folder Structure</value></data>
|
|
<!-- Phase 4: Transfer tab -->
|
|
<data name="transfer.sourcesite" xml:space="preserve"><value>Source Site</value></data>
|
|
<data name="transfer.destsite" xml:space="preserve"><value>Destination Site</value></data>
|
|
<data name="transfer.sourcelibrary" xml:space="preserve"><value>Source Library</value></data>
|
|
<data name="transfer.destlibrary" xml:space="preserve"><value>Destination Library</value></data>
|
|
<data name="transfer.sourcefolder" xml:space="preserve"><value>Source Folder</value></data>
|
|
<data name="transfer.destfolder" xml:space="preserve"><value>Destination Folder</value></data>
|
|
<data name="transfer.mode" xml:space="preserve"><value>Transfer Mode</value></data>
|
|
<data name="transfer.mode.copy" xml:space="preserve"><value>Copy</value></data>
|
|
<data name="transfer.mode.move" xml:space="preserve"><value>Move</value></data>
|
|
<data name="transfer.conflict" xml:space="preserve"><value>Conflict Policy</value></data>
|
|
<data name="transfer.conflict.skip" xml:space="preserve"><value>Skip</value></data>
|
|
<data name="transfer.conflict.overwrite" xml:space="preserve"><value>Overwrite</value></data>
|
|
<data name="transfer.conflict.rename" xml:space="preserve"><value>Rename (append suffix)</value></data>
|
|
<data name="transfer.browse" xml:space="preserve"><value>Browse...</value></data>
|
|
<data name="transfer.start" xml:space="preserve"><value>Start Transfer</value></data>
|
|
<data name="transfer.nofiles" xml:space="preserve"><value>No files found to transfer.</value></data>
|
|
<!-- Phase 4: Bulk Members tab -->
|
|
<data name="bulkmembers.import" xml:space="preserve"><value>Import CSV</value></data>
|
|
<data name="bulkmembers.example" xml:space="preserve"><value>Load Example</value></data>
|
|
<data name="bulkmembers.execute" xml:space="preserve"><value>Add Members</value></data>
|
|
<data name="bulkmembers.preview" xml:space="preserve"><value>Preview ({0} rows, {1} valid, {2} invalid)</value></data>
|
|
<data name="bulkmembers.groupname" xml:space="preserve"><value>Group Name</value></data>
|
|
<data name="bulkmembers.groupurl" xml:space="preserve"><value>Group URL</value></data>
|
|
<data name="bulkmembers.email" xml:space="preserve"><value>Email</value></data>
|
|
<data name="bulkmembers.role" xml:space="preserve"><value>Role</value></data>
|
|
<!-- Phase 4: Bulk Sites tab -->
|
|
<data name="bulksites.import" xml:space="preserve"><value>Import CSV</value></data>
|
|
<data name="bulksites.example" xml:space="preserve"><value>Load Example</value></data>
|
|
<data name="bulksites.execute" xml:space="preserve"><value>Create Sites</value></data>
|
|
<data name="bulksites.preview" xml:space="preserve"><value>Preview ({0} rows, {1} valid, {2} invalid)</value></data>
|
|
<data name="bulksites.name" xml:space="preserve"><value>Name</value></data>
|
|
<data name="bulksites.alias" xml:space="preserve"><value>Alias</value></data>
|
|
<data name="bulksites.type" xml:space="preserve"><value>Type</value></data>
|
|
<data name="bulksites.owners" xml:space="preserve"><value>Owners</value></data>
|
|
<data name="bulksites.members" xml:space="preserve"><value>Members</value></data>
|
|
<!-- Phase 4: Folder Structure tab -->
|
|
<data name="folderstruct.import" xml:space="preserve"><value>Import CSV</value></data>
|
|
<data name="folderstruct.example" xml:space="preserve"><value>Load Example</value></data>
|
|
<data name="folderstruct.execute" xml:space="preserve"><value>Create Folders</value></data>
|
|
<data name="folderstruct.preview" xml:space="preserve"><value>Preview ({0} folders to create)</value></data>
|
|
<data name="folderstruct.library" xml:space="preserve"><value>Target Library</value></data>
|
|
<data name="folderstruct.siteurl" xml:space="preserve"><value>Site URL</value></data>
|
|
<!-- Phase 4: Templates tab -->
|
|
<data name="templates.list" xml:space="preserve"><value>Saved Templates</value></data>
|
|
<data name="templates.capture" xml:space="preserve"><value>Capture Template</value></data>
|
|
<data name="templates.apply" xml:space="preserve"><value>Apply Template</value></data>
|
|
<data name="templates.rename" xml:space="preserve"><value>Rename</value></data>
|
|
<data name="templates.delete" xml:space="preserve"><value>Delete</value></data>
|
|
<data name="templates.siteurl" xml:space="preserve"><value>Source Site URL</value></data>
|
|
<data name="templates.name" xml:space="preserve"><value>Template Name</value></data>
|
|
<data name="templates.newtitle" xml:space="preserve"><value>New Site Title</value></data>
|
|
<data name="templates.newalias" xml:space="preserve"><value>New Site Alias</value></data>
|
|
<data name="templates.options" xml:space="preserve"><value>Capture Options</value></data>
|
|
<data name="templates.opt.libraries" xml:space="preserve"><value>Libraries</value></data>
|
|
<data name="templates.opt.folders" xml:space="preserve"><value>Folders</value></data>
|
|
<data name="templates.opt.permissions" xml:space="preserve"><value>Permission Groups</value></data>
|
|
<data name="templates.opt.logo" xml:space="preserve"><value>Site Logo</value></data>
|
|
<data name="templates.opt.settings" xml:space="preserve"><value>Site Settings</value></data>
|
|
<data name="templates.empty" xml:space="preserve"><value>No templates saved yet.</value></data>
|
|
<!-- Phase 4: Shared bulk operation strings -->
|
|
<data name="bulk.confirm.title" xml:space="preserve"><value>Confirm Operation</value></data>
|
|
<data name="bulk.confirm.proceed" xml:space="preserve"><value>Proceed</value></data>
|
|
<data name="bulk.confirm.cancel" xml:space="preserve"><value>Cancel</value></data>
|
|
<data name="bulk.confirm.message" xml:space="preserve"><value>{0} — Proceed?</value></data>
|
|
<data name="bulk.result.success" xml:space="preserve"><value>Completed: {0} succeeded, {1} failed</value></data>
|
|
<data name="bulk.result.allfailed" xml:space="preserve"><value>All {0} items failed.</value></data>
|
|
<data name="bulk.result.allsuccess" xml:space="preserve"><value>All {0} items completed successfully.</value></data>
|
|
<data name="bulk.exportfailed" xml:space="preserve"><value>Export Failed Items</value></data>
|
|
<data name="bulk.retryfailed" xml:space="preserve"><value>Retry Failed</value></data>
|
|
<data name="bulk.validation.invalid" xml:space="preserve"><value>{0} rows have validation errors. Fix and re-import.</value></data>
|
|
<data name="bulk.csvimport.title" xml:space="preserve"><value>Select CSV File</value></data>
|
|
<data name="bulk.csvimport.filter" xml:space="preserve"><value>CSV Files (*.csv)|*.csv</value></data>
|
|
<!-- Phase 4: Folder browser dialog -->
|
|
<data name="folderbrowser.title" xml:space="preserve"><value>Select Folder</value></data>
|
|
<data name="folderbrowser.loading" xml:space="preserve"><value>Loading folder tree...</value></data>
|
|
<data name="folderbrowser.select" xml:space="preserve"><value>Select</value></data>
|
|
<data name="folderbrowser.cancel" xml:space="preserve"><value>Cancel</value></data>
|
|
<!-- Phase 6: Global Site Selection toolbar -->
|
|
<data name="toolbar.selectSites" xml:space="preserve">
|
|
<value>Select Sites</value>
|
|
</data>
|
|
<data name="toolbar.selectSites.tooltip" xml:space="preserve">
|
|
<value>Select target sites for all tabs</value>
|
|
</data>
|
|
<data name="toolbar.selectSites.tooltipDisabled" xml:space="preserve">
|
|
<value>Connect to a tenant first</value>
|
|
</data>
|
|
<data name="toolbar.globalSites.count" xml:space="preserve">
|
|
<value>{0} site(s) selected</value>
|
|
</data>
|
|
<data name="toolbar.globalSites.none" xml:space="preserve">
|
|
<value>No sites selected</value>
|
|
</data>
|
|
<!-- Phase 7: User Access Audit -->
|
|
<data name="tab.userAccessAudit" xml:space="preserve">
|
|
<value>User Access Audit</value>
|
|
</data>
|
|
<data name="audit.grp.users" xml:space="preserve">
|
|
<value>Select Users</value>
|
|
</data>
|
|
<data name="audit.grp.sites" xml:space="preserve">
|
|
<value>Target Sites</value>
|
|
</data>
|
|
<data name="audit.grp.options" xml:space="preserve">
|
|
<value>Scan Options</value>
|
|
</data>
|
|
<data name="audit.search.placeholder" xml:space="preserve">
|
|
<value>Search users by name or email...</value>
|
|
</data>
|
|
<data name="audit.users.selected" xml:space="preserve">
|
|
<value>{0} user(s) selected</value>
|
|
</data>
|
|
<data name="audit.btn.run" xml:space="preserve">
|
|
<value>Run Audit</value>
|
|
</data>
|
|
<data name="audit.btn.exportCsv" xml:space="preserve">
|
|
<value>Export CSV</value>
|
|
</data>
|
|
<data name="audit.btn.exportHtml" xml:space="preserve">
|
|
<value>Export HTML</value>
|
|
</data>
|
|
<data name="audit.summary.total" xml:space="preserve">
|
|
<value>Total Accesses</value>
|
|
</data>
|
|
<data name="audit.summary.sites" xml:space="preserve">
|
|
<value>Sites</value>
|
|
</data>
|
|
<data name="audit.summary.highPriv" xml:space="preserve">
|
|
<value>High Privilege</value>
|
|
</data>
|
|
<data name="audit.toggle.byUser" xml:space="preserve">
|
|
<value>By User</value>
|
|
</data>
|
|
<data name="audit.toggle.bySite" xml:space="preserve">
|
|
<value>By Site</value>
|
|
</data>
|
|
<data name="audit.filter.placeholder" xml:space="preserve">
|
|
<value>Filter results...</value>
|
|
</data>
|
|
<data name="audit.noUsers" xml:space="preserve">
|
|
<value>Select at least one user to audit.</value>
|
|
</data>
|
|
<data name="audit.noSites" xml:space="preserve">
|
|
<value>Select at least one site to scan.</value>
|
|
</data>
|
|
<!-- Phase 9: Storage Visualization Charts -->
|
|
<data name="stor.chart.title" xml:space="preserve"><value>Storage by File Type</value></data>
|
|
<data name="stor.chart.donut" xml:space="preserve"><value>Donut Chart</value></data>
|
|
<data name="stor.chart.bar" xml:space="preserve"><value>Bar Chart</value></data>
|
|
<data name="stor.chart.toggle" xml:space="preserve"><value>Chart View:</value></data>
|
|
<data name="stor.chart.nodata" xml:space="preserve"><value>Run a storage scan to see file type breakdown.</value></data>
|
|
<!-- Phase 12: Logo UI -->
|
|
<data name="settings.logo.title" xml:space="preserve"><value>MSP Logo</value></data>
|
|
<data name="settings.logo.browse" xml:space="preserve"><value>Import</value></data>
|
|
<data name="settings.logo.clear" xml:space="preserve"><value>Clear</value></data>
|
|
<data name="settings.logo.nopreview" xml:space="preserve"><value>No logo configured</value></data>
|
|
<data name="profile.logo.title" xml:space="preserve"><value>Client Logo</value></data>
|
|
<data name="profile.logo.browse" xml:space="preserve"><value>Import</value></data>
|
|
<data name="profile.logo.clear" xml:space="preserve"><value>Clear</value></data>
|
|
<data name="profile.logo.autopull" xml:space="preserve"><value>Pull from Entra</value></data>
|
|
<data name="profile.logo.nopreview" xml:space="preserve"><value>No logo configured</value></data>
|
|
<!-- Phase 14: Directory Browse UI -->
|
|
<data name="audit.mode.search" xml:space="preserve"><value>Search</value></data>
|
|
<data name="audit.mode.browse" xml:space="preserve"><value>Browse Directory</value></data>
|
|
<data name="directory.grp.browse" xml:space="preserve"><value>User Directory</value></data>
|
|
<data name="directory.btn.load" xml:space="preserve"><value>Load Directory</value></data>
|
|
<data name="directory.btn.cancel" xml:space="preserve"><value>Cancel</value></data>
|
|
<data name="directory.filter.placeholder" xml:space="preserve"><value>Filter users...</value></data>
|
|
<data name="directory.chk.guests" xml:space="preserve"><value>Include guests</value></data>
|
|
<data name="directory.status.count" xml:space="preserve"><value>users</value></data>
|
|
<data name="directory.hint.doubleclick" xml:space="preserve"><value>Double-click a user to add to audit</value></data>
|
|
<data name="directory.col.name" xml:space="preserve"><value>Name</value></data>
|
|
<data name="directory.col.upn" xml:space="preserve"><value>Email</value></data>
|
|
<data name="directory.col.department" xml:space="preserve"><value>Department</value></data>
|
|
<data name="directory.col.jobtitle" xml:space="preserve"><value>Job Title</value></data>
|
|
<data name="directory.col.type" xml:space="preserve"><value>Type</value></data>
|
|
<!-- Phase 16: Report Consolidation Toggle -->
|
|
<data name="audit.grp.export" xml:space="preserve"><value>Export Options</value></data>
|
|
<data name="chk.merge.permissions" xml:space="preserve"><value>Merge duplicate permissions</value></data>
|
|
<!-- Phase 19: App Registration & Removal -->
|
|
<data name="profile.register" xml:space="preserve"><value>Register App</value></data>
|
|
<data name="profile.remove" xml:space="preserve"><value>Remove App</value></data>
|
|
<data name="profile.register.checking" xml:space="preserve"><value>Checking permissions...</value></data>
|
|
<data name="profile.register.registering" xml:space="preserve"><value>Registering application...</value></data>
|
|
<data name="profile.register.success" xml:space="preserve"><value>Application registered successfully</value></data>
|
|
<data name="profile.register.failed" xml:space="preserve"><value>Registration failed</value></data>
|
|
<data name="profile.register.noperm" xml:space="preserve"><value>Insufficient permissions for automatic registration</value></data>
|
|
<data name="profile.remove.removing" xml:space="preserve"><value>Removing application...</value></data>
|
|
<data name="profile.remove.success" xml:space="preserve"><value>Application removed successfully</value></data>
|
|
<data name="profile.fallback.title" xml:space="preserve"><value>Manual Registration Required</value></data>
|
|
<data name="profile.fallback.step1" xml:space="preserve"><value>1. Go to Azure Portal > App registrations > New registration</value></data>
|
|
<data name="profile.fallback.step2" xml:space="preserve"><value>2. Name: 'SharePoint Toolbox - {0}', Supported account types: Single tenant</value></data>
|
|
<data name="profile.fallback.step3" xml:space="preserve"><value>3. Redirect URI: Public client, https://login.microsoftonline.com/common/oauth2/nativeclient</value></data>
|
|
<data name="profile.fallback.step4" xml:space="preserve"><value>4. Under API permissions, add: Microsoft Graph (User.Read, User.Read.All, Group.Read.All, Directory.Read.All) and SharePoint (AllSites.FullControl)</value></data>
|
|
<data name="profile.fallback.step5" xml:space="preserve"><value>5. Grant admin consent for all permissions</value></data>
|
|
<data name="profile.fallback.step6" xml:space="preserve"><value>6. Copy the Application (client) ID and paste it in the Client ID field above</value></data>
|
|
<!-- Phase 18: Auto-Take Ownership -->
|
|
<data name="settings.ownership.title" xml:space="preserve"><value>Site Ownership</value></data>
|
|
<data name="settings.ownership.auto" xml:space="preserve"><value>Automatically take site collection admin ownership on access denied</value></data>
|
|
<data name="settings.ownership.description" xml:space="preserve"><value>When enabled, the app will automatically elevate to site collection admin when a scan encounters an access denied error. Requires Tenant Admin permissions.</value></data>
|
|
<data name="permissions.elevated.tooltip" xml:space="preserve"><value>This site was automatically elevated — ownership was taken to complete the scan</value></data>
|
|
</root>
|