[l10n] Simplify pluralisation for issues' affected resources

Bug: 1183249, 1189877
Change-Id: Icbb77c1bc3d294ff2bb0da9f077377fd138c6499
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2882759
Commit-Queue: Wolfgang Beyer <[email protected]>
Reviewed-by: Simon Zünd <[email protected]>
diff --git a/front_end/core/i18n/locales/en-US.json b/front_end/core/i18n/locales/en-US.json
index 90fa885..621b3a0 100644
--- a/front_end/core/i18n/locales/en-US.json
+++ b/front_end/core/i18n/locales/en-US.json
@@ -2454,7 +2454,7 @@
     "message": "Yes"
   },
   "panels/application/components/StackTrace.ts | cannotRenderStackTrace": {
-    "message": "Cannot not render stack trace"
+    "message": "Cannot render stack trace"
   },
   "panels/application/components/StackTrace.ts | showSMoreFrames": {
     "message": "{n, plural, =1 {Show # more frame} other {Show # more frames}}"
@@ -4782,7 +4782,7 @@
     "message": "Blocked Resource"
   },
   "panels/issues/AffectedBlockedByResponseView.ts | nRequests": {
-    "message": "{n, plural, =1 { request} other { requests}}"
+    "message": "{n, plural, =1 {# request} other {# requests}}"
   },
   "panels/issues/AffectedBlockedByResponseView.ts | parentFrame": {
     "message": "Parent Frame"
@@ -4797,13 +4797,13 @@
     "message": "Name"
   },
   "panels/issues/AffectedCookiesView.ts | nCookies": {
-    "message": "{n, plural, =1 { cookie} other { cookies}}"
+    "message": "{n, plural, =1 {# cookie} other {# cookies}}"
   },
   "panels/issues/AffectedCookiesView.ts | path": {
     "message": "Path"
   },
   "panels/issues/AffectedElementsView.ts | nElements": {
-    "message": "{n, plural, =1 { element} other { elements}}"
+    "message": "{n, plural, =1 {# element} other {# elements}}"
   },
   "panels/issues/AffectedElementsWithLowContrastView.ts | contrastRatio": {
     "message": "Contrast ratio"
@@ -4839,7 +4839,7 @@
     "message": "Network limit"
   },
   "panels/issues/AffectedHeavyAdView.ts | nResources": {
-    "message": "{n, plural, =1 { resource} other { resources}}"
+    "message": "{n, plural, =1 {# resource} other {# resources}}"
   },
   "panels/issues/AffectedHeavyAdView.ts | removed": {
     "message": "Removed"
@@ -4872,7 +4872,7 @@
     "message": "Instantiation"
   },
   "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | nViolations": {
-    "message": "{n, plural, =1 { violation} other { violations}}"
+    "message": "{n, plural, =1 {# violation} other {# violations}}"
   },
   "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | sharedarraybufferWasTransferedTo": {
     "message": "SharedArrayBuffer was transfered to a context that is not cross-origin isolated"
@@ -4893,7 +4893,7 @@
     "message": "warning"
   },
   "panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts | nResources": {
-    "message": "{n, plural, =1 { resource} other { resources}}"
+    "message": "{n, plural, =1 {# resource} other {# resources}}"
   },
   "panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts | packageName": {
     "message": "Package name"
@@ -4938,7 +4938,7 @@
     "message": "Invalid Value (if available)"
   },
   "panels/issues/CorsIssueDetailsView.ts | nRequests": {
-    "message": "{n, plural, =1 { request} other { requests}}"
+    "message": "{n, plural, =1 {# request} other {# requests}}"
   },
   "panels/issues/CorsIssueDetailsView.ts | preflightDisallowedRedirect": {
     "message": "Response to preflight was a redirect"
@@ -5067,16 +5067,16 @@
     "message": "Name"
   },
   "panels/issues/IssueView.ts | nDirectives": {
-    "message": "{n, plural, =1 { directive} other { directives}}"
+    "message": "{n, plural, =1 {# directive} other {# directives}}"
   },
   "panels/issues/IssueView.ts | nRequests": {
-    "message": "{n, plural, =1 { request} other { requests}}"
+    "message": "{n, plural, =1 {# request} other {# requests}}"
   },
   "panels/issues/IssueView.ts | nResources": {
-    "message": "{n, plural, =1 { resource} other { resources}}"
+    "message": "{n, plural, =1 {# resource} other {# resources}}"
   },
   "panels/issues/IssueView.ts | nSources": {
-    "message": "{n, plural, =1 { source} other { sources}}"
+    "message": "{n, plural, =1 {# source} other {# sources}}"
   },
   "panels/issues/IssueView.ts | reportonly": {
     "message": "report-only"
diff --git a/front_end/core/i18n/locales/en-XL.json b/front_end/core/i18n/locales/en-XL.json
index b383ae5..02c1a8e 100644
--- a/front_end/core/i18n/locales/en-XL.json
+++ b/front_end/core/i18n/locales/en-XL.json
@@ -2454,7 +2454,7 @@
     "message": "Ŷéŝ"
   },
   "panels/application/components/StackTrace.ts | cannotRenderStackTrace": {
-    "message": "Ĉán̂ńôt́ n̂ót̂ ŕêńd̂ér̂ śt̂áĉḱ t̂ŕâćê"
+    "message": "Ĉán̂ńôt́ r̂én̂d́êŕ ŝt́âćk̂ t́r̂áĉé"
   },
   "panels/application/components/StackTrace.ts | showSMoreFrames": {
     "message": "{n, plural, =1 {Ŝh́ôẃ # m̂ór̂é f̂ŕâḿê} other {Śĥóŵ # ḿôŕê f́r̂ám̂éŝ}}"
@@ -4782,7 +4782,7 @@
     "message": "B̂ĺôćk̂éd̂ Ŕêśôúr̂ćê"
   },
   "panels/issues/AffectedBlockedByResponseView.ts | nRequests": {
-    "message": "{n, plural, =1 { r̂éq̂úêśt̂} other { ŕêq́ûéŝt́ŝ}}"
+    "message": "{n, plural, =1 {# r̂éq̂úêśt̂} other {# ŕêq́ûéŝt́ŝ}}"
   },
   "panels/issues/AffectedBlockedByResponseView.ts | parentFrame": {
     "message": "P̂ár̂én̂t́ F̂ŕâḿê"
@@ -4797,13 +4797,13 @@
     "message": "N̂ám̂é"
   },
   "panels/issues/AffectedCookiesView.ts | nCookies": {
-    "message": "{n, plural, =1 { ĉóôḱîé} other { ĉóôḱîéŝ}}"
+    "message": "{n, plural, =1 {# ĉóôḱîé} other {# ĉóôḱîéŝ}}"
   },
   "panels/issues/AffectedCookiesView.ts | path": {
     "message": "P̂át̂h́"
   },
   "panels/issues/AffectedElementsView.ts | nElements": {
-    "message": "{n, plural, =1 { êĺêḿêńt̂} other { él̂ém̂én̂t́ŝ}}"
+    "message": "{n, plural, =1 {# êĺêḿêńt̂} other {# él̂ém̂én̂t́ŝ}}"
   },
   "panels/issues/AffectedElementsWithLowContrastView.ts | contrastRatio": {
     "message": "Ĉón̂t́r̂áŝt́ r̂át̂íô"
@@ -4839,7 +4839,7 @@
     "message": "N̂ét̂ẃôŕk̂ ĺîḿît́"
   },
   "panels/issues/AffectedHeavyAdView.ts | nResources": {
-    "message": "{n, plural, =1 { r̂éŝóûŕĉé} other { r̂éŝóûŕĉéŝ}}"
+    "message": "{n, plural, =1 {# r̂éŝóûŕĉé} other {# r̂éŝóûŕĉéŝ}}"
   },
   "panels/issues/AffectedHeavyAdView.ts | removed": {
     "message": "R̂ém̂óv̂éd̂"
@@ -4872,7 +4872,7 @@
     "message": "Îńŝt́âńt̂íât́îón̂"
   },
   "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | nViolations": {
-    "message": "{n, plural, =1 { v̂íôĺât́îón̂} other { v́îól̂át̂íôńŝ}}"
+    "message": "{n, plural, =1 {# v̂íôĺât́îón̂} other {# v́îól̂át̂íôńŝ}}"
   },
   "panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts | sharedarraybufferWasTransferedTo": {
     "message": "SharedArrayBuffer ŵáŝ t́r̂án̂śf̂ér̂éd̂ t́ô á ĉón̂t́êx́t̂ t́ĥát̂ íŝ ńôt́ ĉŕôśŝ-ór̂íĝín̂ íŝól̂át̂éd̂"
@@ -4893,7 +4893,7 @@
     "message": "ŵár̂ńîńĝ"
   },
   "panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts | nResources": {
-    "message": "{n, plural, =1 { r̂éŝóûŕĉé} other { r̂éŝóûŕĉéŝ}}"
+    "message": "{n, plural, =1 {# r̂éŝóûŕĉé} other {# r̂éŝóûŕĉéŝ}}"
   },
   "panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts | packageName": {
     "message": "P̂áĉḱâǵê ńâḿê"
@@ -4938,7 +4938,7 @@
     "message": "Îńv̂ál̂íd̂ V́âĺûé (îf́ âv́âíl̂áb̂ĺê)"
   },
   "panels/issues/CorsIssueDetailsView.ts | nRequests": {
-    "message": "{n, plural, =1 { r̂éq̂úêśt̂} other { ŕêq́ûéŝt́ŝ}}"
+    "message": "{n, plural, =1 {# r̂éq̂úêśt̂} other {# ŕêq́ûéŝt́ŝ}}"
   },
   "panels/issues/CorsIssueDetailsView.ts | preflightDisallowedRedirect": {
     "message": "R̂éŝṕôńŝé t̂ó p̂ŕêf́l̂íĝh́t̂ ẃâś â ŕêd́îŕêćt̂"
@@ -5067,16 +5067,16 @@
     "message": "N̂ám̂é"
   },
   "panels/issues/IssueView.ts | nDirectives": {
-    "message": "{n, plural, =1 { d̂ír̂éĉt́îv́ê} other { d́îŕêćt̂ív̂éŝ}}"
+    "message": "{n, plural, =1 {# d̂ír̂éĉt́îv́ê} other {# d́îŕêćt̂ív̂éŝ}}"
   },
   "panels/issues/IssueView.ts | nRequests": {
-    "message": "{n, plural, =1 { r̂éq̂úêśt̂} other { ŕêq́ûéŝt́ŝ}}"
+    "message": "{n, plural, =1 {# r̂éq̂úêśt̂} other {# ŕêq́ûéŝt́ŝ}}"
   },
   "panels/issues/IssueView.ts | nResources": {
-    "message": "{n, plural, =1 { r̂éŝóûŕĉé} other { r̂éŝóûŕĉéŝ}}"
+    "message": "{n, plural, =1 {# r̂éŝóûŕĉé} other {# r̂éŝóûŕĉéŝ}}"
   },
   "panels/issues/IssueView.ts | nSources": {
-    "message": "{n, plural, =1 { ŝóûŕĉé} other { ŝóûŕĉéŝ}}"
+    "message": "{n, plural, =1 {# ŝóûŕĉé} other {# ŝóûŕĉéŝ}}"
   },
   "panels/issues/IssueView.ts | reportonly": {
     "message": "r̂ép̂ór̂t́-ôńl̂ý"
diff --git a/front_end/panels/application/components/FrameDetailsView.ts b/front_end/panels/application/components/FrameDetailsView.ts
index 7dad064..8d05c78 100644
--- a/front_end/panels/application/components/FrameDetailsView.ts
+++ b/front_end/panels/application/components/FrameDetailsView.ts
@@ -199,7 +199,8 @@
   */
   learnMore: 'Learn more',
   /**
-  *@description Entry in the document section of the frame details view
+  *@description Label for a stack trace. If a frame is created programmatically (i.e. via JavaScript), there is a
+  * stack trace for the line of code which caused the creation of the iframe. This is the stack trace we are showing here.
   */
   creationStackTrace: 'Frame Creation Stack Trace',
   /**
@@ -235,7 +236,8 @@
   */
   clickToShowHeader: 'Click to reveal the request whose "`Permissions-Policy`" HTTP header disables this feature.',
   /**
-  *@description Tooltip text for a link to a specific iframe in the Elements panel.
+  *@description Tooltip text for a link to a specific iframe in the Elements panel (Iframes can be nested, the link goes
+  *  to the outer-most iframe which blocks a certain feature).
   */
   clickToShowIframe: 'Click to reveal the top-most iframe which does not allow this feature in the elements panel.',
   /**
diff --git a/front_end/panels/application/components/StackTrace.ts b/front_end/panels/application/components/StackTrace.ts
index befb976..1ab9454 100644
--- a/front_end/panels/application/components/StackTrace.ts
+++ b/front_end/panels/application/components/StackTrace.ts
@@ -15,7 +15,7 @@
   /**
   *@description Error message stating that something went wrong when tring to render stack trace
   */
-  cannotRenderStackTrace: 'Cannot not render stack trace',
+  cannotRenderStackTrace: 'Cannot render stack trace',
   /**
   *@description A link to show more frames in the stack trace if more are available. Never 0.
   */
diff --git a/front_end/panels/issues/AffectedBlockedByResponseView.ts b/front_end/panels/issues/AffectedBlockedByResponseView.ts
index bae8e1f..7bd6b1d 100644
--- a/front_end/panels/issues/AffectedBlockedByResponseView.ts
+++ b/front_end/panels/issues/AffectedBlockedByResponseView.ts
@@ -14,7 +14,7 @@
   /**
   *@description Noun for singular or plural network requests. Label for the affected resources section in the issue view.
   */
-  nRequests: '{n, plural, =1 { request} other { requests}}',
+  nRequests: '{n, plural, =1 {# request} other {# requests}}',
   /**
   *@description Noun for a singular network request. Label for a column in the affected resources table in the issue view.
   */
@@ -55,7 +55,7 @@
     this.updateAffectedResourceCount(count);
   }
 
-  protected getResourceName(count: number): Platform.UIString.LocalizedString {
+  protected getResourceNameWithCount(count: number): Platform.UIString.LocalizedString {
     return i18nString(UIStrings.nRequests, {n: count});
   }
 
diff --git a/front_end/panels/issues/AffectedCookiesView.ts b/front_end/panels/issues/AffectedCookiesView.ts
index 755bb87..165e477 100644
--- a/front_end/panels/issues/AffectedCookiesView.ts
+++ b/front_end/panels/issues/AffectedCookiesView.ts
@@ -17,7 +17,7 @@
   /**
   *@description Noun, singular or plural. Label for the kind and number of affected resources associated with a DevTools issue. A cookie is a small piece of data that a server sends to the user's web browser. See https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies.
   */
-  nCookies: '{n, plural, =1 { cookie} other { cookies}}',
+  nCookies: '{n, plural, =1 {# cookie} other {# cookies}}',
   /**
   *@description Noun, singular. Label for a column in a table which lists cookies in the affected resources section of a DevTools issue. Each cookie has a name.
   */
@@ -41,7 +41,7 @@
     this.issue = issue;
   }
 
-  protected getResourceName(count: number): Platform.UIString.LocalizedString {
+  protected getResourceNameWithCount(count: number): Platform.UIString.LocalizedString {
     return i18nString(UIStrings.nCookies, {n: count});
   }
 
diff --git a/front_end/panels/issues/AffectedElementsView.ts b/front_end/panels/issues/AffectedElementsView.ts
index caf31e3..b0e20e9 100644
--- a/front_end/panels/issues/AffectedElementsView.ts
+++ b/front_end/panels/issues/AffectedElementsView.ts
@@ -16,7 +16,7 @@
   /**
   *@description Noun for singular or plural number of affected element resource indication in issue view.
   */
-  nElements: '{n, plural, =1 { element} other { elements}}',
+  nElements: '{n, plural, =1 {# element} other {# elements}}',
 };
 const str_ = i18n.i18n.registerUIStrings('panels/issues/AffectedElementsView.ts', UIStrings);
 const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
@@ -41,7 +41,7 @@
     this.updateAffectedResourceCount(count);
   }
 
-  protected getResourceName(count: number): Platform.UIString.LocalizedString {
+  protected getResourceNameWithCount(count: number): Platform.UIString.LocalizedString {
     return i18nString(UIStrings.nElements, {n: count});
   }
 
diff --git a/front_end/panels/issues/AffectedHeavyAdView.ts b/front_end/panels/issues/AffectedHeavyAdView.ts
index 16cf3aa..5e6d0fe 100644
--- a/front_end/panels/issues/AffectedHeavyAdView.ts
+++ b/front_end/panels/issues/AffectedHeavyAdView.ts
@@ -16,7 +16,7 @@
   /**
   *@description Label for number of affected resources indication in issue view
   */
-  nResources: '{n, plural, =1 { resource} other { resources}}',
+  nResources: '{n, plural, =1 {# resource} other {# resources}}',
   /**
   *@description Title for a column in an Heavy Ads issue view
   */
@@ -80,7 +80,7 @@
     this.updateAffectedResourceCount(count);
   }
 
-  protected getResourceName(count: number): Platform.UIString.LocalizedString {
+  protected getResourceNameWithCount(count: number): Platform.UIString.LocalizedString {
     return i18nString(UIStrings.nResources, {n: count});
   }
 
diff --git a/front_end/panels/issues/AffectedResourcesView.ts b/front_end/panels/issues/AffectedResourcesView.ts
index 8832814..17b5791 100644
--- a/front_end/panels/issues/AffectedResourcesView.ts
+++ b/front_end/panels/issues/AffectedResourcesView.ts
@@ -107,11 +107,11 @@
     return affectedResources;
   }
 
-  protected abstract getResourceName(count: number): string;
+  protected abstract getResourceNameWithCount(count: number): string;
 
   protected updateAffectedResourceCount(count: number): void {
     this.affectedResourcesCount = count;
-    this.affectedResourcesCountElement.textContent = `${count} ${this.getResourceName(count)}`;
+    this.affectedResourcesCountElement.textContent = this.getResourceNameWithCount(count);
     this.hidden = this.affectedResourcesCount === 0;
     this.parentView.updateAffectedResourceVisibility();
   }
diff --git a/front_end/panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts b/front_end/panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts
index 8b8c467..d455386 100644
--- a/front_end/panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts
+++ b/front_end/panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts
@@ -15,7 +15,7 @@
   /**
   *@description Label for number of affected resources indication in issue view
   */
-  nViolations: '{n, plural, =1 { violation} other { violations}}',
+  nViolations: '{n, plural, =1 {# violation} other {# violations}}',
   /**
   *@description Value for the status column in SharedArrayBuffer issues
   */
@@ -63,7 +63,7 @@
     this.issue = issue;
   }
 
-  protected getResourceName(count: number): Platform.UIString.LocalizedString {
+  protected getResourceNameWithCount(count: number): Platform.UIString.LocalizedString {
     return i18nString(UIStrings.nViolations, {n: count});
   }
 
diff --git a/front_end/panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts b/front_end/panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts
index 6efe5e5..0a80f40 100644
--- a/front_end/panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts
+++ b/front_end/panels/issues/AffectedTrustedWebActivityIssueDetailsView.ts
@@ -14,7 +14,7 @@
   /**
   *@description Label for number of affected resources indication in issue view
   */
-  nResources: '{n, plural, =1 { resource} other { resources}}',
+  nResources: '{n, plural, =1 {# resource} other {# resources}}',
   /**
   *@description Title for a column in a Trusted Web Activity issue view
   */
@@ -42,7 +42,7 @@
     this.issue = issue;
   }
 
-  protected getResourceName(count: number): Platform.UIString.LocalizedString {
+  protected getResourceNameWithCount(count: number): Platform.UIString.LocalizedString {
     return i18nString(UIStrings.nResources, {n: count});
   }
 
diff --git a/front_end/panels/issues/CorsIssueDetailsView.ts b/front_end/panels/issues/CorsIssueDetailsView.ts
index fa377ee..821dc67 100644
--- a/front_end/panels/issues/CorsIssueDetailsView.ts
+++ b/front_end/panels/issues/CorsIssueDetailsView.ts
@@ -15,7 +15,7 @@
   /**
   *@description Label for number of affected resources indication in issue view
   */
-  nRequests: '{n, plural, =1 { request} other { requests}}',
+  nRequests: '{n, plural, =1 {# request} other {# requests}}',
   /**
   *@description Value for the status column in SharedArrayBuffer issues
   */
@@ -133,7 +133,7 @@
     element.appendChild(status);
   }
 
-  protected getResourceName(count: number): Platform.UIString.LocalizedString {
+  protected getResourceNameWithCount(count: number): Platform.UIString.LocalizedString {
     return i18nString(UIStrings.nRequests, {n: count});
   }
 
diff --git a/front_end/panels/issues/IssueView.ts b/front_end/panels/issues/IssueView.ts
index 16bfc4f..7b2cfce 100644
--- a/front_end/panels/issues/IssueView.ts
+++ b/front_end/panels/issues/IssueView.ts
@@ -42,7 +42,7 @@
   /**
   *@description Singular or plural label for number of affected directive resource indication in issue view.
   */
-  nDirectives: '{n, plural, =1 { directive} other { directives}}',
+  nDirectives: '{n, plural, =1 {# directive} other {# directives}}',
   /**
   *@description Indicates that a CSP error should be treated as a warning
   */
@@ -78,15 +78,15 @@
   /**
   *@description Label for a type of issue that can appear in the Issues view. Noun for singular or plural number of network requests.
   */
-  nRequests: '{n, plural, =1 { request} other { requests}}',
+  nRequests: '{n, plural, =1 {# request} other {# requests}}',
   /**
   *@description Singular or Plural label for number of affected source resource indication in issue view
   */
-  nSources: '{n, plural, =1 { source} other { sources}}',
+  nSources: '{n, plural, =1 {# source} other {# sources}}',
   /**
   *@description Label for singular or plural number of affected resources indication in issue view
   */
-  nResources: '{n, plural, =1 { resource} other { resources}}',
+  nResources: '{n, plural, =1 {# resource} other {# resources}}',
   /**
   *@description Label for mixed content issue's restriction status
   */
@@ -132,7 +132,7 @@
     element.appendChild(status);
   }
 
-  protected getResourceName(count: number): Platform.UIString.LocalizedString {
+  protected getResourceNameWithCount(count: number): Platform.UIString.LocalizedString {
     return i18nString(UIStrings.nDirectives, {n: count});
   }
 
@@ -287,7 +287,7 @@
     this.updateAffectedResourceCount(count);
   }
 
-  protected getResourceName(count: number): Platform.UIString.LocalizedString {
+  protected getResourceNameWithCount(count: number): Platform.UIString.LocalizedString {
     return i18nString(UIStrings.nRequests, {n: count});
   }
 
@@ -334,7 +334,7 @@
     this.updateAffectedResourceCount(count);
   }
 
-  protected getResourceName(count: number): Platform.UIString.LocalizedString {
+  protected getResourceNameWithCount(count: number): Platform.UIString.LocalizedString {
     return i18nString(UIStrings.nSources, {n: count});
   }
 
@@ -399,7 +399,7 @@
     this.updateAffectedResourceCount(count);
   }
 
-  protected getResourceName(count: number): Platform.UIString.LocalizedString {
+  protected getResourceNameWithCount(count: number): Platform.UIString.LocalizedString {
     return i18nString(UIStrings.nResources, {n: count});
   }
 
diff --git a/test/e2e/issues/cors-issues_test.ts b/test/e2e/issues/cors-issues_test.ts
index 60e2524..dc0e7bf 100644
--- a/test/e2e/issues/cors-issues_test.ts
+++ b/test/e2e/issues/cors-issues_test.ts
@@ -23,8 +23,7 @@
     if (issueElement) {
       const section = await getResourcesElement('requests', issueElement, '.cors-issue-affected-resource-label');
       const text = await section.label.evaluate(el => el.textContent);
-      // TODO(crbug.com/1189877): Remove 2nd space after fixing l10n presubmit check
-      assert.strictEqual(text, '3  requests');
+      assert.strictEqual(text, '3 requests');
       await ensureResourceSectionIsExpanded(section);
       const table = await extractTableFromResourceSection(section.content);
       assert.isNotNull(table);
@@ -86,8 +85,7 @@
     if (issueElement) {
       const section = await getResourcesElement('request', issueElement, '.cors-issue-affected-resource-label');
       const text = await section.label.evaluate(el => el.textContent);
-      // TODO(crbug.com/1189877): Remove 2nd space after fixing l10n presubmit check
-      assert.strictEqual(text, '1  request');
+      assert.strictEqual(text, '1 request');
       await ensureResourceSectionIsExpanded(section);
       const table = await extractTableFromResourceSection(section.content);
       assert.isNotNull(table);
@@ -138,8 +136,7 @@
     if (issueElement) {
       const section = await getResourcesElement('requests', issueElement, '.cors-issue-affected-resource-label');
       const text = await section.label.evaluate(el => el.textContent);
-      // TODO(crbug.com/1189877): Remove 2nd space after fixing l10n presubmit check
-      assert.strictEqual(text, '2  requests');
+      assert.strictEqual(text, '2 requests');
       await ensureResourceSectionIsExpanded(section);
       const table = await extractTableFromResourceSection(section.content);
       assert.isNotNull(table);
@@ -195,8 +192,7 @@
     if (issueElement) {
       const section = await getResourcesElement('requests', issueElement, '.cors-issue-affected-resource-label');
       const text = await section.label.evaluate(el => el.textContent);
-      // TODO(crbug.com/1189877): Remove 2nd space after fixing l10n presubmit check
-      assert.strictEqual(text, '2  requests');
+      assert.strictEqual(text, '2 requests');
       await ensureResourceSectionIsExpanded(section);
       const table = await extractTableFromResourceSection(section.content);
       assert.isNotNull(table);
@@ -255,8 +251,7 @@
     if (issueElement) {
       const section = await getResourcesElement('requests', issueElement, '.cors-issue-affected-resource-label');
       const text = await section.label.evaluate(el => el.textContent);
-      // TODO(crbug.com/1189877): Remove 2nd space after fixing l10n presubmit check
-      assert.strictEqual(text, '2  requests');
+      assert.strictEqual(text, '2 requests');
       await ensureResourceSectionIsExpanded(section);
       const table = await extractTableFromResourceSection(section.content);
       assert.isNotNull(table);
@@ -307,8 +302,7 @@
     if (issueElement) {
       const section = await getResourcesElement('request', issueElement, '.cors-issue-affected-resource-label');
       const text = await section.label.evaluate(el => el.textContent);
-      // TODO(crbug.com/1189877): Remove 2nd space after fixing l10n presubmit check
-      assert.strictEqual(text, '1  request');
+      assert.strictEqual(text, '1 request');
       await ensureResourceSectionIsExpanded(section);
       const table = await extractTableFromResourceSection(section.content);
       assert.isNotNull(table);
@@ -352,8 +346,7 @@
     if (issueElement) {
       const section = await getResourcesElement('request', issueElement, '.cors-issue-affected-resource-label');
       const text = await section.label.evaluate(el => el.textContent);
-      // TODO(crbug.com/1189877): Remove 2nd space after fixing l10n presubmit check
-      assert.strictEqual(text, '1  request');
+      assert.strictEqual(text, '1 request');
       await ensureResourceSectionIsExpanded(section);
       const table = await extractTableFromResourceSection(section.content);
       assert.isNotNull(table);
@@ -395,8 +388,7 @@
     if (issueElement) {
       const section = await getResourcesElement('request', issueElement, '.cors-issue-affected-resource-label');
       const text = await section.label.evaluate(el => el.textContent);
-      // TODO(crbug.com/1189877): Remove 2nd space after fixing l10n presubmit check
-      assert.strictEqual(text, '1  request');
+      assert.strictEqual(text, '1 request');
       await ensureResourceSectionIsExpanded(section);
       const table = await extractTableFromResourceSection(section.content);
       assert.isNotNull(table);
diff --git a/test/e2e/issues/cors-private-network-issues_test.ts b/test/e2e/issues/cors-private-network-issues_test.ts
index 3b06bdf..e557bf7 100644
--- a/test/e2e/issues/cors-private-network-issues_test.ts
+++ b/test/e2e/issues/cors-private-network-issues_test.ts
@@ -58,8 +58,7 @@
     await expandIssue();
     const issueElement = await getIssueByTitle('Ensure private network requests are made from secure contexts');
     assertNotNull(issueElement);
-    // TODO(crbug.com/1189877): Remove 2nd space after fixing l10n presubmit check
-    const section = await getResourcesElement('2  requests', issueElement, '.cors-issue-affected-resource-label');
+    const section = await getResourcesElement('2 requests', issueElement, '.cors-issue-affected-resource-label');
     await ensureResourceSectionIsExpanded(section);
     const table = await extractTableFromResourceSection(section.content);
     assertNotNull(table);
@@ -133,8 +132,7 @@
     const issueElement =
         await getIssueByTitle('Ensure private network requests are only made to resources that allow them');
     assertNotNull(issueElement);
-    // TODO(crbug.com/1189877): Remove 2nd space after fixing l10n presubmit check
-    const section = await getResourcesElement('2  requests', issueElement, '.cors-issue-affected-resource-label');
+    const section = await getResourcesElement('2 requests', issueElement, '.cors-issue-affected-resource-label');
     await ensureResourceSectionIsExpanded(section);
     const table = await extractTableFromResourceSection(section.content);
     assertNotNull(table);
diff --git a/test/e2e/issues/heavy-ad-issues_test.ts b/test/e2e/issues/heavy-ad-issues_test.ts
index b744aea..70278a0 100644
--- a/test/e2e/issues/heavy-ad-issues_test.ts
+++ b/test/e2e/issues/heavy-ad-issues_test.ts
@@ -46,8 +46,7 @@
     const issueElement = await getIssueByTitle('An ad on your site has exceeded resource limits');
     assert.isNotNull(issueElement);
     if (issueElement) {
-      // TODO(crbug.com/1189877): Remove 2nd space after fixing l10n presubmit check
-      const section = await getResourcesElement('2  resources', issueElement);
+      const section = await getResourcesElement('2 resources', issueElement);
       await ensureResourceSectionIsExpanded(section);
       const table = await extractTableFromResourceSection(section.content);
       assert.isNotNull(table);
diff --git a/test/e2e/issues/low-text-contrast-issues_test.ts b/test/e2e/issues/low-text-contrast-issues_test.ts
index 59372ab..31ba108 100644
--- a/test/e2e/issues/low-text-contrast-issues_test.ts
+++ b/test/e2e/issues/low-text-contrast-issues_test.ts
@@ -18,8 +18,7 @@
     await assertIssueTitle(issueTitle);
     const issueElement = await getIssueByTitle(issueTitle);
     assertNotNull(issueElement);
-    // TODO(crbug.com/1189877): Remove 2nd space after fixing l10n presubmit check
-    const section = await getResourcesElement('3  elements', issueElement);
+    const section = await getResourcesElement('3 elements', issueElement);
     const table = await extractTableFromResourceSection(section.content);
     assertNotNull(table);
     assert.strictEqual(table.length, 4);
diff --git a/test/e2e/issues/sab-issues_test.ts b/test/e2e/issues/sab-issues_test.ts
index 335a972..3794215 100644
--- a/test/e2e/issues/sab-issues_test.ts
+++ b/test/e2e/issues/sab-issues_test.ts
@@ -21,8 +21,7 @@
     if (issueElement) {
       const section = await getResourcesElement('violation', issueElement);
       const text = await section.label.evaluate(el => el.textContent);
-      // TODO(crbug.com/1189877): Remove 2nd space after fixing l10n presubmit check
-      assert.strictEqual(text, '2  violations');
+      assert.strictEqual(text, '2 violations');
       await ensureResourceSectionIsExpanded(section);
       const table = await extractTableFromResourceSection(section.content);
       assert.isNotNull(table);
diff --git a/test/e2e/issues/twa-issues_test.ts b/test/e2e/issues/twa-issues_test.ts
index ef6eb40..46d84ba 100644
--- a/test/e2e/issues/twa-issues_test.ts
+++ b/test/e2e/issues/twa-issues_test.ts
@@ -34,8 +34,7 @@
     const issueElement = await getIssueByTitle(
         'Trusted Web Activity navigations must succeed or be handled by the ServiceWorker. Your app may crash in the future.');
     assertNotNull(issueElement);
-    // TODO(crbug.com/1189877): Remove 2nd space after fixing l10n presubmit check
-    const section = await getResourcesElement('1  resource', issueElement);
+    const section = await getResourcesElement('1 resource', issueElement);
     const table = await extractTableFromResourceSection(section.content);
     assertNotNull(table);
     assert.strictEqual(table.length, 2);
@@ -63,8 +62,7 @@
     const issueElement = await getIssueByTitle(
         'Trusted Web Activity does not work offline. In the future, your app may crash if the user’s device goes offline.');
     assertNotNull(issueElement);
-    // TODO(crbug.com/1189877): Remove 2nd space after fixing l10n presubmit check
-    const section = await getResourcesElement('1  resource', issueElement);
+    const section = await getResourcesElement('1 resource', issueElement);
     const table = await extractTableFromResourceSection(section.content);
     assertNotNull(table);
     assert.strictEqual(table.length, 2);
@@ -94,8 +92,7 @@
     const issueElement = await getIssueByTitle(
         'Digital asset links of the Trusted Web Activity failed verification. Your app may crash in the future.');
     assertNotNull(issueElement);
-    // TODO(crbug.com/1189877): Remove 2nd space after fixing l10n presubmit check
-    const section = await getResourcesElement('1  resource', issueElement);
+    const section = await getResourcesElement('1 resource', issueElement);
     const table = await extractTableFromResourceSection(section.content);
     assertNotNull(table);
     assert.strictEqual(table.length, 2);