Repository: GoogleChrome/lighthouse
Pull request #5781 (2018-08-04 01:35:07)

core(i18n): incorporate 52 languages into messages pipeline
picking up on #5780...

#### Overview

1. All language messages files are added now. The fallback story is indicated in locales/index.js
   * I'm deleting the message files that are duplicated because fallback. Later, we can exclude them from the BUILD/export.
1. The default locale is changed to 'en'. 
   * AFAICT this is equivalent to 'en-US'. (This seems crazy to me, since all en-* (that's not en-US) do things Dates/Times differently.) But anyway. I like having the fallback be less specific.
1. various en-* locales are called out and mapped to `en-IE`, which we're treating like a `en-GB` (eg. "Minimise" instead of "Minimize"). This makes sure these locales get localized number formatting and not american style.
1. CLI won't validate your chosen locale anymore. We have a fallback story, so we won't block someone trying with 'es-MX'.
1. I don't know how important it is that the `LH.Locale` extern is updated, but.. it is.

---------

FWIW: ~Our bundle size for `lighthouse-background` was 1.5MB before we started i18n. Once we had en-us/en-XA/ar-XB, it was 1.6MB. With all these locales, it's now 2.5MB.~ There's a couple optimizations we could make to improve that.

Oops those were sizes before our 'minification' step. `dist/scripts/lighthouse-background.js` went from 349KB to 504KB.




Patch:
diff --git a/jest.config.js b/jest.config.js
index 660866959..73b809a0b 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -6,7 +6,7 @@
 'use strict';
 
 module.exports = {
-  collectCoverage: true,
+  collectCoverage: false,
   coverageReporters: ['none'],
   collectCoverageFrom: [
     '**/lighthouse-core/**/*.js',
diff --git a/lighthouse-cli/cli-flags.js b/lighthouse-cli/cli-flags.js
index 6f11d7b74..200d4c2c6 100644
--- a/lighthouse-cli/cli-flags.js
+++ b/lighthouse-cli/cli-flags.js
@@ -64,6 +64,7 @@ function getFlags(manualArgv) {
         ],
         'Configuration:')
       .describe({
+        // We don't allowlist specific locales. Why? So we can support the user who requests 'es-MX' (unsupported) and we'll fall back to 'es' (supported)
         'locale': 'The locale/language the report should be formatted in',
         'enable-error-reporting':
             'Enables error reporting, overriding any saved preference. --no-enable-error-reporting will do the opposite. More: https://git.io/vFFTO',
@@ -119,14 +120,6 @@ function getFlags(manualArgv) {
         'disable-storage-reset', 'disable-device-emulation', 'save-assets', 'list-all-audits',
         'list-trace-categories', 'view', 'verbose', 'quiet', 'help',
       ])
-      .choices('locale', [
-        // Later, this could be Object.keys(require('../lighthouse-core/lib/locales/index.js'))
-        // But we'll curate the list for now..
-
-        'en-US', // English
-        'en-XA', // Accented English, good for testing
-        'ar-XB', // RTL English, good for testing
-      ])
       .choices('output', printer.getValidOutputOptions())
       .choices('throttling-method', ['devtools', 'provided', 'simulate'])
       .choices('preset', ['full', 'perf', 'mixed-content'])
diff --git a/lighthouse-core/lib/i18n.js b/lighthouse-core/lib/i18n.js
index ba56b6f5e..05512a2f3 100644
--- a/lighthouse-core/lib/i18n.js
+++ b/lighthouse-core/lib/i18n.js
@@ -71,7 +71,7 @@ const formats = {
  * Look up the best available locale for the requested language through these fall backs:
  * - exact match
  * - progressively shorter prefixes (`de-CH-1996` -> `de-CH` -> `de`)
- * - the default locale ('en-US') if no match is found
+ * - the default locale ('en') if no match is found
  *
  * If `locale` isn't provided, the default is used.
  * @param {string=} locale
@@ -82,7 +82,7 @@ function lookupLocale(locale) {
   const canonicalLocale = Intl.getCanonicalLocales(locale)[0];
 
   const closestLocale = lookupClosestLocale(canonicalLocale, LOCALES);
-  return closestLocale || 'en-US';
+  return closestLocale || 'en';
 }
 
 /**
diff --git a/lighthouse-core/lib/locales/de-AT.json b/lighthouse-core/lib/locales/de-AT.json
deleted file mode 100644
index a3702cf76..000000000
--- a/lighthouse-core/lib/locales/de-AT.json
+++ /dev/null
@@ -1,332 +0,0 @@
-{
-  "lighthouse-core/audits/bootup-time.js | chromeExtensionsWarning": {
-    "message": "Chrome-Erweiterungen haben sich negativ auf die Ladegeschwindigkeit dieser Seite ausgewirkt. Versuchen Sie, die Seite im Inkognito-Modus oder mit einem neuen Chrome-Profil zu überprüfen."
-  },
-  "lighthouse-core/audits/bootup-time.js | columnScriptEval": {
-    "message": "Skriptauswertung"
-  },
-  "lighthouse-core/audits/bootup-time.js | columnScriptParse": {
-    "message": "Parsen von Skripten"
-  },
-  "lighthouse-core/audits/bootup-time.js | columnTotal": {
-    "message": "Gesamt"
-  },
-  "lighthouse-core/audits/bootup-time.js | description": {
-    "message": "Versuchen Sie, die Zeit für das Parsen, Kompilieren und Ausführen von JS zu reduzieren. Die Bereitstellung kleinerer JS-Nutzlasten kann dabei helfen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/bootup)."
-  },
-  "lighthouse-core/audits/bootup-time.js | failureTitle": {
-    "message": "Ausführungszeit von JavaScript reduzieren"
-  },
-  "lighthouse-core/audits/bootup-time.js | title": {
-    "message": "JavaScript-Ausführungszeit"
-  },
-  "lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | description": {
-    "message": "Große GIF-Dateien sind nur bedingt für die Bereitstellung animierter Inhalte geeignet. Sie können statt GIF MPEG4- oder WebM-Videos für Animationen und PNG oder WebP für statische Bilder verwenden und so die Netzwerk-Datenmenge reduzieren. [Weitere Informationen](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/replace-animated-gifs-with-video/)"
-  },
-  "lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | title": {
-    "message": "Videoformate für animierte Inhalte verwenden"
-  },
-  "lighthouse-core/audits/byte-efficiency/offscreen-images.js | description": {
-    "message": "Versuchen Sie, nicht sichtbare und versteckte Bilder erst laden zu lassen, nachdem wichtige Ressourcen geladen wurden, um die Zeit bis zur Interaktivität zu reduzieren. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/offscreen-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/offscreen-images.js | title": {
-    "message": "Nicht sichtbare Bilder aufschieben"
-  },
-  "lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | description": {
-    "message": "Ressourcen blockieren das erste Zeichnen Ihrer Seite. Versuchen Sie, wichtiges JS und wichtige CSS inline bereitzustellen und alle nicht kritischen JS und Stile aufzuschieben. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/blocking-resources)."
-  },
-  "lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | title": {
-    "message": "Ressourcen beseitigen, die das Rendering blockieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | description": {
-    "message": "Große Netzwerknutzlasten kosten Nutzer bares Geld und hängen eng mit langen Ladezeiten zusammen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/network-payloads)."
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | displayValue": {
-    "message": "Die Gesamtgröße war {totalBytes, number, bytes} KB"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | failureTitle": {
-    "message": "Sehr große Netzwerknutzlasten vermeiden"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | title": {
-    "message": "Vermeidet sehr große Netzwerknutzlasten"
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-css.js | description": {
-    "message": "Durch die Komprimierung von CSS-Dateien kann die Größe von Netzwerknutzlasten reduziert werden. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/minify-css)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-css.js | title": {
-    "message": "CSS komprimieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-javascript.js | description": {
-    "message": "Durch die Komprimierung von JavaScript-Dateien können Nutzlastgrößen und die Zeit zum Parsen von Skripts reduziert werden. [Weitere Informationen](https://developers.google.com/speed/docs/insights/MinifyResources)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-javascript.js | title": {
-    "message": "JavaScript komprimieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-css-rules.js | description": {
-    "message": "Entfernen Sie nicht verwendete Regeln aus Stylesheets, um unnötige Daten bei Netzwerkaktivitäten zu reduzieren. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/unused-css)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-css-rules.js | title": {
-    "message": "Nicht verwendete CSS aufschieben"
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-javascript.js | description": {
-    "message": "Entfernen Sie nicht verwendetes JavaScript, um die Datenmenge bei Netzwerkaktivitäten zu reduzieren."
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-javascript.js | title": {
-    "message": "Nicht genutztes JavaScript entfernen"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | description": {
-    "message": "Eine lange Lebensdauer des Cache kann wiederholte Besuche Ihrer Seite beschleunigen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/cache-policy)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 Ressource gefunden}other{# Ressourcen gefunden}}"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | failureTitle": {
-    "message": "Statische Inhalte mit einer effizienten Cache-Richtlinie bereitstellen"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | title": {
-    "message": "Verwendet eine effiziente Cache-Richtlinie für statische Inhalte"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | description": {
-    "message": "Optimierte Bilder werden schneller geladen und verbrauchen weniger mobile Daten. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/optimize-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | title": {
-    "message": "Bilder effizient codieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | description": {
-    "message": "Stellen Sie Bilder bereit, die eine angemessene Größe haben, um mobile Daten zu sparen und die Ladezeit zu verbessern. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/oversized-images)"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | title": {
-    "message": "Bilder richtig dimensionieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-text-compression.js | description": {
-    "message": "Textbasierte Ressourcen sollten mit Komprimierung (gzip, Deflate oder Brotli) bereitgestellt werden, um die Datenmenge im Netzwerk insgesamt zu minimieren. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/text-compression)"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-text-compression.js | title": {
-    "message": "Textkomprimierung aktivieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-webp-images.js | description": {
-    "message": "Bildformate wie JPEG 2000, JPEG XR und WebP bieten oft eine bessere Komprimierung als PNG oder JPEG, was schnellere Downloads und einen geringeren Datenverbrauch ermöglicht. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/webp)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-webp-images.js | title": {
-    "message": "Bilder in modernen Formaten bereitstellen"
-  },
-  "lighthouse-core/audits/critical-request-chains.js | description": {
-    "message": "In den unten aufgeführten Ketten kritischer Anfragen können Sie sehen, welche Ressourcen mit einer hohen Priorität ausgegeben werden. Versuchen Sie, die Länge der Ketten zu reduzieren, die Downloadgröße von Ressourcen zu verkleinern oder das Herunterladen unnötiger Ressourcen aufzuschieben, um den Seitenaufbau zu beschleunigen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/critical-request-chains)."
-  },
-  "lighthouse-core/audits/critical-request-chains.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 Kette gefunden}other{# Ketten gefunden}}"
-  },
-  "lighthouse-core/audits/critical-request-chains.js | title": {
-    "message": "Tiefe kritischer Anforderungen minimieren"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMDepth": {
-    "message": "Maximale DOM-Tiefe"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMNodes": {
-    "message": "Gesamtzahl der DOM-Knoten"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMWidth": {
-    "message": "Maximale Anzahl untergeordneter Elemente"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | description": {
-    "message": "Laut der Empfehlung von Browserentwicklern sollten Seiten nicht mehr als ungefähr 1.500 DOM-Knoten enthalten. Die ideale Strukturtiefe liegt bei unter 32 Elementen und weniger als 60 unter- und übergeordneten Elementen. Ein großes DOM kann zu hohem Speicherverbrauch, langwierigen [Stilberechnungen](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations) und kostspieligen [dynamischen Umbrüchen im Layout](https://developers.google.com/speed/articles/reflow) führen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/dom-size)."
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 Knoten}other{# Knoten}}"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | failureTitle": {
-    "message": "Übermäßige DOM-Größe vermeiden"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | title": {
-    "message": "Vermeidet eine übermäßige DOM-Größe"
-  },
-  "lighthouse-core/audits/font-display.js | description": {
-    "message": "Sie können Gebrauch von der CSS-Funktion \"font-display\" machen, um sicherzugehen, dass der Text für Nutzer sichtbar ist, während Webfonts geladen werden. [Weitere Informationen](https://developers.google.com/web/updates/2016/02/font-display)."
-  },
-  "lighthouse-core/audits/font-display.js | failureTitle": {
-    "message": "Darauf achten, dass der Text während der Webfont-Ladevorgänge sichtbar bleibt"
-  },
-  "lighthouse-core/audits/font-display.js | title": {
-    "message": "Der gesamte Text bleibt während der Webfont-Ladevorgänge sichtbar"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | columnCategory": {
-    "message": "Kategorie"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | description": {
-    "message": "Versuchen Sie, die Zeit für das Parsen, Kompilieren und Ausführen von JS zu reduzieren. Die Bereitstellung kleinerer JS-Nutzlasten kann dabei helfen."
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | failureTitle": {
-    "message": "Aufwand für Hauptthread minimieren"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | title": {
-    "message": "Minimiert den Aufwand für den Hauptthread"
-  },
-  "lighthouse-core/audits/metrics/estimated-input-latency.js | description": {
-    "message": "Beim Ergebnis oben handelt es sich um eine Schätzung dessen, wie viele Millisekunden Ihre App benötigt, um während des 5-s-Fensters mit der stärksten Auslastung beim Seitenaufbau auf Nutzereingaben zu reagieren. Wenn die Latenz bei Ihnen über 50 ms liegt, empfinden Nutzer Ihre App möglicherweise als langsam. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/estimated-input-latency)."
-  },
-  "lighthouse-core/audits/metrics/estimated-input-latency.js | title": {
-    "message": "Geschätzte Eingabelatenz"
-  },
-  "lighthouse-core/audits/metrics/first-contentful-paint.js | description": {
-    "message": "\"Erste Inhalte gezeichnet\" gibt an, wann der erste Text oder das erste Bild gezeichnet wird. [Weitere Informationen](https://developers.google.com/web/fundamentals/performance/user-centric-performance-metrics#first_paint_and_first_contentful_paint)."
-  },
-  "lighthouse-core/audits/metrics/first-contentful-paint.js | title": {
-    "message": "Erste Inhalte gezeichnet"
-  },
-  "lighthouse-core/audits/metrics/first-cpu-idle.js | description": {
-    "message": "\"Erster CPU-Leerlauf\" gibt den Zeitpunkt an, an dem die Aktivität des Hauptthreads der Seite das erste Mal gering genug ist, um Eingaben zu verarbeiten. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/first-interactive)."
-  },
-  "lighthouse-core/audits/metrics/first-cpu-idle.js | title": {
-    "message": "Erster CPU-Leerlauf"
-  },
-  "lighthouse-core/audits/metrics/first-meaningful-paint.js | description": {
-    "message": "\"Inhalte weitgehend gezeichnet\" gibt an, wann die Hauptinhalte einer Seite sichtbar sind. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/first-meaningful-paint)."
-  },
-  "lighthouse-core/audits/metrics/first-meaningful-paint.js | title": {
-    "message": "Inhalte weitgehend gezeichnet"
-  },
-  "lighthouse-core/audits/metrics/interactive.js | description": {
-    "message": "\"Zeit bis Interaktivität\" gibt den Zeitpunkt an, an dem die Seite voll interaktionsfähig ist. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/consistently-interactive)."
-  },
-  "lighthouse-core/audits/metrics/interactive.js | title": {
-    "message": "Zeit bis Interaktivität"
-  },
-  "lighthouse-core/audits/metrics/speed-index.js | description": {
-    "message": "Der Geschwindigkeitsindex zeigt an, wie schnell die Inhalte einer Seite sichtbar dargestellt werden. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/speed-index)."
-  },
-  "lighthouse-core/audits/metrics/speed-index.js | title": {
-    "message": "Geschwindigkeitsindex"
-  },
-  "lighthouse-core/audits/redirects.js | description": {
-    "message": "Weiterleitungen führen zu zusätzlichen Verzögerungen, bevor die Seite geladen werden kann. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/redirects)."
-  },
-  "lighthouse-core/audits/redirects.js | title": {
-    "message": "Mehrere Weiterleitungen auf die Seite vermeiden"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | description": {
-    "message": "TTFB (Time To First Byte) erkennt den Zeitpunkt, an dem Ihr Server eine Antwort sendet. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/ttfb)."
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | displayValue": {
-    "message": "Stammdokument brauchte {timeInMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | failureTitle": {
-    "message": "Serverantwortzeiten reduzieren (TTFB)"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | title": {
-    "message": "Serverantwortzeiten sind niedrig (TTFB)"
-  },
-  "lighthouse-core/audits/user-timings.js | description": {
-    "message": "Versuchen Sie, die User Timing API in Ihre App zu integrieren. Damit können Sie Messungen von wichtigem Nutzerverhalten in der Praxis vornehmen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/user-timing)."
-  },
-  "lighthouse-core/audits/user-timings.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 Nutzertiming}other{# Nutzertimings}}"
-  },
-  "lighthouse-core/audits/user-timings.js | title": {
-    "message": "Markierungen und Messungen für das Nutzertiming"
-  },
-  "lighthouse-core/audits/uses-rel-preconnect.js | description": {
-    "message": "Versuchen Sie, Hinweise auf Ressourcen für eine Vorverbindung oder einen DNS-Vorabruf hinzuzufügen, damit möglichst frühzeitig eine Verbindung zu wichtigen Drittanbieterursprüngen hergestellt wird. [Weitere Informationen](https://developers.google.com/web/fundamentals/performance/resource-prioritization#preconnect)."
-  },
-  "lighthouse-core/audits/uses-rel-preconnect.js | title": {
-    "message": "Vorverbindung zu erforderlichen Ursprüngen aufbauen"
-  },
-  "lighthouse-core/audits/uses-rel-preload.js | description": {
-    "message": "Mit <link rel=preload> können Sie das Abrufen von Ressourcen priorisieren, die aktuell später beim Seitenaufbau angefordert werden. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/preload)."
-  },
-  "lighthouse-core/audits/uses-rel-preload.js | title": {
-    "message": "Wichtige Anforderungen vorab laden"
-  },
-  "lighthouse-core/config/default-config.js | diagnosticsGroupDescription": {
-    "message": "Weitere Informationen zur Leistung Ihrer App."
-  },
-  "lighthouse-core/config/default-config.js | diagnosticsGroupTitle": {
-    "message": "Diagnose"
-  },
-  "lighthouse-core/config/default-config.js | firstPaintImprovementsGroupDescription": {
-    "message": "Der wichtigste Faktor bei der Leistung ist, wie schnell Pixel auf dem Bildschirm gerendert werden. Wichtige Messwerte: \"Erste Inhalte gezeichnet\", \"Inhalte weitgehend gezeichnet\""
-  },
-  "lighthouse-core/config/default-config.js | firstPaintImprovementsGroupTitle": {
-    "message": "Verbesserungen beim Zeichnen der ersten Inhalte"
-  },
-  "lighthouse-core/config/default-config.js | loadOpportunitiesGroupDescription": {
-    "message": "Diese Optimierungen können den Seitenaufbau beschleunigen."
-  },
-  "lighthouse-core/config/default-config.js | loadOpportunitiesGroupTitle": {
-    "message": "Empfehlungen"
-  },
-  "lighthouse-core/config/default-config.js | metricGroupTitle": {
-    "message": "Messwerte"
-  },
-  "lighthouse-core/config/default-config.js | overallImprovementsGroupDescription": {
-    "message": "Hier können Sie die Ladezeiten verkürzen, damit die Seite so schnell wie möglich reagiert und Einsatzbereit ist. Wichtige Messwerte: \"Zeit bis Interaktivität\", \"Geschwindigkeitsindex\""
-  },
-  "lighthouse-core/config/default-config.js | overallImprovementsGroupTitle": {
-    "message": "Allgemeine Verbesserungen"
-  },
-  "lighthouse-core/config/default-config.js | performanceCategoryTitle": {
-    "message": "Leistung"
-  },
-  "lighthouse-core/lib/i18n.js | columnCacheTTL": {
-    "message": "Cache-TTL"
-  },
-  "lighthouse-core/lib/i18n.js | columnSize": {
-    "message": "Größe (KB)"
-  },
-  "lighthouse-core/lib/i18n.js | columnTimeSpent": {
-    "message": "Zeitaufwand"
-  },
-  "lighthouse-core/lib/i18n.js | columnURL": {
-    "message": "URL"
-  },
-  "lighthouse-core/lib/i18n.js | columnWastedBytes": {
-    "message": "Mögliche Einsparung (KB)"
-  },
-  "lighthouse-core/lib/i18n.js | columnWastedMs": {
-    "message": "Mögliche Einsparung (ms)"
-  },
-  "lighthouse-core/lib/i18n.js | displayValueByteSavings": {
-    "message": "Mögliche Einsparung von {wastedBytes, number, bytes} ms"
-  },
-  "lighthouse-core/lib/i18n.js | displayValueMsSavings": {
-    "message": "Mögliche Einsparung von {wastedMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/lib/i18n.js | ms": {
-    "message": "{timeInMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/report/html/renderer/util.js | auditGroupExpandTooltip": {
-    "message": "Überprüfungen ansehen"
-  },
-  "lighthouse-core/report/html/renderer/util.js | errorLabel": {
-    "message": "Fehler."
-  },
-  "lighthouse-core/report/html/renderer/util.js | errorMissingAuditInfo": {
-    "message": "Fehler gemeldet: keine Informationen zur Überprüfung"
-  },
-  "lighthouse-core/report/html/renderer/util.js | manualAuditsGroupTitle": {
-    "message": "Zusätzliche Elemente zur manuellen Überprüfung"
-  },
-  "lighthouse-core/report/html/renderer/util.js | notApplicableAuditsGroupTitle": {
-    "message": "Nicht zutreffend"
-  },
-  "lighthouse-core/report/html/renderer/util.js | opportunityResourceColumnLabel": {
-    "message": "Empfehlung"
-  },
-  "lighthouse-core/report/html/renderer/util.js | opportunitySavingsColumnLabel": {
-    "message": "Geschätzte Einsparung"
-  },
-  "lighthouse-core/report/html/renderer/util.js | passedAuditsGroupTitle": {
-    "message": "Bestandene Prüfungen"
-  },
-  "lighthouse-core/report/html/renderer/util.js | scorescaleLabel": {
-    "message": "Ergebnisskala:"
-  },
-  "lighthouse-core/report/html/renderer/util.js | toplevelWarningsMessage": {
-    "message": "Einige Probleme haben diese Ausführung von Lighthouse beeinträchtigt:"
-  },
-  "lighthouse-core/report/html/renderer/util.js | varianceDisclaimer": {
-    "message": "Die Werte sind geschätzt und können variieren."
-  },
-  "lighthouse-core/report/html/renderer/util.js | warningHeader": {
-    "message": "Warnungen: "
-  }
-}
\ No newline at end of file
diff --git a/lighthouse-core/lib/locales/de-CH.json b/lighthouse-core/lib/locales/de-CH.json
deleted file mode 100644
index 6c8f859e5..000000000
--- a/lighthouse-core/lib/locales/de-CH.json
+++ /dev/null
@@ -1,332 +0,0 @@
-{
-  "lighthouse-core/audits/bootup-time.js | chromeExtensionsWarning": {
-    "message": "Chrome-Erweiterungen haben sich negativ auf die Ladegeschwindigkeit dieser Seite ausgewirkt. Versuchen Sie, die Seite im Inkognito-Modus oder mit einem neuen Chrome-Profil zu überprüfen."
-  },
-  "lighthouse-core/audits/bootup-time.js | columnScriptEval": {
-    "message": "Skriptauswertung"
-  },
-  "lighthouse-core/audits/bootup-time.js | columnScriptParse": {
-    "message": "Parsen von Skripten"
-  },
-  "lighthouse-core/audits/bootup-time.js | columnTotal": {
-    "message": "Gesamt"
-  },
-  "lighthouse-core/audits/bootup-time.js | description": {
-    "message": "Versuchen Sie, die Zeit für das Parsen, Kompilieren und Ausführen von JS zu reduzieren. Die Bereitstellung kleinerer JS-Nutzlasten kann dabei helfen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/bootup)."
-  },
-  "lighthouse-core/audits/bootup-time.js | failureTitle": {
-    "message": "Ausführungszeit von JavaScript reduzieren"
-  },
-  "lighthouse-core/audits/bootup-time.js | title": {
-    "message": "JavaScript-Ausführungszeit"
-  },
-  "lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | description": {
-    "message": "Grosse GIF-Dateien sind nur bedingt für die Bereitstellung animierter Inhalte geeignet. Sie können statt GIF MPEG4- oder WebM-Videos für Animationen und PNG oder WebP für statische Bilder verwenden und so die Netzwerk-Datenmenge reduzieren. [Weitere Informationen](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/replace-animated-gifs-with-video/)"
-  },
-  "lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | title": {
-    "message": "Videoformate für animierte Inhalte verwenden"
-  },
-  "lighthouse-core/audits/byte-efficiency/offscreen-images.js | description": {
-    "message": "Versuchen Sie, nicht sichtbare und versteckte Bilder erst laden zu lassen, nachdem wichtige Ressourcen geladen wurden, um die Zeit bis zur Interaktivität zu reduzieren. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/offscreen-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/offscreen-images.js | title": {
-    "message": "Nicht sichtbare Bilder aufschieben"
-  },
-  "lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | description": {
-    "message": "Ressourcen blockieren das erste Zeichnen Ihrer Seite. Versuchen Sie, wichtiges JS und wichtige CSS inline bereitzustellen und alle nicht kritischen JS und Stile aufzuschieben. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/blocking-resources)."
-  },
-  "lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | title": {
-    "message": "Ressourcen beseitigen, die das Rendering blockieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | description": {
-    "message": "Grosse Netzwerknutzlasten kosten Nutzer bares Geld und hängen eng mit langen Ladezeiten zusammen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/network-payloads)."
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | displayValue": {
-    "message": "Die Gesamtgrösse war {totalBytes, number, bytes} KB"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | failureTitle": {
-    "message": "Sehr grosse Netzwerknutzlasten vermeiden"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | title": {
-    "message": "Vermeidet sehr grosse Netzwerknutzlasten"
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-css.js | description": {
-    "message": "Durch die Komprimierung von CSS-Dateien kann die Grösse von Netzwerknutzlasten reduziert werden. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/minify-css)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-css.js | title": {
-    "message": "CSS komprimieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-javascript.js | description": {
-    "message": "Durch die Komprimierung von JavaScript-Dateien können Nutzlastgrössen und die Zeit zum Parsen von Skripts reduziert werden. [Weitere Informationen](https://developers.google.com/speed/docs/insights/MinifyResources)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-javascript.js | title": {
-    "message": "JavaScript komprimieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-css-rules.js | description": {
-    "message": "Entfernen Sie nicht verwendete Regeln aus Stylesheets, um unnötige Daten bei Netzwerkaktivitäten zu reduzieren. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/unused-css)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-css-rules.js | title": {
-    "message": "Nicht verwendete CSS aufschieben"
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-javascript.js | description": {
-    "message": "Entfernen Sie nicht verwendetes JavaScript, um die Datenmenge bei Netzwerkaktivitäten zu reduzieren."
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-javascript.js | title": {
-    "message": "Nicht genutztes JavaScript entfernen"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | description": {
-    "message": "Eine lange Lebensdauer des Cache kann wiederholte Besuche Ihrer Seite beschleunigen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/cache-policy)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 Ressource gefunden}other{# Ressourcen gefunden}}"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | failureTitle": {
-    "message": "Statische Inhalte mit einer effizienten Cache-Richtlinie bereitstellen"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | title": {
-    "message": "Verwendet eine effiziente Cache-Richtlinie für statische Inhalte"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | description": {
-    "message": "Optimierte Bilder werden schneller geladen und verbrauchen weniger mobile Daten. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/optimize-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | title": {
-    "message": "Bilder effizient codieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | description": {
-    "message": "Stellen Sie Bilder bereit, die eine angemessene Grösse haben, um mobile Daten zu sparen und die Ladezeit zu verbessern. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/oversized-images)"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | title": {
-    "message": "Bilder richtig dimensionieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-text-compression.js | description": {
-    "message": "Textbasierte Ressourcen sollten mit Komprimierung (gzip, Deflate oder Brotli) bereitgestellt werden, um die Datenmenge im Netzwerk insgesamt zu minimieren. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/text-compression)"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-text-compression.js | title": {
-    "message": "Textkomprimierung aktivieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-webp-images.js | description": {
-    "message": "Bildformate wie JPEG 2000, JPEG XR und WebP bieten oft eine bessere Komprimierung als PNG oder JPEG, was schnellere Downloads und einen geringeren Datenverbrauch ermöglicht. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/webp)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-webp-images.js | title": {
-    "message": "Bilder in modernen Formaten bereitstellen"
-  },
-  "lighthouse-core/audits/critical-request-chains.js | description": {
-    "message": "In den unten aufgeführten Ketten kritischer Anfragen können Sie sehen, welche Ressourcen mit einer hohen Priorität ausgegeben werden. Versuchen Sie, die Länge der Ketten zu reduzieren, die Downloadgrösse von Ressourcen zu verkleinern oder das Herunterladen unnötiger Ressourcen aufzuschieben, um den Seitenaufbau zu beschleunigen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/critical-request-chains)."
-  },
-  "lighthouse-core/audits/critical-request-chains.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 Kette gefunden}other{# Ketten gefunden}}"
-  },
-  "lighthouse-core/audits/critical-request-chains.js | title": {
-    "message": "Tiefe kritischer Anforderungen minimieren"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMDepth": {
-    "message": "Maximale DOM-Tiefe"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMNodes": {
-    "message": "Gesamtzahl der DOM-Knoten"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMWidth": {
-    "message": "Maximale Anzahl untergeordneter Elemente"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | description": {
-    "message": "Laut der Empfehlung von Browserentwicklern sollten Seiten nicht mehr als ungefähr 1.500 DOM-Knoten enthalten. Die ideale Strukturtiefe liegt bei unter 32 Elementen und weniger als 60 unter- und übergeordneten Elementen. Ein grosses DOM kann zu hohem Speicherverbrauch, langwierigen [Stilberechnungen](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations) und kostspieligen [dynamischen Umbrüchen im Layout](https://developers.google.com/speed/articles/reflow) führen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/dom-size)."
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 Knoten}other{# Knoten}}"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | failureTitle": {
-    "message": "Übermässige DOM-Grösse vermeiden"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | title": {
-    "message": "Vermeidet eine übermässige DOM-Grösse"
-  },
-  "lighthouse-core/audits/font-display.js | description": {
-    "message": "Sie können Gebrauch von der CSS-Funktion \"font-display\" machen, um sicherzugehen, dass der Text für Nutzer sichtbar ist, während Webfonts geladen werden. [Weitere Informationen](https://developers.google.com/web/updates/2016/02/font-display)."
-  },
-  "lighthouse-core/audits/font-display.js | failureTitle": {
-    "message": "Darauf achten, dass der Text während der Webfont-Ladevorgänge sichtbar bleibt"
-  },
-  "lighthouse-core/audits/font-display.js | title": {
-    "message": "Der gesamte Text bleibt während der Webfont-Ladevorgänge sichtbar"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | columnCategory": {
-    "message": "Kategorie"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | description": {
-    "message": "Versuchen Sie, die Zeit für das Parsen, Kompilieren und Ausführen von JS zu reduzieren. Die Bereitstellung kleinerer JS-Nutzlasten kann dabei helfen."
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | failureTitle": {
-    "message": "Aufwand für Hauptthread minimieren"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | title": {
-    "message": "Minimiert den Aufwand für den Hauptthread"
-  },
-  "lighthouse-core/audits/metrics/estimated-input-latency.js | description": {
-    "message": "Beim Ergebnis oben handelt es sich um eine Schätzung dessen, wie viele Millisekunden Ihre App benötigt, um während des 5-s-Fensters mit der stärksten Auslastung beim Seitenaufbau auf Nutzereingaben zu reagieren. Wenn die Latenz bei Ihnen über 50 ms liegt, empfinden Nutzer Ihre App möglicherweise als langsam. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/estimated-input-latency)."
-  },
-  "lighthouse-core/audits/metrics/estimated-input-latency.js | title": {
-    "message": "Geschätzte Eingabelatenz"
-  },
-  "lighthouse-core/audits/metrics/first-contentful-paint.js | description": {
-    "message": "\"Erste Inhalte gezeichnet\" gibt an, wann der erste Text oder das erste Bild gezeichnet wird. [Weitere Informationen](https://developers.google.com/web/fundamentals/performance/user-centric-performance-metrics#first_paint_and_first_contentful_paint)."
-  },
-  "lighthouse-core/audits/metrics/first-contentful-paint.js | title": {
-    "message": "Erste Inhalte gezeichnet"
-  },
-  "lighthouse-core/audits/metrics/first-cpu-idle.js | description": {
-    "message": "\"Erster CPU-Leerlauf\" gibt den Zeitpunkt an, an dem die Aktivität des Hauptthreads der Seite das erste Mal gering genug ist, um Eingaben zu verarbeiten. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/first-interactive)."
-  },
-  "lighthouse-core/audits/metrics/first-cpu-idle.js | title": {
-    "message": "Erster CPU-Leerlauf"
-  },
-  "lighthouse-core/audits/metrics/first-meaningful-paint.js | description": {
-    "message": "\"Inhalte weitgehend gezeichnet\" gibt an, wann die Hauptinhalte einer Seite sichtbar sind. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/first-meaningful-paint)."
-  },
-  "lighthouse-core/audits/metrics/first-meaningful-paint.js | title": {
-    "message": "Inhalte weitgehend gezeichnet"
-  },
-  "lighthouse-core/audits/metrics/interactive.js | description": {
-    "message": "\"Zeit bis Interaktivität\" gibt den Zeitpunkt an, an dem die Seite voll interaktionsfähig ist. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/consistently-interactive)."
-  },
-  "lighthouse-core/audits/metrics/interactive.js | title": {
-    "message": "Zeit bis Interaktivität"
-  },
-  "lighthouse-core/audits/metrics/speed-index.js | description": {
-    "message": "Der Geschwindigkeitsindex zeigt an, wie schnell die Inhalte einer Seite sichtbar dargestellt werden. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/speed-index)."
-  },
-  "lighthouse-core/audits/metrics/speed-index.js | title": {
-    "message": "Geschwindigkeitsindex"
-  },
-  "lighthouse-core/audits/redirects.js | description": {
-    "message": "Weiterleitungen führen zu zusätzlichen Verzögerungen, bevor die Seite geladen werden kann. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/redirects)."
-  },
-  "lighthouse-core/audits/redirects.js | title": {
-    "message": "Mehrere Weiterleitungen auf die Seite vermeiden"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | description": {
-    "message": "TTFB (Time To First Byte) erkennt den Zeitpunkt, an dem Ihr Server eine Antwort sendet. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/ttfb)."
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | displayValue": {
-    "message": "Stammdokument brauchte {timeInMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | failureTitle": {
-    "message": "Serverantwortzeiten reduzieren (TTFB)"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | title": {
-    "message": "Serverantwortzeiten sind niedrig (TTFB)"
-  },
-  "lighthouse-core/audits/user-timings.js | description": {
-    "message": "Versuchen Sie, die User Timing API in Ihre App zu integrieren. Damit können Sie Messungen von wichtigem Nutzerverhalten in der Praxis vornehmen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/user-timing)."
-  },
-  "lighthouse-core/audits/user-timings.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 Nutzertiming}other{# Nutzertimings}}"
-  },
-  "lighthouse-core/audits/user-timings.js | title": {
-    "message": "Markierungen und Messungen für das Nutzertiming"
-  },
-  "lighthouse-core/audits/uses-rel-preconnect.js | description": {
-    "message": "Versuchen Sie, Hinweise auf Ressourcen für eine Vorverbindung oder einen DNS-Vorabruf hinzuzufügen, damit möglichst frühzeitig eine Verbindung zu wichtigen Drittanbieterursprüngen hergestellt wird. [Weitere Informationen](https://developers.google.com/web/fundamentals/performance/resource-prioritization#preconnect)."
-  },
-  "lighthouse-core/audits/uses-rel-preconnect.js | title": {
-    "message": "Vorverbindung zu erforderlichen Ursprüngen aufbauen"
-  },
-  "lighthouse-core/audits/uses-rel-preload.js | description": {
-    "message": "Mit <link rel=preload> können Sie das Abrufen von Ressourcen priorisieren, die aktuell später beim Seitenaufbau angefordert werden. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/preload)."
-  },
-  "lighthouse-core/audits/uses-rel-preload.js | title": {
-    "message": "Wichtige Anforderungen vorab laden"
-  },
-  "lighthouse-core/config/default-config.js | diagnosticsGroupDescription": {
-    "message": "Weitere Informationen zur Leistung Ihrer App."
-  },
-  "lighthouse-core/config/default-config.js | diagnosticsGroupTitle": {
-    "message": "Diagnose"
-  },
-  "lighthouse-core/config/default-config.js | firstPaintImprovementsGroupDescription": {
-    "message": "Der wichtigste Faktor bei der Leistung ist, wie schnell Pixel auf dem Bildschirm gerendert werden. Wichtige Messwerte: \"Erste Inhalte gezeichnet\", \"Inhalte weitgehend gezeichnet\""
-  },
-  "lighthouse-core/config/default-config.js | firstPaintImprovementsGroupTitle": {
-    "message": "Verbesserungen beim Zeichnen der ersten Inhalte"
-  },
-  "lighthouse-core/config/default-config.js | loadOpportunitiesGroupDescription": {
-    "message": "Diese Optimierungen können den Seitenaufbau beschleunigen."
-  },
-  "lighthouse-core/config/default-config.js | loadOpportunitiesGroupTitle": {
-    "message": "Empfehlungen"
-  },
-  "lighthouse-core/config/default-config.js | metricGroupTitle": {
-    "message": "Messwerte"
-  },
-  "lighthouse-core/config/default-config.js | overallImprovementsGroupDescription": {
-    "message": "Hier können Sie die Ladezeiten verkürzen, damit die Seite so schnell wie möglich reagiert und Einsatzbereit ist. Wichtige Messwerte: \"Zeit bis Interaktivität\", \"Geschwindigkeitsindex\""
-  },
-  "lighthouse-core/config/default-config.js | overallImprovementsGroupTitle": {
-    "message": "Allgemeine Verbesserungen"
-  },
-  "lighthouse-core/config/default-config.js | performanceCategoryTitle": {
-    "message": "Leistung"
-  },
-  "lighthouse-core/lib/i18n.js | columnCacheTTL": {
-    "message": "Cache-TTL"
-  },
-  "lighthouse-core/lib/i18n.js | columnSize": {
-    "message": "Grösse (KB)"
-  },
-  "lighthouse-core/lib/i18n.js | columnTimeSpent": {
-    "message": "Zeitaufwand"
-  },
-  "lighthouse-core/lib/i18n.js | columnURL": {
-    "message": "URL"
-  },
-  "lighthouse-core/lib/i18n.js | columnWastedBytes": {
-    "message": "Mögliche Einsparung (KB)"
-  },
-  "lighthouse-core/lib/i18n.js | columnWastedMs": {
-    "message": "Mögliche Einsparung (ms)"
-  },
-  "lighthouse-core/lib/i18n.js | displayValueByteSavings": {
-    "message": "Mögliche Einsparung von {wastedBytes, number, bytes} ms"
-  },
-  "lighthouse-core/lib/i18n.js | displayValueMsSavings": {
-    "message": "Mögliche Einsparung von {wastedMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/lib/i18n.js | ms": {
-    "message": "{timeInMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/report/html/renderer/util.js | auditGroupExpandTooltip": {
-    "message": "Überprüfungen ansehen"
-  },
-  "lighthouse-core/report/html/renderer/util.js | errorLabel": {
-    "message": "Fehler."
-  },
-  "lighthouse-core/report/html/renderer/util.js | errorMissingAuditInfo": {
-    "message": "Fehler gemeldet: keine Informationen zur Überprüfung"
-  },
-  "lighthouse-core/report/html/renderer/util.js | manualAuditsGroupTitle": {
-    "message": "Zusätzliche Elemente zur manuellen Überprüfung"
-  },
-  "lighthouse-core/report/html/renderer/util.js | notApplicableAuditsGroupTitle": {
-    "message": "Nicht zutreffend"
-  },
-  "lighthouse-core/report/html/renderer/util.js | opportunityResourceColumnLabel": {
-    "message": "Empfehlung"
-  },
-  "lighthouse-core/report/html/renderer/util.js | opportunitySavingsColumnLabel": {
-    "message": "Geschätzte Einsparung"
-  },
-  "lighthouse-core/report/html/renderer/util.js | passedAuditsGroupTitle": {
-    "message": "Bestandene Prüfungen"
-  },
-  "lighthouse-core/report/html/renderer/util.js | scorescaleLabel": {
-    "message": "Ergebnisskala:"
-  },
-  "lighthouse-core/report/html/renderer/util.js | toplevelWarningsMessage": {
-    "message": "Einige Probleme haben diese Ausführung von Lighthouse beeinträchtigt:"
-  },
-  "lighthouse-core/report/html/renderer/util.js | varianceDisclaimer": {
-    "message": "Die Werte sind geschätzt und können variieren."
-  },
-  "lighthouse-core/report/html/renderer/util.js | warningHeader": {
-    "message": "Warnungen: "
-  }
-}
\ No newline at end of file
diff --git a/lighthouse-core/lib/locales/en-IN.json b/lighthouse-core/lib/locales/en-IN.json
deleted file mode 100644
index ddde2a04e..000000000
--- a/lighthouse-core/lib/locales/en-IN.json
+++ /dev/null
@@ -1,332 +0,0 @@
-{
-  "lighthouse-core/audits/bootup-time.js | chromeExtensionsWarning": {
-    "message": "Chrome extensions negatively affected this page's load performance. Try auditing the page in incognito mode or from a clean Chrome profile."
-  },
-  "lighthouse-core/audits/bootup-time.js | columnScriptEval": {
-    "message": "Script Evaluation"
-  },
-  "lighthouse-core/audits/bootup-time.js | columnScriptParse": {
-    "message": "Script Parse"
-  },
-  "lighthouse-core/audits/bootup-time.js | columnTotal": {
-    "message": "Total"
-  },
-  "lighthouse-core/audits/bootup-time.js | description": {
-    "message": "Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/bootup)."
-  },
-  "lighthouse-core/audits/bootup-time.js | failureTitle": {
-    "message": "Reduce JavaScript execution time"
-  },
-  "lighthouse-core/audits/bootup-time.js | title": {
-    "message": "JavaScript execution time"
-  },
-  "lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | description": {
-    "message": "Large GIFs are inefficient for delivering animated content. Consider using MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save network bytes. [Learn more](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/replace-animated-gifs-with-video/)"
-  },
-  "lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | title": {
-    "message": "Use video formats for animated content"
-  },
-  "lighthouse-core/audits/byte-efficiency/offscreen-images.js | description": {
-    "message": "Consider lazy-loading off-screen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/offscreen-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/offscreen-images.js | title": {
-    "message": "Defer off-screen images"
-  },
-  "lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | description": {
-    "message": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/blocking-resources)."
-  },
-  "lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | title": {
-    "message": "Eliminate render-blocking resources"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | description": {
-    "message": "Large network payloads cost users real money and are highly correlated with long load times. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/network-payloads)."
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | displayValue": {
-    "message": "Total size was {totalBytes, number, bytes} KB"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | failureTitle": {
-    "message": "Avoid enormous network payloads"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | title": {
-    "message": "Avoids enormous network payloads"
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-css.js | description": {
-    "message": "Minifying CSS files can reduce network payload sizes. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/minify-css)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-css.js | title": {
-    "message": "Minify CSS"
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-javascript.js | description": {
-    "message": "Minifying JavaScript files can reduce payload sizes and script parse time. [Learn more](https://developers.google.com/speed/docs/insights/MinifyResources)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-javascript.js | title": {
-    "message": "Minify JavaScript"
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-css-rules.js | description": {
-    "message": "Remove unused rules from stylesheets to reduce unnecessary bytes consumed by network activity. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/unused-css)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-css-rules.js | title": {
-    "message": "Defer unused CSS"
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-javascript.js | description": {
-    "message": "Remove unused JavaScript to reduce bytes consumed by network activity."
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-javascript.js | title": {
-    "message": "Remove unused JavaScript"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | description": {
-    "message": "A long cache lifetime can speed up repeat visits to your page. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/cache-policy)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 resource found}other{# resources found}}"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | failureTitle": {
-    "message": "Serve static assets with an efficient cache policy"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | title": {
-    "message": "Uses efficient cache policy on static assets"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | description": {
-    "message": "Optimised images load faster and consume less mobile data. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/optimize-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | title": {
-    "message": "Efficiently encode images"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | description": {
-    "message": "Serve images that are appropriately-sized to save mobile data and improve load time. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/oversized-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | title": {
-    "message": "Properly size images"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-text-compression.js | description": {
-    "message": "Text-based resources should be served with compression (gzip, deflate or brotli) to minimise total network bytes. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/text-compression)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-text-compression.js | title": {
-    "message": "Enable text compression"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-webp-images.js | description": {
-    "message": "Image formats like JPEG 2000, JPEG XR and WebP often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/webp)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-webp-images.js | title": {
-    "message": "Serve images in next-gen formats"
-  },
-  "lighthouse-core/audits/critical-request-chains.js | description": {
-    "message": "The Critical Request Chains below show you what resources are issued with a high priority. Consider reducing the length of chains, reducing the download size of resources or deferring the download of unnecessary resources to improve page load. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/critical-request-chains)."
-  },
-  "lighthouse-core/audits/critical-request-chains.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 chain found}other{# chains found}}"
-  },
-  "lighthouse-core/audits/critical-request-chains.js | title": {
-    "message": "Minimise Critical Requests Depth"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMDepth": {
-    "message": "Maximum DOM Depth"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMNodes": {
-    "message": "Total DOM Nodes"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMWidth": {
-    "message": "Maximum Children"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | description": {
-    "message": "Browser engineers recommend pages contain fewer than ~1,500 DOM nodes. The sweet spot is a tree depth < 32 elements and fewer than 60 children/parent element. A large DOM can increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn more](https://developers.google.com/web/tools/lighthouse/audits/dom-size)."
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 node}other{# nodes}}"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | failureTitle": {
-    "message": "Avoid an excessive DOM size"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | title": {
-    "message": "Avoids an excessive DOM size"
-  },
-  "lighthouse-core/audits/font-display.js | description": {
-    "message": "Leverage the font-display CSS feature to ensure text is user-visible while webfonts are loading. [Learn more](https://developers.google.com/web/updates/2016/02/font-display)."
-  },
-  "lighthouse-core/audits/font-display.js | failureTitle": {
-    "message": "Ensure text remains visible during webfont load"
-  },
-  "lighthouse-core/audits/font-display.js | title": {
-    "message": "All text remains visible during webfont loads"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | columnCategory": {
-    "message": "Category"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | description": {
-    "message": "Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this."
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | failureTitle": {
-    "message": "Minimise main thread work"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | title": {
-    "message": "Minimises main thread work"
-  },
-  "lighthouse-core/audits/metrics/estimated-input-latency.js | description": {
-    "message": "The score above is an estimate of how long your app takes to respond to user input, in milliseconds, during the busiest 5-second window of page load. If your latency is higher than 50 ms, users may perceive your app as laggy. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/estimated-input-latency)."
-  },
-  "lighthouse-core/audits/metrics/estimated-input-latency.js | title": {
-    "message": "Estimated Input Latency"
-  },
-  "lighthouse-core/audits/metrics/first-contentful-paint.js | description": {
-    "message": "First contentful paint marks the time at which the first text or image is painted. [Learn more](https://developers.google.com/web/fundamentals/performance/user-centric-performance-metrics#first_paint_and_first_contentful_paint)."
-  },
-  "lighthouse-core/audits/metrics/first-contentful-paint.js | title": {
-    "message": "First Contentful Paint"
-  },
-  "lighthouse-core/audits/metrics/first-cpu-idle.js | description": {
-    "message": "First CPU Idle marks the first time at which the page's main thread is quiet enough to handle input. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/first-interactive)."
-  },
-  "lighthouse-core/audits/metrics/first-cpu-idle.js | title": {
-    "message": "First CPU Idle"
-  },
-  "lighthouse-core/audits/metrics/first-meaningful-paint.js | description": {
-    "message": "First Meaningful Paint measures when the primary content of a page is visible. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/first-meaningful-paint)."
-  },
-  "lighthouse-core/audits/metrics/first-meaningful-paint.js | title": {
-    "message": "First Meaningful Paint"
-  },
-  "lighthouse-core/audits/metrics/interactive.js | description": {
-    "message": "Interactive marks the time at which the page is fully interactive. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/consistently-interactive)."
-  },
-  "lighthouse-core/audits/metrics/interactive.js | title": {
-    "message": "Time to Interactive"
-  },
-  "lighthouse-core/audits/metrics/speed-index.js | description": {
-    "message": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/speed-index)."
-  },
-  "lighthouse-core/audits/metrics/speed-index.js | title": {
-    "message": "Speed Index"
-  },
-  "lighthouse-core/audits/redirects.js | description": {
-    "message": "Redirects introduce additional delays before the page can be loaded. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/redirects)."
-  },
-  "lighthouse-core/audits/redirects.js | title": {
-    "message": "Avoid multiple page redirects"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | description": {
-    "message": "Time To First Byte identifies the time at which your server sends a response. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/ttfb)."
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | displayValue": {
-    "message": "Root document took {timeInMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | failureTitle": {
-    "message": "Reduce server response times (TTFB)"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | title": {
-    "message": "Server response times are low (TTFB)"
-  },
-  "lighthouse-core/audits/user-timings.js | description": {
-    "message": "Consider instrumenting your app with the User Timing API to create custom, real-world measurements of key user experiences. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/user-timing)."
-  },
-  "lighthouse-core/audits/user-timings.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 user timing}other{# user timings}}"
-  },
-  "lighthouse-core/audits/user-timings.js | title": {
-    "message": "User Timing marks and measures"
-  },
-  "lighthouse-core/audits/uses-rel-preconnect.js | description": {
-    "message": "Consider adding pre-connect or DNS-prefetch resource hints to establish early connections to important third-party origins. [Learn more](https://developers.google.com/web/fundamentals/performance/resource-prioritization#preconnect)."
-  },
-  "lighthouse-core/audits/uses-rel-preconnect.js | title": {
-    "message": "Pre-connect to required origins"
-  },
-  "lighthouse-core/audits/uses-rel-preload.js | description": {
-    "message": "Consider using <link rel=preload> to prioritise fetching resources that are currently requested later in page load. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/preload)."
-  },
-  "lighthouse-core/audits/uses-rel-preload.js | title": {
-    "message": "Pre-load key requests"
-  },
-  "lighthouse-core/config/default-config.js | diagnosticsGroupDescription": {
-    "message": "More information about the performance of your application."
-  },
-  "lighthouse-core/config/default-config.js | diagnosticsGroupTitle": {
-    "message": "Diagnostics"
-  },
-  "lighthouse-core/config/default-config.js | firstPaintImprovementsGroupDescription": {
-    "message": "The most critical aspect of performance is how quickly pixels are rendered onscreen. Key metrics: First Contentful Paint, First Meaningful Paint"
-  },
-  "lighthouse-core/config/default-config.js | firstPaintImprovementsGroupTitle": {
-    "message": "First Paint Improvements"
-  },
-  "lighthouse-core/config/default-config.js | loadOpportunitiesGroupDescription": {
-    "message": "These optimisations can speed up your page load."
-  },
-  "lighthouse-core/config/default-config.js | loadOpportunitiesGroupTitle": {
-    "message": "Opportunities"
-  },
-  "lighthouse-core/config/default-config.js | metricGroupTitle": {
-    "message": "Metrics"
-  },
-  "lighthouse-core/config/default-config.js | overallImprovementsGroupDescription": {
-    "message": "Enhance the overall loading experience, so the page is responsive and ready to use as soon as possible. Key metrics: Time to Interactive, Speed Index"
-  },
-  "lighthouse-core/config/default-config.js | overallImprovementsGroupTitle": {
-    "message": "Overall Improvements"
-  },
-  "lighthouse-core/config/default-config.js | performanceCategoryTitle": {
-    "message": "Performance"
-  },
-  "lighthouse-core/lib/i18n.js | columnCacheTTL": {
-    "message": "Cache TTL"
-  },
-  "lighthouse-core/lib/i18n.js | columnSize": {
-    "message": "Size (KB)"
-  },
-  "lighthouse-core/lib/i18n.js | columnTimeSpent": {
-    "message": "Time Spent"
-  },
-  "lighthouse-core/lib/i18n.js | columnURL": {
-    "message": "URL"
-  },
-  "lighthouse-core/lib/i18n.js | columnWastedBytes": {
-    "message": "Potential Savings (KB)"
-  },
-  "lighthouse-core/lib/i18n.js | columnWastedMs": {
-    "message": "Potential Savings (ms)"
-  },
-  "lighthouse-core/lib/i18n.js | displayValueByteSavings": {
-    "message": "Potential savings of {wastedBytes, number, bytes} KB"
-  },
-  "lighthouse-core/lib/i18n.js | displayValueMsSavings": {
-    "message": "Potential savings of {wastedMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/lib/i18n.js | ms": {
-    "message": "{timeInMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/report/html/renderer/util.js | auditGroupExpandTooltip": {
-    "message": "Show audits"
-  },
-  "lighthouse-core/report/html/renderer/util.js | errorLabel": {
-    "message": "Error!"
-  },
-  "lighthouse-core/report/html/renderer/util.js | errorMissingAuditInfo": {
-    "message": "Report error: no audit information"
-  },
-  "lighthouse-core/report/html/renderer/util.js | manualAuditsGroupTitle": {
-    "message": "Additional items to manually check"
-  },
-  "lighthouse-core/report/html/renderer/util.js | notApplicableAuditsGroupTitle": {
-    "message": "Not applicable"
-  },
-  "lighthouse-core/report/html/renderer/util.js | opportunityResourceColumnLabel": {
-    "message": "Opportunity"
-  },
-  "lighthouse-core/report/html/renderer/util.js | opportunitySavingsColumnLabel": {
-    "message": "Estimated Savings"
-  },
-  "lighthouse-core/report/html/renderer/util.js | passedAuditsGroupTitle": {
-    "message": "Passed audits"
-  },
-  "lighthouse-core/report/html/renderer/util.js | scorescaleLabel": {
-    "message": "Score scale:"
-  },
-  "lighthouse-core/report/html/renderer/util.js | toplevelWarningsMessage": {
-    "message": "There were issues affecting this run of Lighthouse:"
-  },
-  "lighthouse-core/report/html/renderer/util.js | varianceDisclaimer": {
-    "message": "Values are estimated and may vary."
-  },
-  "lighthouse-core/report/html/renderer/util.js | warningHeader": {
-    "message": "Warnings: "
-  }
-}
\ No newline at end of file
diff --git a/lighthouse-core/lib/locales/en-SG.json b/lighthouse-core/lib/locales/en-SG.json
deleted file mode 100644
index ddde2a04e..000000000
--- a/lighthouse-core/lib/locales/en-SG.json
+++ /dev/null
@@ -1,332 +0,0 @@
-{
-  "lighthouse-core/audits/bootup-time.js | chromeExtensionsWarning": {
-    "message": "Chrome extensions negatively affected this page's load performance. Try auditing the page in incognito mode or from a clean Chrome profile."
-  },
-  "lighthouse-core/audits/bootup-time.js | columnScriptEval": {
-    "message": "Script Evaluation"
-  },
-  "lighthouse-core/audits/bootup-time.js | columnScriptParse": {
-    "message": "Script Parse"
-  },
-  "lighthouse-core/audits/bootup-time.js | columnTotal": {
-    "message": "Total"
-  },
-  "lighthouse-core/audits/bootup-time.js | description": {
-    "message": "Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/bootup)."
-  },
-  "lighthouse-core/audits/bootup-time.js | failureTitle": {
-    "message": "Reduce JavaScript execution time"
-  },
-  "lighthouse-core/audits/bootup-time.js | title": {
-    "message": "JavaScript execution time"
-  },
-  "lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | description": {
-    "message": "Large GIFs are inefficient for delivering animated content. Consider using MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save network bytes. [Learn more](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/replace-animated-gifs-with-video/)"
-  },
-  "lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | title": {
-    "message": "Use video formats for animated content"
-  },
-  "lighthouse-core/audits/byte-efficiency/offscreen-images.js | description": {
-    "message": "Consider lazy-loading off-screen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/offscreen-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/offscreen-images.js | title": {
-    "message": "Defer off-screen images"
-  },
-  "lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | description": {
-    "message": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/blocking-resources)."
-  },
-  "lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | title": {
-    "message": "Eliminate render-blocking resources"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | description": {
-    "message": "Large network payloads cost users real money and are highly correlated with long load times. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/network-payloads)."
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | displayValue": {
-    "message": "Total size was {totalBytes, number, bytes} KB"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | failureTitle": {
-    "message": "Avoid enormous network payloads"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | title": {
-    "message": "Avoids enormous network payloads"
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-css.js | description": {
-    "message": "Minifying CSS files can reduce network payload sizes. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/minify-css)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-css.js | title": {
-    "message": "Minify CSS"
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-javascript.js | description": {
-    "message": "Minifying JavaScript files can reduce payload sizes and script parse time. [Learn more](https://developers.google.com/speed/docs/insights/MinifyResources)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-javascript.js | title": {
-    "message": "Minify JavaScript"
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-css-rules.js | description": {
-    "message": "Remove unused rules from stylesheets to reduce unnecessary bytes consumed by network activity. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/unused-css)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-css-rules.js | title": {
-    "message": "Defer unused CSS"
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-javascript.js | description": {
-    "message": "Remove unused JavaScript to reduce bytes consumed by network activity."
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-javascript.js | title": {
-    "message": "Remove unused JavaScript"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | description": {
-    "message": "A long cache lifetime can speed up repeat visits to your page. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/cache-policy)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 resource found}other{# resources found}}"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | failureTitle": {
-    "message": "Serve static assets with an efficient cache policy"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | title": {
-    "message": "Uses efficient cache policy on static assets"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | description": {
-    "message": "Optimised images load faster and consume less mobile data. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/optimize-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | title": {
-    "message": "Efficiently encode images"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | description": {
-    "message": "Serve images that are appropriately-sized to save mobile data and improve load time. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/oversized-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | title": {
-    "message": "Properly size images"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-text-compression.js | description": {
-    "message": "Text-based resources should be served with compression (gzip, deflate or brotli) to minimise total network bytes. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/text-compression)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-text-compression.js | title": {
-    "message": "Enable text compression"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-webp-images.js | description": {
-    "message": "Image formats like JPEG 2000, JPEG XR and WebP often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/webp)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-webp-images.js | title": {
-    "message": "Serve images in next-gen formats"
-  },
-  "lighthouse-core/audits/critical-request-chains.js | description": {
-    "message": "The Critical Request Chains below show you what resources are issued with a high priority. Consider reducing the length of chains, reducing the download size of resources or deferring the download of unnecessary resources to improve page load. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/critical-request-chains)."
-  },
-  "lighthouse-core/audits/critical-request-chains.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 chain found}other{# chains found}}"
-  },
-  "lighthouse-core/audits/critical-request-chains.js | title": {
-    "message": "Minimise Critical Requests Depth"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMDepth": {
-    "message": "Maximum DOM Depth"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMNodes": {
-    "message": "Total DOM Nodes"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMWidth": {
-    "message": "Maximum Children"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | description": {
-    "message": "Browser engineers recommend pages contain fewer than ~1,500 DOM nodes. The sweet spot is a tree depth < 32 elements and fewer than 60 children/parent element. A large DOM can increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn more](https://developers.google.com/web/tools/lighthouse/audits/dom-size)."
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 node}other{# nodes}}"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | failureTitle": {
-    "message": "Avoid an excessive DOM size"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | title": {
-    "message": "Avoids an excessive DOM size"
-  },
-  "lighthouse-core/audits/font-display.js | description": {
-    "message": "Leverage the font-display CSS feature to ensure text is user-visible while webfonts are loading. [Learn more](https://developers.google.com/web/updates/2016/02/font-display)."
-  },
-  "lighthouse-core/audits/font-display.js | failureTitle": {
-    "message": "Ensure text remains visible during webfont load"
-  },
-  "lighthouse-core/audits/font-display.js | title": {
-    "message": "All text remains visible during webfont loads"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | columnCategory": {
-    "message": "Category"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | description": {
-    "message": "Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this."
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | failureTitle": {
-    "message": "Minimise main thread work"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | title": {
-    "message": "Minimises main thread work"
-  },
-  "lighthouse-core/audits/metrics/estimated-input-latency.js | description": {
-    "message": "The score above is an estimate of how long your app takes to respond to user input, in milliseconds, during the busiest 5-second window of page load. If your latency is higher than 50 ms, users may perceive your app as laggy. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/estimated-input-latency)."
-  },
-  "lighthouse-core/audits/metrics/estimated-input-latency.js | title": {
-    "message": "Estimated Input Latency"
-  },
-  "lighthouse-core/audits/metrics/first-contentful-paint.js | description": {
-    "message": "First contentful paint marks the time at which the first text or image is painted. [Learn more](https://developers.google.com/web/fundamentals/performance/user-centric-performance-metrics#first_paint_and_first_contentful_paint)."
-  },
-  "lighthouse-core/audits/metrics/first-contentful-paint.js | title": {
-    "message": "First Contentful Paint"
-  },
-  "lighthouse-core/audits/metrics/first-cpu-idle.js | description": {
-    "message": "First CPU Idle marks the first time at which the page's main thread is quiet enough to handle input. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/first-interactive)."
-  },
-  "lighthouse-core/audits/metrics/first-cpu-idle.js | title": {
-    "message": "First CPU Idle"
-  },
-  "lighthouse-core/audits/metrics/first-meaningful-paint.js | description": {
-    "message": "First Meaningful Paint measures when the primary content of a page is visible. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/first-meaningful-paint)."
-  },
-  "lighthouse-core/audits/metrics/first-meaningful-paint.js | title": {
-    "message": "First Meaningful Paint"
-  },
-  "lighthouse-core/audits/metrics/interactive.js | description": {
-    "message": "Interactive marks the time at which the page is fully interactive. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/consistently-interactive)."
-  },
-  "lighthouse-core/audits/metrics/interactive.js | title": {
-    "message": "Time to Interactive"
-  },
-  "lighthouse-core/audits/metrics/speed-index.js | description": {
-    "message": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/speed-index)."
-  },
-  "lighthouse-core/audits/metrics/speed-index.js | title": {
-    "message": "Speed Index"
-  },
-  "lighthouse-core/audits/redirects.js | description": {
-    "message": "Redirects introduce additional delays before the page can be loaded. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/redirects)."
-  },
-  "lighthouse-core/audits/redirects.js | title": {
-    "message": "Avoid multiple page redirects"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | description": {
-    "message": "Time To First Byte identifies the time at which your server sends a response. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/ttfb)."
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | displayValue": {
-    "message": "Root document took {timeInMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | failureTitle": {
-    "message": "Reduce server response times (TTFB)"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | title": {
-    "message": "Server response times are low (TTFB)"
-  },
-  "lighthouse-core/audits/user-timings.js | description": {
-    "message": "Consider instrumenting your app with the User Timing API to create custom, real-world measurements of key user experiences. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/user-timing)."
-  },
-  "lighthouse-core/audits/user-timings.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 user timing}other{# user timings}}"
-  },
-  "lighthouse-core/audits/user-timings.js | title": {
-    "message": "User Timing marks and measures"
-  },
-  "lighthouse-core/audits/uses-rel-preconnect.js | description": {
-    "message": "Consider adding pre-connect or DNS-prefetch resource hints to establish early connections to important third-party origins. [Learn more](https://developers.google.com/web/fundamentals/performance/resource-prioritization#preconnect)."
-  },
-  "lighthouse-core/audits/uses-rel-preconnect.js | title": {
-    "message": "Pre-connect to required origins"
-  },
-  "lighthouse-core/audits/uses-rel-preload.js | description": {
-    "message": "Consider using <link rel=preload> to prioritise fetching resources that are currently requested later in page load. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/preload)."
-  },
-  "lighthouse-core/audits/uses-rel-preload.js | title": {
-    "message": "Pre-load key requests"
-  },
-  "lighthouse-core/config/default-config.js | diagnosticsGroupDescription": {
-    "message": "More information about the performance of your application."
-  },
-  "lighthouse-core/config/default-config.js | diagnosticsGroupTitle": {
-    "message": "Diagnostics"
-  },
-  "lighthouse-core/config/default-config.js | firstPaintImprovementsGroupDescription": {
-    "message": "The most critical aspect of performance is how quickly pixels are rendered onscreen. Key metrics: First Contentful Paint, First Meaningful Paint"
-  },
-  "lighthouse-core/config/default-config.js | firstPaintImprovementsGroupTitle": {
-    "message": "First Paint Improvements"
-  },
-  "lighthouse-core/config/default-config.js | loadOpportunitiesGroupDescription": {
-    "message": "These optimisations can speed up your page load."
-  },
-  "lighthouse-core/config/default-config.js | loadOpportunitiesGroupTitle": {
-    "message": "Opportunities"
-  },
-  "lighthouse-core/config/default-config.js | metricGroupTitle": {
-    "message": "Metrics"
-  },
-  "lighthouse-core/config/default-config.js | overallImprovementsGroupDescription": {
-    "message": "Enhance the overall loading experience, so the page is responsive and ready to use as soon as possible. Key metrics: Time to Interactive, Speed Index"
-  },
-  "lighthouse-core/config/default-config.js | overallImprovementsGroupTitle": {
-    "message": "Overall Improvements"
-  },
-  "lighthouse-core/config/default-config.js | performanceCategoryTitle": {
-    "message": "Performance"
-  },
-  "lighthouse-core/lib/i18n.js | columnCacheTTL": {
-    "message": "Cache TTL"
-  },
-  "lighthouse-core/lib/i18n.js | columnSize": {
-    "message": "Size (KB)"
-  },
-  "lighthouse-core/lib/i18n.js | columnTimeSpent": {
-    "message": "Time Spent"
-  },
-  "lighthouse-core/lib/i18n.js | columnURL": {
-    "message": "URL"
-  },
-  "lighthouse-core/lib/i18n.js | columnWastedBytes": {
-    "message": "Potential Savings (KB)"
-  },
-  "lighthouse-core/lib/i18n.js | columnWastedMs": {
-    "message": "Potential Savings (ms)"
-  },
-  "lighthouse-core/lib/i18n.js | displayValueByteSavings": {
-    "message": "Potential savings of {wastedBytes, number, bytes} KB"
-  },
-  "lighthouse-core/lib/i18n.js | displayValueMsSavings": {
-    "message": "Potential savings of {wastedMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/lib/i18n.js | ms": {
-    "message": "{timeInMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/report/html/renderer/util.js | auditGroupExpandTooltip": {
-    "message": "Show audits"
-  },
-  "lighthouse-core/report/html/renderer/util.js | errorLabel": {
-    "message": "Error!"
-  },
-  "lighthouse-core/report/html/renderer/util.js | errorMissingAuditInfo": {
-    "message": "Report error: no audit information"
-  },
-  "lighthouse-core/report/html/renderer/util.js | manualAuditsGroupTitle": {
-    "message": "Additional items to manually check"
-  },
-  "lighthouse-core/report/html/renderer/util.js | notApplicableAuditsGroupTitle": {
-    "message": "Not applicable"
-  },
-  "lighthouse-core/report/html/renderer/util.js | opportunityResourceColumnLabel": {
-    "message": "Opportunity"
-  },
-  "lighthouse-core/report/html/renderer/util.js | opportunitySavingsColumnLabel": {
-    "message": "Estimated Savings"
-  },
-  "lighthouse-core/report/html/renderer/util.js | passedAuditsGroupTitle": {
-    "message": "Passed audits"
-  },
-  "lighthouse-core/report/html/renderer/util.js | scorescaleLabel": {
-    "message": "Score scale:"
-  },
-  "lighthouse-core/report/html/renderer/util.js | toplevelWarningsMessage": {
-    "message": "There were issues affecting this run of Lighthouse:"
-  },
-  "lighthouse-core/report/html/renderer/util.js | varianceDisclaimer": {
-    "message": "Values are estimated and may vary."
-  },
-  "lighthouse-core/report/html/renderer/util.js | warningHeader": {
-    "message": "Warnings: "
-  }
-}
\ No newline at end of file
diff --git a/lighthouse-core/lib/locales/en-ZA.json b/lighthouse-core/lib/locales/en-ZA.json
deleted file mode 100644
index ddde2a04e..000000000
--- a/lighthouse-core/lib/locales/en-ZA.json
+++ /dev/null
@@ -1,332 +0,0 @@
-{
-  "lighthouse-core/audits/bootup-time.js | chromeExtensionsWarning": {
-    "message": "Chrome extensions negatively affected this page's load performance. Try auditing the page in incognito mode or from a clean Chrome profile."
-  },
-  "lighthouse-core/audits/bootup-time.js | columnScriptEval": {
-    "message": "Script Evaluation"
-  },
-  "lighthouse-core/audits/bootup-time.js | columnScriptParse": {
-    "message": "Script Parse"
-  },
-  "lighthouse-core/audits/bootup-time.js | columnTotal": {
-    "message": "Total"
-  },
-  "lighthouse-core/audits/bootup-time.js | description": {
-    "message": "Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/bootup)."
-  },
-  "lighthouse-core/audits/bootup-time.js | failureTitle": {
-    "message": "Reduce JavaScript execution time"
-  },
-  "lighthouse-core/audits/bootup-time.js | title": {
-    "message": "JavaScript execution time"
-  },
-  "lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | description": {
-    "message": "Large GIFs are inefficient for delivering animated content. Consider using MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save network bytes. [Learn more](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/replace-animated-gifs-with-video/)"
-  },
-  "lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | title": {
-    "message": "Use video formats for animated content"
-  },
-  "lighthouse-core/audits/byte-efficiency/offscreen-images.js | description": {
-    "message": "Consider lazy-loading off-screen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/offscreen-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/offscreen-images.js | title": {
-    "message": "Defer off-screen images"
-  },
-  "lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | description": {
-    "message": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/blocking-resources)."
-  },
-  "lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | title": {
-    "message": "Eliminate render-blocking resources"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | description": {
-    "message": "Large network payloads cost users real money and are highly correlated with long load times. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/network-payloads)."
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | displayValue": {
-    "message": "Total size was {totalBytes, number, bytes} KB"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | failureTitle": {
-    "message": "Avoid enormous network payloads"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | title": {
-    "message": "Avoids enormous network payloads"
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-css.js | description": {
-    "message": "Minifying CSS files can reduce network payload sizes. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/minify-css)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-css.js | title": {
-    "message": "Minify CSS"
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-javascript.js | description": {
-    "message": "Minifying JavaScript files can reduce payload sizes and script parse time. [Learn more](https://developers.google.com/speed/docs/insights/MinifyResources)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-javascript.js | title": {
-    "message": "Minify JavaScript"
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-css-rules.js | description": {
-    "message": "Remove unused rules from stylesheets to reduce unnecessary bytes consumed by network activity. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/unused-css)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-css-rules.js | title": {
-    "message": "Defer unused CSS"
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-javascript.js | description": {
-    "message": "Remove unused JavaScript to reduce bytes consumed by network activity."
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-javascript.js | title": {
-    "message": "Remove unused JavaScript"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | description": {
-    "message": "A long cache lifetime can speed up repeat visits to your page. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/cache-policy)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 resource found}other{# resources found}}"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | failureTitle": {
-    "message": "Serve static assets with an efficient cache policy"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | title": {
-    "message": "Uses efficient cache policy on static assets"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | description": {
-    "message": "Optimised images load faster and consume less mobile data. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/optimize-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | title": {
-    "message": "Efficiently encode images"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | description": {
-    "message": "Serve images that are appropriately-sized to save mobile data and improve load time. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/oversized-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | title": {
-    "message": "Properly size images"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-text-compression.js | description": {
-    "message": "Text-based resources should be served with compression (gzip, deflate or brotli) to minimise total network bytes. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/text-compression)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-text-compression.js | title": {
-    "message": "Enable text compression"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-webp-images.js | description": {
-    "message": "Image formats like JPEG 2000, JPEG XR and WebP often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/webp)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-webp-images.js | title": {
-    "message": "Serve images in next-gen formats"
-  },
-  "lighthouse-core/audits/critical-request-chains.js | description": {
-    "message": "The Critical Request Chains below show you what resources are issued with a high priority. Consider reducing the length of chains, reducing the download size of resources or deferring the download of unnecessary resources to improve page load. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/critical-request-chains)."
-  },
-  "lighthouse-core/audits/critical-request-chains.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 chain found}other{# chains found}}"
-  },
-  "lighthouse-core/audits/critical-request-chains.js | title": {
-    "message": "Minimise Critical Requests Depth"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMDepth": {
-    "message": "Maximum DOM Depth"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMNodes": {
-    "message": "Total DOM Nodes"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMWidth": {
-    "message": "Maximum Children"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | description": {
-    "message": "Browser engineers recommend pages contain fewer than ~1,500 DOM nodes. The sweet spot is a tree depth < 32 elements and fewer than 60 children/parent element. A large DOM can increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn more](https://developers.google.com/web/tools/lighthouse/audits/dom-size)."
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 node}other{# nodes}}"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | failureTitle": {
-    "message": "Avoid an excessive DOM size"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | title": {
-    "message": "Avoids an excessive DOM size"
-  },
-  "lighthouse-core/audits/font-display.js | description": {
-    "message": "Leverage the font-display CSS feature to ensure text is user-visible while webfonts are loading. [Learn more](https://developers.google.com/web/updates/2016/02/font-display)."
-  },
-  "lighthouse-core/audits/font-display.js | failureTitle": {
-    "message": "Ensure text remains visible during webfont load"
-  },
-  "lighthouse-core/audits/font-display.js | title": {
-    "message": "All text remains visible during webfont loads"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | columnCategory": {
-    "message": "Category"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | description": {
-    "message": "Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this."
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | failureTitle": {
-    "message": "Minimise main thread work"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | title": {
-    "message": "Minimises main thread work"
-  },
-  "lighthouse-core/audits/metrics/estimated-input-latency.js | description": {
-    "message": "The score above is an estimate of how long your app takes to respond to user input, in milliseconds, during the busiest 5-second window of page load. If your latency is higher than 50 ms, users may perceive your app as laggy. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/estimated-input-latency)."
-  },
-  "lighthouse-core/audits/metrics/estimated-input-latency.js | title": {
-    "message": "Estimated Input Latency"
-  },
-  "lighthouse-core/audits/metrics/first-contentful-paint.js | description": {
-    "message": "First contentful paint marks the time at which the first text or image is painted. [Learn more](https://developers.google.com/web/fundamentals/performance/user-centric-performance-metrics#first_paint_and_first_contentful_paint)."
-  },
-  "lighthouse-core/audits/metrics/first-contentful-paint.js | title": {
-    "message": "First Contentful Paint"
-  },
-  "lighthouse-core/audits/metrics/first-cpu-idle.js | description": {
-    "message": "First CPU Idle marks the first time at which the page's main thread is quiet enough to handle input. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/first-interactive)."
-  },
-  "lighthouse-core/audits/metrics/first-cpu-idle.js | title": {
-    "message": "First CPU Idle"
-  },
-  "lighthouse-core/audits/metrics/first-meaningful-paint.js | description": {
-    "message": "First Meaningful Paint measures when the primary content of a page is visible. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/first-meaningful-paint)."
-  },
-  "lighthouse-core/audits/metrics/first-meaningful-paint.js | title": {
-    "message": "First Meaningful Paint"
-  },
-  "lighthouse-core/audits/metrics/interactive.js | description": {
-    "message": "Interactive marks the time at which the page is fully interactive. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/consistently-interactive)."
-  },
-  "lighthouse-core/audits/metrics/interactive.js | title": {
-    "message": "Time to Interactive"
-  },
-  "lighthouse-core/audits/metrics/speed-index.js | description": {
-    "message": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/speed-index)."
-  },
-  "lighthouse-core/audits/metrics/speed-index.js | title": {
-    "message": "Speed Index"
-  },
-  "lighthouse-core/audits/redirects.js | description": {
-    "message": "Redirects introduce additional delays before the page can be loaded. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/redirects)."
-  },
-  "lighthouse-core/audits/redirects.js | title": {
-    "message": "Avoid multiple page redirects"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | description": {
-    "message": "Time To First Byte identifies the time at which your server sends a response. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/ttfb)."
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | displayValue": {
-    "message": "Root document took {timeInMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | failureTitle": {
-    "message": "Reduce server response times (TTFB)"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | title": {
-    "message": "Server response times are low (TTFB)"
-  },
-  "lighthouse-core/audits/user-timings.js | description": {
-    "message": "Consider instrumenting your app with the User Timing API to create custom, real-world measurements of key user experiences. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/user-timing)."
-  },
-  "lighthouse-core/audits/user-timings.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 user timing}other{# user timings}}"
-  },
-  "lighthouse-core/audits/user-timings.js | title": {
-    "message": "User Timing marks and measures"
-  },
-  "lighthouse-core/audits/uses-rel-preconnect.js | description": {
-    "message": "Consider adding pre-connect or DNS-prefetch resource hints to establish early connections to important third-party origins. [Learn more](https://developers.google.com/web/fundamentals/performance/resource-prioritization#preconnect)."
-  },
-  "lighthouse-core/audits/uses-rel-preconnect.js | title": {
-    "message": "Pre-connect to required origins"
-  },
-  "lighthouse-core/audits/uses-rel-preload.js | description": {
-    "message": "Consider using <link rel=preload> to prioritise fetching resources that are currently requested later in page load. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/preload)."
-  },
-  "lighthouse-core/audits/uses-rel-preload.js | title": {
-    "message": "Pre-load key requests"
-  },
-  "lighthouse-core/config/default-config.js | diagnosticsGroupDescription": {
-    "message": "More information about the performance of your application."
-  },
-  "lighthouse-core/config/default-config.js | diagnosticsGroupTitle": {
-    "message": "Diagnostics"
-  },
-  "lighthouse-core/config/default-config.js | firstPaintImprovementsGroupDescription": {
-    "message": "The most critical aspect of performance is how quickly pixels are rendered onscreen. Key metrics: First Contentful Paint, First Meaningful Paint"
-  },
-  "lighthouse-core/config/default-config.js | firstPaintImprovementsGroupTitle": {
-    "message": "First Paint Improvements"
-  },
-  "lighthouse-core/config/default-config.js | loadOpportunitiesGroupDescription": {
-    "message": "These optimisations can speed up your page load."
-  },
-  "lighthouse-core/config/default-config.js | loadOpportunitiesGroupTitle": {
-    "message": "Opportunities"
-  },
-  "lighthouse-core/config/default-config.js | metricGroupTitle": {
-    "message": "Metrics"
-  },
-  "lighthouse-core/config/default-config.js | overallImprovementsGroupDescription": {
-    "message": "Enhance the overall loading experience, so the page is responsive and ready to use as soon as possible. Key metrics: Time to Interactive, Speed Index"
-  },
-  "lighthouse-core/config/default-config.js | overallImprovementsGroupTitle": {
-    "message": "Overall Improvements"
-  },
-  "lighthouse-core/config/default-config.js | performanceCategoryTitle": {
-    "message": "Performance"
-  },
-  "lighthouse-core/lib/i18n.js | columnCacheTTL": {
-    "message": "Cache TTL"
-  },
-  "lighthouse-core/lib/i18n.js | columnSize": {
-    "message": "Size (KB)"
-  },
-  "lighthouse-core/lib/i18n.js | columnTimeSpent": {
-    "message": "Time Spent"
-  },
-  "lighthouse-core/lib/i18n.js | columnURL": {
-    "message": "URL"
-  },
-  "lighthouse-core/lib/i18n.js | columnWastedBytes": {
-    "message": "Potential Savings (KB)"
-  },
-  "lighthouse-core/lib/i18n.js | columnWastedMs": {
-    "message": "Potential Savings (ms)"
-  },
-  "lighthouse-core/lib/i18n.js | displayValueByteSavings": {
-    "message": "Potential savings of {wastedBytes, number, bytes} KB"
-  },
-  "lighthouse-core/lib/i18n.js | displayValueMsSavings": {
-    "message": "Potential savings of {wastedMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/lib/i18n.js | ms": {
-    "message": "{timeInMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/report/html/renderer/util.js | auditGroupExpandTooltip": {
-    "message": "Show audits"
-  },
-  "lighthouse-core/report/html/renderer/util.js | errorLabel": {
-    "message": "Error!"
-  },
-  "lighthouse-core/report/html/renderer/util.js | errorMissingAuditInfo": {
-    "message": "Report error: no audit information"
-  },
-  "lighthouse-core/report/html/renderer/util.js | manualAuditsGroupTitle": {
-    "message": "Additional items to manually check"
-  },
-  "lighthouse-core/report/html/renderer/util.js | notApplicableAuditsGroupTitle": {
-    "message": "Not applicable"
-  },
-  "lighthouse-core/report/html/renderer/util.js | opportunityResourceColumnLabel": {
-    "message": "Opportunity"
-  },
-  "lighthouse-core/report/html/renderer/util.js | opportunitySavingsColumnLabel": {
-    "message": "Estimated Savings"
-  },
-  "lighthouse-core/report/html/renderer/util.js | passedAuditsGroupTitle": {
-    "message": "Passed audits"
-  },
-  "lighthouse-core/report/html/renderer/util.js | scorescaleLabel": {
-    "message": "Score scale:"
-  },
-  "lighthouse-core/report/html/renderer/util.js | toplevelWarningsMessage": {
-    "message": "There were issues affecting this run of Lighthouse:"
-  },
-  "lighthouse-core/report/html/renderer/util.js | varianceDisclaimer": {
-    "message": "Values are estimated and may vary."
-  },
-  "lighthouse-core/report/html/renderer/util.js | warningHeader": {
-    "message": "Warnings: "
-  }
-}
\ No newline at end of file
diff --git a/lighthouse-core/lib/locales/fr-CH.json b/lighthouse-core/lib/locales/fr-CH.json
deleted file mode 100644
index 26d4c5a23..000000000
--- a/lighthouse-core/lib/locales/fr-CH.json
+++ /dev/null
@@ -1,332 +0,0 @@
-{
-  "lighthouse-core/audits/bootup-time.js | chromeExtensionsWarning": {
-    "message": "Les extensions Chrome ont eu un impact négatif sur les performances de chargement de la page. Essayez de contrôler la page en mode navigation privée ou depuis un profil Chrome épuré."
-  },
-  "lighthouse-core/audits/bootup-time.js | columnScriptEval": {
-    "message": "Évaluation des scripts"
-  },
-  "lighthouse-core/audits/bootup-time.js | columnScriptParse": {
-    "message": "Analyse des scripts"
-  },
-  "lighthouse-core/audits/bootup-time.js | columnTotal": {
-    "message": "Total"
-  },
-  "lighthouse-core/audits/bootup-time.js | description": {
-    "message": "Envisagez de réduire le temps consacré à l'analyse, la compilation et l'exécution de JS. La livraison de charges utiles JS plus petites peut vous aider. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/bootup)."
-  },
-  "lighthouse-core/audits/bootup-time.js | failureTitle": {
-    "message": "Réduisez le temps d'exécution de JavaScript"
-  },
-  "lighthouse-core/audits/bootup-time.js | title": {
-    "message": "Délai d'exécution de JavaScript"
-  },
-  "lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | description": {
-    "message": "Les grandes images GIF sont inefficaces pour diffuser du contenu animé. Envisagez d'utiliser des vidéos MPEG4/WebM pour les animations et PNG/WebP pour les images statiques au lieu d'images GIF afin d'économiser des octets réseau. [En savoir plus](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/replace-animated-gifs-with-video/)"
-  },
-  "lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | title": {
-    "message": "Utilisez des formats vidéo pour le contenu animé"
-  },
-  "lighthouse-core/audits/byte-efficiency/offscreen-images.js | description": {
-    "message": "Envisagez de charger des images masquées ou hors écran après le chargement de toutes les ressources essentielles afin de réduire le délai avant interactivité. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/offscreen-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/offscreen-images.js | title": {
-    "message": "Différez le chargement des images hors écran"
-  },
-  "lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | description": {
-    "message": "Des ressources bloquent le premier passage de votre page. Envisagez de diffuser des feuilles JS/CSS essentielles en ligne et de différer la diffusion de toutes les feuilles JS/de style non essentielles. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/blocking-resources)."
-  },
-  "lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | title": {
-    "message": "Éliminez les ressources qui bloquent le rendu"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | description": {
-    "message": "Les charges utiles des grands réseaux coûtent de l'argent réel aux utilisateurs et sont fortement corrélées aux délais de chargement interminables. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/network-payloads)."
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | displayValue": {
-    "message": "La taille totale était de {totalBytes, number, bytes} Ko"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | failureTitle": {
-    "message": "Évitez d'énormes charges utiles de réseau"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | title": {
-    "message": "Éviter d'énormes charges utiles de réseau"
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-css.js | description": {
-    "message": "La réduction des fichiers CSS peut réduire la taille des charges utiles de réseau. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/minify-css)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-css.js | title": {
-    "message": "Réduisez la taille des ressources CSS"
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-javascript.js | description": {
-    "message": "La minimisation des fichiers JavaScript files peut réduire la taille des charges utiles et la durée d'analyse des scripts. [En savoir plus](https://developers.google.com/speed/docs/insights/MinifyResources)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-javascript.js | title": {
-    "message": "Réduisez la taille des ressources JavaScript"
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-css-rules.js | description": {
-    "message": "Supprimez les règles inutilisées des feuilles de style afin de réduire la quantité d'octets utilisés inutilement par l'activité réseau. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/unused-css)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-css-rules.js | title": {
-    "message": "Différez le chargement des ressources CSS inutilisées"
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-javascript.js | description": {
-    "message": "Supprimez les ressources JavaScript inutilisées pour réduire la quantité d'octets consommés par l'activité réseau."
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-javascript.js | title": {
-    "message": "Supprimez les ressources JavaScript inutilisées"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | description": {
-    "message": "Une longue durée de vie du cache peut accélérer les visites répétées sur votre page. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/cache-policy)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 ressource trouvée}one{# ressource trouvée}other{# ressources trouvées}}"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | failureTitle": {
-    "message": "Diffuser des éléments statiques grâce à des règles de cache efficaces"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | title": {
-    "message": "Utiliser des règles de cache efficaces sur les éléments statiques"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | description": {
-    "message": "Les images optimisées se chargent plus rapidement et consomment moins de données mobiles. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/optimize-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | title": {
-    "message": "Encodez les images de manière efficace"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | description": {
-    "message": "Diffusez des images de taille appropriée afin d'économiser des données mobiles et réduire le temps de chargement. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/oversized-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | title": {
-    "message": "Dimensionnez correctement les images"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-text-compression.js | description": {
-    "message": "Les ressources textuelles doivent être diffusées compressées (Gzip, Deflate ou Brotli) pour réduire le nombre total d'octets du réseau. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/text-compression)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-text-compression.js | title": {
-    "message": "Activez la compression de texte"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-webp-images.js | description": {
-    "message": "Les formats d'image comme JPEG 2000, JPEG XR et WebP proposent souvent une meilleure compression que les formats PNG ou JPEG. Par conséquent, les téléchargements sont plus rapides et la consommation de données est réduite. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/webp)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-webp-images.js | title": {
-    "message": "Diffusez des images aux formats nouvelle génération"
-  },
-  "lighthouse-core/audits/critical-request-chains.js | description": {
-    "message": "Les Chaînes de demandes critiques ci-dessous vous montrent quelles ressources sont émises avec une priorité élevée. Envisagez de réduire la longueur des chaînes et la taille de téléchargement des ressources ou de reporter le téléchargement de ressources inutiles afin d'améliorer le chargement des pages. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/critical-request-chains)."
-  },
-  "lighthouse-core/audits/critical-request-chains.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 chaîne trouvée}one{# chaîne trouvée}other{# chaînes trouvées}}"
-  },
-  "lighthouse-core/audits/critical-request-chains.js | title": {
-    "message": "Réduisez la profondeur des demandes critiques"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMDepth": {
-    "message": "Profondeur maximum de DOM"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMNodes": {
-    "message": "Total des nœuds de DOM"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMWidth": {
-    "message": "Nombre maximal d'enfants"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | description": {
-    "message": "Les ingénieurs en navigation recommandent que les pages contiennent moins de 1 500 nœuds de DOM environ. La zone d'écoute idéale est une profondeur d'arborescence inférieure à 32 éléments et contenant moins de 60 éléments enfant/parent. Un grand DOM peut accroître l'utilisation de la mémoire, entraîner de plus longs [calculs de style](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations) et des [redispositions] coûteuses (https://developers.google.com/speed/articles/reflow). [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/dom-size)."
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 nœud}one{# nœud}other{# nœuds}}"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | failureTitle": {
-    "message": "Évitez une taille excessive de DOM"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | title": {
-    "message": "Éviter une taille excessive de DOM"
-  },
-  "lighthouse-core/audits/font-display.js | description": {
-    "message": "Utilisez la fonction d'affichage de la police CSS afin que le texte soit visible par l'utilisateur pendant le chargement des polices Web. [En savoir plus](https://developers.google.com/web/updates/2016/02/font-display)."
-  },
-  "lighthouse-core/audits/font-display.js | failureTitle": {
-    "message": "Garantir que le texte reste visible pendant le chargement des polices Web"
-  },
-  "lighthouse-core/audits/font-display.js | title": {
-    "message": "La totalité du texte reste visible pendant le chargement des polices Web"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | columnCategory": {
-    "message": "Catégorie"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | description": {
-    "message": "Envisagez de réduire le temps consacré à l'analyse, la compilation et l'exécution de JavaScript. La livraison de charges utiles JavaScript plus petites peut vous aider."
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | failureTitle": {
-    "message": "Réduire le travail du thread principal"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | title": {
-    "message": "Réduire le travail du thread principal"
-  },
-  "lighthouse-core/audits/metrics/estimated-input-latency.js | description": {
-    "message": "Le score ci-dessus est une estimation du temps en millisecondes que prend votre application pour réagir à l'intervention de l'utilisateur, pendant la fenêtre de pointe de 5 s de chargement de page. Si le temps de latence est supérieur à 50 ms, les utilisateurs peuvent percevoir votre application comme étant lente. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/estimated-input-latency)."
-  },
-  "lighthouse-core/audits/metrics/estimated-input-latency.js | title": {
-    "message": "Estimation du temps de latence avant intervention"
-  },
-  "lighthouse-core/audits/metrics/first-contentful-paint.js | description": {
-    "message": "La statistique \"Premier passage de contenu entier\" indique le moment où le premier texte ou la première image sont affichés. [En savoir plus](https://developers.google.com/web/fundamentals/performance/user-centric-performance-metrics#first_paint_and_first_contentful_paint)."
-  },
-  "lighthouse-core/audits/metrics/first-contentful-paint.js | title": {
-    "message": "Premier passage de contenu entier"
-  },
-  "lighthouse-core/audits/metrics/first-cpu-idle.js | description": {
-    "message": "La statistique \"Premier processeur inactif\" marque la première fois que le thread principal de la page est suffisamment silencieux pour gérer l'entrée. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/first-interactive)."
-  },
-  "lighthouse-core/audits/metrics/first-cpu-idle.js | title": {
-    "message": "Premier processeur inactif"
-  },
-  "lighthouse-core/audits/metrics/first-meaningful-paint.js | description": {
-    "message": "La statistique \"Premier passage significatif\" mesure quand le contenu principal d'une page est visible. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/first-meaningful-paint)."
-  },
-  "lighthouse-core/audits/metrics/first-meaningful-paint.js | title": {
-    "message": "Premier passage significatif"
-  },
-  "lighthouse-core/audits/metrics/interactive.js | description": {
-    "message": "La statistique \"Temps avant interactivité\" indique quand la page est entièrement interactive. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/consistently-interactive)."
-  },
-  "lighthouse-core/audits/metrics/interactive.js | title": {
-    "message": "Délai avant interactivité"
-  },
-  "lighthouse-core/audits/metrics/speed-index.js | description": {
-    "message": "L'indice de vitesse indique la rapidité avec laquelle le contenu d'une page est disponible. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/speed-index)."
-  },
-  "lighthouse-core/audits/metrics/speed-index.js | title": {
-    "message": "Indice de vitesse"
-  },
-  "lighthouse-core/audits/redirects.js | description": {
-    "message": "Les redirections entraînent des retards supplémentaires avant que la page ne puisse être chargée. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/redirects)."
-  },
-  "lighthouse-core/audits/redirects.js | title": {
-    "message": "Évitez les redirections de page multiples"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | description": {
-    "message": "La valeur \"Délai avant premier octet\" (Time To First Byte) identifie l'heure à laquelle votre serveur envoie une réponse. [En savoir plus](https://developers.google.com/web/tools/lighthouse/audits/ttfb)."
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | displayValue": {
-    "message": "Le document racine a pris {timeInMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | failureTitle": {
-    "message": "Réduire les délais de réponse du serveur (TTFB)"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | title": {
-    "message": "Les délais de réponse du serveur sont faibles (TTFB)"
-  },
-  "lighthouse-core/audits/user-timings.js | description": {
-    "message": "Envisagez de doter votre application de l'API temps utilisateur pour créer des mesures réelles et personnalisées des expériences utilisateur clés. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/user-timing)."
-  },
-  "lighthouse-core/audits/user-timings.js | displayValue": {
-    "message": "{itemCount,plural, =1{[=1]1 temps utilisateur}one{# temps utilisateur}other{# temps utilisateur}}"
-  },
-  "lighthouse-core/audits/user-timings.js | title": {
-    "message": "Marques et mesures du temps utilisateur"
-  },
-  "lighthouse-core/audits/uses-rel-preconnect.js | description": {
-    "message": "Envisagez d'ajouter des indices de ressources de préconnexion ou dns-prefetch pour établir les premières connexions avec des origines tierces importantes. [En savoir plus](https://developers.google.com/web/fundamentals/performance/resource-prioritization#preconnect)."
-  },
-  "lighthouse-core/audits/uses-rel-preconnect.js | title": {
-    "message": "Connectez-vous à l'avance aux origines souhaitées"
-  },
-  "lighthouse-core/audits/uses-rel-preload.js | description": {
-    "message": "Envisagez d'utiliser <link rel=preload> pour hiérarchiser la récupération des ressources actuellement requises pour le chargement ultérieur de la page. [En savoir plus](https://developers.google.com/web/ntools/lighthouse/audits/preload)."
-  },
-  "lighthouse-core/audits/uses-rel-preload.js | title": {
-    "message": "Préchargez les demandes de clé"
-  },
-  "lighthouse-core/config/default-config.js | diagnosticsGroupDescription": {
-    "message": "Plus d'informations sur les performances de votre application."
-  },
-  "lighthouse-core/config/default-config.js | diagnosticsGroupTitle": {
-    "message": "Diagnostics"
-  },
-  "lighthouse-core/config/default-config.js | firstPaintImprovementsGroupDescription": {
-    "message": "L'aspect le plus essentiel des performances est la rapidité avec laquelle les pixels sont affichés à l'écran. Statistiques clés : Premier passage de contenu entier, Premier passage significatif"
-  },
-  "lighthouse-core/config/default-config.js | firstPaintImprovementsGroupTitle": {
-    "message": "Amélioration du premier passage"
-  },
-  "lighthouse-core/config/default-config.js | loadOpportunitiesGroupDescription": {
-    "message": "Ces optimisations peuvent accélérer le chargement de votre page."
-  },
-  "lighthouse-core/config/default-config.js | loadOpportunitiesGroupTitle": {
-    "message": "Opportunités"
-  },
-  "lighthouse-core/config/default-config.js | metricGroupTitle": {
-    "message": "Statistiques"
-  },
-  "lighthouse-core/config/default-config.js | overallImprovementsGroupDescription": {
-    "message": "Améliorez l'expérience globale de chargement, afin que la page soit réactive et disponible dès que possible. Statistiques clés : délai avant interactivité, indice de vitesse"
-  },
-  "lighthouse-core/config/default-config.js | overallImprovementsGroupTitle": {
-    "message": "Améliorations générales"
-  },
-  "lighthouse-core/config/default-config.js | performanceCategoryTitle": {
-    "message": "Performances"
-  },
-  "lighthouse-core/lib/i18n.js | columnCacheTTL": {
-    "message": "Cache de la valeur TTL"
-  },
-  "lighthouse-core/lib/i18n.js | columnSize": {
-    "message": "Taille (Ko)"
-  },
-  "lighthouse-core/lib/i18n.js | columnTimeSpent": {
-    "message": "Temps passé"
-  },
-  "lighthouse-core/lib/i18n.js | columnURL": {
-    "message": "URL"
-  },
-  "lighthouse-core/lib/i18n.js | columnWastedBytes": {
-    "message": "Économies potentielles (Ko)"
-  },
-  "lighthouse-core/lib/i18n.js | columnWastedMs": {
-    "message": "Économies potentielles (ms)"
-  },
-  "lighthouse-core/lib/i18n.js | displayValueByteSavings": {
-    "message": "Économies potentielles de {wastedBytes, number, bytes} Ko"
-  },
-  "lighthouse-core/lib/i18n.js | displayValueMsSavings": {
-    "message": "Économies potentielles de {wastedMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/lib/i18n.js | ms": {
-    "message": "{timeInMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/report/html/renderer/util.js | auditGroupExpandTooltip": {
-    "message": "Afficher les audits"
-  },
-  "lighthouse-core/report/html/renderer/util.js | errorLabel": {
-    "message": "Erreur"
-  },
-  "lighthouse-core/report/html/renderer/util.js | errorMissingAuditInfo": {
-    "message": "Erreur de rapport : pas d'information d'audit"
-  },
-  "lighthouse-core/report/html/renderer/util.js | manualAuditsGroupTitle": {
-    "message": "Autres éléments à vérifier manuellement"
-  },
-  "lighthouse-core/report/html/renderer/util.js | notApplicableAuditsGroupTitle": {
-    "message": "Non applicable"
-  },
-  "lighthouse-core/report/html/renderer/util.js | opportunityResourceColumnLabel": {
-    "message": "Opportunité"
-  },
-  "lighthouse-core/report/html/renderer/util.js | opportunitySavingsColumnLabel": {
-    "message": "Estimation des économies"
-  },
-  "lighthouse-core/report/html/renderer/util.js | passedAuditsGroupTitle": {
-    "message": "Audits réussis"
-  },
-  "lighthouse-core/report/html/renderer/util.js | scorescaleLabel": {
-    "message": "Échelle de score :"
-  },
-  "lighthouse-core/report/html/renderer/util.js | toplevelWarningsMessage": {
-    "message": "Cette exécution de Lighthouse a rencontré des problèmes :"
-  },
-  "lighthouse-core/report/html/renderer/util.js | varianceDisclaimer": {
-    "message": "Les valeurs sont estimées et peuvent varier."
-  },
-  "lighthouse-core/report/html/renderer/util.js | warningHeader": {
-    "message": "Avertissements : "
-  }
-}
\ No newline at end of file
diff --git a/lighthouse-core/lib/locales/gsw.json b/lighthouse-core/lib/locales/gsw.json
deleted file mode 100644
index a3702cf76..000000000
--- a/lighthouse-core/lib/locales/gsw.json
+++ /dev/null
@@ -1,332 +0,0 @@
-{
-  "lighthouse-core/audits/bootup-time.js | chromeExtensionsWarning": {
-    "message": "Chrome-Erweiterungen haben sich negativ auf die Ladegeschwindigkeit dieser Seite ausgewirkt. Versuchen Sie, die Seite im Inkognito-Modus oder mit einem neuen Chrome-Profil zu überprüfen."
-  },
-  "lighthouse-core/audits/bootup-time.js | columnScriptEval": {
-    "message": "Skriptauswertung"
-  },
-  "lighthouse-core/audits/bootup-time.js | columnScriptParse": {
-    "message": "Parsen von Skripten"
-  },
-  "lighthouse-core/audits/bootup-time.js | columnTotal": {
-    "message": "Gesamt"
-  },
-  "lighthouse-core/audits/bootup-time.js | description": {
-    "message": "Versuchen Sie, die Zeit für das Parsen, Kompilieren und Ausführen von JS zu reduzieren. Die Bereitstellung kleinerer JS-Nutzlasten kann dabei helfen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/bootup)."
-  },
-  "lighthouse-core/audits/bootup-time.js | failureTitle": {
-    "message": "Ausführungszeit von JavaScript reduzieren"
-  },
-  "lighthouse-core/audits/bootup-time.js | title": {
-    "message": "JavaScript-Ausführungszeit"
-  },
-  "lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | description": {
-    "message": "Große GIF-Dateien sind nur bedingt für die Bereitstellung animierter Inhalte geeignet. Sie können statt GIF MPEG4- oder WebM-Videos für Animationen und PNG oder WebP für statische Bilder verwenden und so die Netzwerk-Datenmenge reduzieren. [Weitere Informationen](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/replace-animated-gifs-with-video/)"
-  },
-  "lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | title": {
-    "message": "Videoformate für animierte Inhalte verwenden"
-  },
-  "lighthouse-core/audits/byte-efficiency/offscreen-images.js | description": {
-    "message": "Versuchen Sie, nicht sichtbare und versteckte Bilder erst laden zu lassen, nachdem wichtige Ressourcen geladen wurden, um die Zeit bis zur Interaktivität zu reduzieren. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/offscreen-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/offscreen-images.js | title": {
-    "message": "Nicht sichtbare Bilder aufschieben"
-  },
-  "lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | description": {
-    "message": "Ressourcen blockieren das erste Zeichnen Ihrer Seite. Versuchen Sie, wichtiges JS und wichtige CSS inline bereitzustellen und alle nicht kritischen JS und Stile aufzuschieben. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/blocking-resources)."
-  },
-  "lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | title": {
-    "message": "Ressourcen beseitigen, die das Rendering blockieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | description": {
-    "message": "Große Netzwerknutzlasten kosten Nutzer bares Geld und hängen eng mit langen Ladezeiten zusammen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/network-payloads)."
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | displayValue": {
-    "message": "Die Gesamtgröße war {totalBytes, number, bytes} KB"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | failureTitle": {
-    "message": "Sehr große Netzwerknutzlasten vermeiden"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | title": {
-    "message": "Vermeidet sehr große Netzwerknutzlasten"
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-css.js | description": {
-    "message": "Durch die Komprimierung von CSS-Dateien kann die Größe von Netzwerknutzlasten reduziert werden. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/minify-css)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-css.js | title": {
-    "message": "CSS komprimieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-javascript.js | description": {
-    "message": "Durch die Komprimierung von JavaScript-Dateien können Nutzlastgrößen und die Zeit zum Parsen von Skripts reduziert werden. [Weitere Informationen](https://developers.google.com/speed/docs/insights/MinifyResources)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-javascript.js | title": {
-    "message": "JavaScript komprimieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-css-rules.js | description": {
-    "message": "Entfernen Sie nicht verwendete Regeln aus Stylesheets, um unnötige Daten bei Netzwerkaktivitäten zu reduzieren. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/unused-css)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-css-rules.js | title": {
-    "message": "Nicht verwendete CSS aufschieben"
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-javascript.js | description": {
-    "message": "Entfernen Sie nicht verwendetes JavaScript, um die Datenmenge bei Netzwerkaktivitäten zu reduzieren."
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-javascript.js | title": {
-    "message": "Nicht genutztes JavaScript entfernen"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | description": {
-    "message": "Eine lange Lebensdauer des Cache kann wiederholte Besuche Ihrer Seite beschleunigen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/cache-policy)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 Ressource gefunden}other{# Ressourcen gefunden}}"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | failureTitle": {
-    "message": "Statische Inhalte mit einer effizienten Cache-Richtlinie bereitstellen"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | title": {
-    "message": "Verwendet eine effiziente Cache-Richtlinie für statische Inhalte"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | description": {
-    "message": "Optimierte Bilder werden schneller geladen und verbrauchen weniger mobile Daten. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/optimize-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | title": {
-    "message": "Bilder effizient codieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | description": {
-    "message": "Stellen Sie Bilder bereit, die eine angemessene Größe haben, um mobile Daten zu sparen und die Ladezeit zu verbessern. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/oversized-images)"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | title": {
-    "message": "Bilder richtig dimensionieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-text-compression.js | description": {
-    "message": "Textbasierte Ressourcen sollten mit Komprimierung (gzip, Deflate oder Brotli) bereitgestellt werden, um die Datenmenge im Netzwerk insgesamt zu minimieren. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/text-compression)"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-text-compression.js | title": {
-    "message": "Textkomprimierung aktivieren"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-webp-images.js | description": {
-    "message": "Bildformate wie JPEG 2000, JPEG XR und WebP bieten oft eine bessere Komprimierung als PNG oder JPEG, was schnellere Downloads und einen geringeren Datenverbrauch ermöglicht. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/webp)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-webp-images.js | title": {
-    "message": "Bilder in modernen Formaten bereitstellen"
-  },
-  "lighthouse-core/audits/critical-request-chains.js | description": {
-    "message": "In den unten aufgeführten Ketten kritischer Anfragen können Sie sehen, welche Ressourcen mit einer hohen Priorität ausgegeben werden. Versuchen Sie, die Länge der Ketten zu reduzieren, die Downloadgröße von Ressourcen zu verkleinern oder das Herunterladen unnötiger Ressourcen aufzuschieben, um den Seitenaufbau zu beschleunigen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/critical-request-chains)."
-  },
-  "lighthouse-core/audits/critical-request-chains.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 Kette gefunden}other{# Ketten gefunden}}"
-  },
-  "lighthouse-core/audits/critical-request-chains.js | title": {
-    "message": "Tiefe kritischer Anforderungen minimieren"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMDepth": {
-    "message": "Maximale DOM-Tiefe"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMNodes": {
-    "message": "Gesamtzahl der DOM-Knoten"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMWidth": {
-    "message": "Maximale Anzahl untergeordneter Elemente"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | description": {
-    "message": "Laut der Empfehlung von Browserentwicklern sollten Seiten nicht mehr als ungefähr 1.500 DOM-Knoten enthalten. Die ideale Strukturtiefe liegt bei unter 32 Elementen und weniger als 60 unter- und übergeordneten Elementen. Ein großes DOM kann zu hohem Speicherverbrauch, langwierigen [Stilberechnungen](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations) und kostspieligen [dynamischen Umbrüchen im Layout](https://developers.google.com/speed/articles/reflow) führen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/dom-size)."
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 Knoten}other{# Knoten}}"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | failureTitle": {
-    "message": "Übermäßige DOM-Größe vermeiden"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | title": {
-    "message": "Vermeidet eine übermäßige DOM-Größe"
-  },
-  "lighthouse-core/audits/font-display.js | description": {
-    "message": "Sie können Gebrauch von der CSS-Funktion \"font-display\" machen, um sicherzugehen, dass der Text für Nutzer sichtbar ist, während Webfonts geladen werden. [Weitere Informationen](https://developers.google.com/web/updates/2016/02/font-display)."
-  },
-  "lighthouse-core/audits/font-display.js | failureTitle": {
-    "message": "Darauf achten, dass der Text während der Webfont-Ladevorgänge sichtbar bleibt"
-  },
-  "lighthouse-core/audits/font-display.js | title": {
-    "message": "Der gesamte Text bleibt während der Webfont-Ladevorgänge sichtbar"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | columnCategory": {
-    "message": "Kategorie"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | description": {
-    "message": "Versuchen Sie, die Zeit für das Parsen, Kompilieren und Ausführen von JS zu reduzieren. Die Bereitstellung kleinerer JS-Nutzlasten kann dabei helfen."
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | failureTitle": {
-    "message": "Aufwand für Hauptthread minimieren"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | title": {
-    "message": "Minimiert den Aufwand für den Hauptthread"
-  },
-  "lighthouse-core/audits/metrics/estimated-input-latency.js | description": {
-    "message": "Beim Ergebnis oben handelt es sich um eine Schätzung dessen, wie viele Millisekunden Ihre App benötigt, um während des 5-s-Fensters mit der stärksten Auslastung beim Seitenaufbau auf Nutzereingaben zu reagieren. Wenn die Latenz bei Ihnen über 50 ms liegt, empfinden Nutzer Ihre App möglicherweise als langsam. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/estimated-input-latency)."
-  },
-  "lighthouse-core/audits/metrics/estimated-input-latency.js | title": {
-    "message": "Geschätzte Eingabelatenz"
-  },
-  "lighthouse-core/audits/metrics/first-contentful-paint.js | description": {
-    "message": "\"Erste Inhalte gezeichnet\" gibt an, wann der erste Text oder das erste Bild gezeichnet wird. [Weitere Informationen](https://developers.google.com/web/fundamentals/performance/user-centric-performance-metrics#first_paint_and_first_contentful_paint)."
-  },
-  "lighthouse-core/audits/metrics/first-contentful-paint.js | title": {
-    "message": "Erste Inhalte gezeichnet"
-  },
-  "lighthouse-core/audits/metrics/first-cpu-idle.js | description": {
-    "message": "\"Erster CPU-Leerlauf\" gibt den Zeitpunkt an, an dem die Aktivität des Hauptthreads der Seite das erste Mal gering genug ist, um Eingaben zu verarbeiten. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/first-interactive)."
-  },
-  "lighthouse-core/audits/metrics/first-cpu-idle.js | title": {
-    "message": "Erster CPU-Leerlauf"
-  },
-  "lighthouse-core/audits/metrics/first-meaningful-paint.js | description": {
-    "message": "\"Inhalte weitgehend gezeichnet\" gibt an, wann die Hauptinhalte einer Seite sichtbar sind. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/first-meaningful-paint)."
-  },
-  "lighthouse-core/audits/metrics/first-meaningful-paint.js | title": {
-    "message": "Inhalte weitgehend gezeichnet"
-  },
-  "lighthouse-core/audits/metrics/interactive.js | description": {
-    "message": "\"Zeit bis Interaktivität\" gibt den Zeitpunkt an, an dem die Seite voll interaktionsfähig ist. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/consistently-interactive)."
-  },
-  "lighthouse-core/audits/metrics/interactive.js | title": {
-    "message": "Zeit bis Interaktivität"
-  },
-  "lighthouse-core/audits/metrics/speed-index.js | description": {
-    "message": "Der Geschwindigkeitsindex zeigt an, wie schnell die Inhalte einer Seite sichtbar dargestellt werden. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/speed-index)."
-  },
-  "lighthouse-core/audits/metrics/speed-index.js | title": {
-    "message": "Geschwindigkeitsindex"
-  },
-  "lighthouse-core/audits/redirects.js | description": {
-    "message": "Weiterleitungen führen zu zusätzlichen Verzögerungen, bevor die Seite geladen werden kann. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/redirects)."
-  },
-  "lighthouse-core/audits/redirects.js | title": {
-    "message": "Mehrere Weiterleitungen auf die Seite vermeiden"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | description": {
-    "message": "TTFB (Time To First Byte) erkennt den Zeitpunkt, an dem Ihr Server eine Antwort sendet. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/ttfb)."
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | displayValue": {
-    "message": "Stammdokument brauchte {timeInMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | failureTitle": {
-    "message": "Serverantwortzeiten reduzieren (TTFB)"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | title": {
-    "message": "Serverantwortzeiten sind niedrig (TTFB)"
-  },
-  "lighthouse-core/audits/user-timings.js | description": {
-    "message": "Versuchen Sie, die User Timing API in Ihre App zu integrieren. Damit können Sie Messungen von wichtigem Nutzerverhalten in der Praxis vornehmen. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/user-timing)."
-  },
-  "lighthouse-core/audits/user-timings.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 Nutzertiming}other{# Nutzertimings}}"
-  },
-  "lighthouse-core/audits/user-timings.js | title": {
-    "message": "Markierungen und Messungen für das Nutzertiming"
-  },
-  "lighthouse-core/audits/uses-rel-preconnect.js | description": {
-    "message": "Versuchen Sie, Hinweise auf Ressourcen für eine Vorverbindung oder einen DNS-Vorabruf hinzuzufügen, damit möglichst frühzeitig eine Verbindung zu wichtigen Drittanbieterursprüngen hergestellt wird. [Weitere Informationen](https://developers.google.com/web/fundamentals/performance/resource-prioritization#preconnect)."
-  },
-  "lighthouse-core/audits/uses-rel-preconnect.js | title": {
-    "message": "Vorverbindung zu erforderlichen Ursprüngen aufbauen"
-  },
-  "lighthouse-core/audits/uses-rel-preload.js | description": {
-    "message": "Mit <link rel=preload> können Sie das Abrufen von Ressourcen priorisieren, die aktuell später beim Seitenaufbau angefordert werden. [Weitere Informationen](https://developers.google.com/web/tools/lighthouse/audits/preload)."
-  },
-  "lighthouse-core/audits/uses-rel-preload.js | title": {
-    "message": "Wichtige Anforderungen vorab laden"
-  },
-  "lighthouse-core/config/default-config.js | diagnosticsGroupDescription": {
-    "message": "Weitere Informationen zur Leistung Ihrer App."
-  },
-  "lighthouse-core/config/default-config.js | diagnosticsGroupTitle": {
-    "message": "Diagnose"
-  },
-  "lighthouse-core/config/default-config.js | firstPaintImprovementsGroupDescription": {
-    "message": "Der wichtigste Faktor bei der Leistung ist, wie schnell Pixel auf dem Bildschirm gerendert werden. Wichtige Messwerte: \"Erste Inhalte gezeichnet\", \"Inhalte weitgehend gezeichnet\""
-  },
-  "lighthouse-core/config/default-config.js | firstPaintImprovementsGroupTitle": {
-    "message": "Verbesserungen beim Zeichnen der ersten Inhalte"
-  },
-  "lighthouse-core/config/default-config.js | loadOpportunitiesGroupDescription": {
-    "message": "Diese Optimierungen können den Seitenaufbau beschleunigen."
-  },
-  "lighthouse-core/config/default-config.js | loadOpportunitiesGroupTitle": {
-    "message": "Empfehlungen"
-  },
-  "lighthouse-core/config/default-config.js | metricGroupTitle": {
-    "message": "Messwerte"
-  },
-  "lighthouse-core/config/default-config.js | overallImprovementsGroupDescription": {
-    "message": "Hier können Sie die Ladezeiten verkürzen, damit die Seite so schnell wie möglich reagiert und Einsatzbereit ist. Wichtige Messwerte: \"Zeit bis Interaktivität\", \"Geschwindigkeitsindex\""
-  },
-  "lighthouse-core/config/default-config.js | overallImprovementsGroupTitle": {
-    "message": "Allgemeine Verbesserungen"
-  },
-  "lighthouse-core/config/default-config.js | performanceCategoryTitle": {
-    "message": "Leistung"
-  },
-  "lighthouse-core/lib/i18n.js | columnCacheTTL": {
-    "message": "Cache-TTL"
-  },
-  "lighthouse-core/lib/i18n.js | columnSize": {
-    "message": "Größe (KB)"
-  },
-  "lighthouse-core/lib/i18n.js | columnTimeSpent": {
-    "message": "Zeitaufwand"
-  },
-  "lighthouse-core/lib/i18n.js | columnURL": {
-    "message": "URL"
-  },
-  "lighthouse-core/lib/i18n.js | columnWastedBytes": {
-    "message": "Mögliche Einsparung (KB)"
-  },
-  "lighthouse-core/lib/i18n.js | columnWastedMs": {
-    "message": "Mögliche Einsparung (ms)"
-  },
-  "lighthouse-core/lib/i18n.js | displayValueByteSavings": {
-    "message": "Mögliche Einsparung von {wastedBytes, number, bytes} ms"
-  },
-  "lighthouse-core/lib/i18n.js | displayValueMsSavings": {
-    "message": "Mögliche Einsparung von {wastedMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/lib/i18n.js | ms": {
-    "message": "{timeInMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/report/html/renderer/util.js | auditGroupExpandTooltip": {
-    "message": "Überprüfungen ansehen"
-  },
-  "lighthouse-core/report/html/renderer/util.js | errorLabel": {
-    "message": "Fehler."
-  },
-  "lighthouse-core/report/html/renderer/util.js | errorMissingAuditInfo": {
-    "message": "Fehler gemeldet: keine Informationen zur Überprüfung"
-  },
-  "lighthouse-core/report/html/renderer/util.js | manualAuditsGroupTitle": {
-    "message": "Zusätzliche Elemente zur manuellen Überprüfung"
-  },
-  "lighthouse-core/report/html/renderer/util.js | notApplicableAuditsGroupTitle": {
-    "message": "Nicht zutreffend"
-  },
-  "lighthouse-core/report/html/renderer/util.js | opportunityResourceColumnLabel": {
-    "message": "Empfehlung"
-  },
-  "lighthouse-core/report/html/renderer/util.js | opportunitySavingsColumnLabel": {
-    "message": "Geschätzte Einsparung"
-  },
-  "lighthouse-core/report/html/renderer/util.js | passedAuditsGroupTitle": {
-    "message": "Bestandene Prüfungen"
-  },
-  "lighthouse-core/report/html/renderer/util.js | scorescaleLabel": {
-    "message": "Ergebnisskala:"
-  },
-  "lighthouse-core/report/html/renderer/util.js | toplevelWarningsMessage": {
-    "message": "Einige Probleme haben diese Ausführung von Lighthouse beeinträchtigt:"
-  },
-  "lighthouse-core/report/html/renderer/util.js | varianceDisclaimer": {
-    "message": "Die Werte sind geschätzt und können variieren."
-  },
-  "lighthouse-core/report/html/renderer/util.js | warningHeader": {
-    "message": "Warnungen: "
-  }
-}
\ No newline at end of file
diff --git a/lighthouse-core/lib/locales/index.js b/lighthouse-core/lib/locales/index.js
index bd4d55c4c..dcc7821b9 100644
--- a/lighthouse-core/lib/locales/index.js
+++ b/lighthouse-core/lib/locales/index.js
@@ -9,11 +9,64 @@
 
 /** @type {Record<LH.Locale, LocaleMessages>} */
 const locales = {
-  'ar': require('./ar-XB.json'), // TODO: fallback not needed when ar translation available
-  'ar-XB': require('./ar-XB.json'),
-  'en': require('./en-US.json'), // en-* fallback
-  'en-US': require('./en-US.json'),
-  'en-XA': require('./en-XA.json'),
+  'en-US': require('./en-US.json'), // The 'source' strings, with descriptions
+  'en': require('./en-US.json'), // According to CLDR/ICU, 'en' == 'en-US' dates/numbers (Why?!)
+
+  // TODO: en-IE has just ~10 messages that are different from en-US. We should only ship those.
+  'en-AU': require('./en-IE.json'), // Don't fallback to en (which -> en-US)
+  'en-GB': require('./en-IE.json'), // Don't fallback to en (which -> en-US)
+  'en-IE': require('./en-IE.json'), // Don't fallback to en (which -> en-US)
+  'en-SG': require('./en-IE.json'), // Don't fallback to en (which -> en-US)
+  'en-ZA': require('./en-IE.json'), // Don't fallback to en (which -> en-US)
+  'en-IN': require('./en-IE.json'), // Don't fallback to en (which -> en-US)
+
+  'gsw': require('./de.json'), // swiss german. identical (for our purposes) to 'de'
+
+  // All locales from here have a messages file, though we allow fallback to the base locale when the files are identical
+  'ar-XB': require('./ar-XB.json'), // psuedolocalization
+  'ar': require('./ar.json'),
+  'bg': require('./bg.json'),
+  'ca': require('./ca.json'),
+  'cs': require('./cs.json'),
+  'da': require('./da.json'),
+  'de': require('./de.json'), // de-AT, de-CH identical, so they fall back into de
+  'el': require('./el.json'),
+  'en-XA': require('./en-XA.json'), // psuedolocalization
+  'es': require('./es.json'),
+  'fi': require('./fi.json'),
+  'fil': require('./fil.json'),
+  'fr': require('./fr.json'), // fr-CH identical, so it falls back into fr
+  'hi': require('./hi.json'),
+  'hr': require('./hr.json'),
+  'hu': require('./hu.json'),
+  'id': require('./id.json'),
+  'it': require('./it.json'),
+  'iw': require('./iw.json'),
+  'ja': require('./ja.json'),
+  'ko': require('./ko.json'),
+  'lt': require('./lt.json'),
+  'lv': require('./lv.json'),
+  'nl': require('./nl.json'),
+  'no': require('./no.json'),
+  'pl': require('./pl.json'),
+  'pt': require('./pt.json'), // pt-BR identical, so it falls back into pt
+  'pt-PT': require('./pt-PT.json'),
+  'ro': require('./ro.json'),
+  'ru': require('./ru.json'),
+  'sk': require('./sk.json'),
+  'sl': require('./sl.json'),
+  'sr': require('./sr.json'),
+  'sv': require('./sv.json'),
+  'ta': require('./ta.json'),
+  'te': require('./te.json'),
+  'th': require('./th.json'),
+  'tr': require('./tr.json'),
+  'uk': require('./uk.json'),
+  'vi': require('./vi.json'),
+  'zh': require('./zh-CN.json'),
+  'zh-CN': require('./zh-CN.json'),
+  'zh-HK': require('./zh-HK.json'),
+  'zh-TW': require('./zh-TW.json'),
 };
 
 module.exports = locales;
diff --git a/lighthouse-core/lib/locales/pt-BR.json b/lighthouse-core/lib/locales/pt-BR.json
deleted file mode 100644
index 5e2542714..000000000
--- a/lighthouse-core/lib/locales/pt-BR.json
+++ /dev/null
@@ -1,332 +0,0 @@
-{
-  "lighthouse-core/audits/bootup-time.js | chromeExtensionsWarning": {
-    "message": "As extensões do Chrome afetaram negativamente o desempenho de carregamento desta página. Tente fazer a auditoria da página no modo de navegação anônima ou a partir de um perfil limpo do Chrome."
-  },
-  "lighthouse-core/audits/bootup-time.js | columnScriptEval": {
-    "message": "Avaliação de script"
-  },
-  "lighthouse-core/audits/bootup-time.js | columnScriptParse": {
-    "message": "Análise de script"
-  },
-  "lighthouse-core/audits/bootup-time.js | columnTotal": {
-    "message": "Total"
-  },
-  "lighthouse-core/audits/bootup-time.js | description": {
-    "message": "Reduza o tempo gasto com análise, compilação e execução de JS. Você perceberá que exibir payloads de JS menores ajuda a fazer isso. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/bootup)."
-  },
-  "lighthouse-core/audits/bootup-time.js | failureTitle": {
-    "message": "Reduza o tempo de execução de JavaScript"
-  },
-  "lighthouse-core/audits/bootup-time.js | title": {
-    "message": "Tempo de execução de JavaScript"
-  },
-  "lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | description": {
-    "message": "GIFs grandes são ineficazes para exibir conteúdo animado. Use vídeos MPEG4/WebM para animações e PNG/WebP para imagens estáticas em vez de GIF, para economizar bytes de rede. [Saiba mais](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/replace-animated-gifs-with-video/)"
-  },
-  "lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | title": {
-    "message": "Use formatos de vídeo para conteúdo animado"
-  },
-  "lighthouse-core/audits/byte-efficiency/offscreen-images.js | description": {
-    "message": "Use o carregamento lento para imagens fora da tela e ocultas depois que todos os recursos críticos já estiverem carregados, para reduzir o tempo necessário até que a página se torne interativa. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/offscreen-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/offscreen-images.js | title": {
-    "message": "Adie imagens fora da tela"
-  },
-  "lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | description": {
-    "message": "Alguns recursos estão bloqueando o primeiro aparecimento da sua página. Considere exibir JS/CSS crítico inline e adiar todos os JS/estilos não críticos. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/blocking-resources)."
-  },
-  "lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | title": {
-    "message": "Elimine recursos que impedem a renderização"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | description": {
-    "message": "Grandes payloads de rede geram custos para os usuários e estão altamente relacionados a tempos maiores de carregamento. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/network-payloads)."
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | displayValue": {
-    "message": "O tamanho total foi de {totalBytes, number, bytes} KB"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | failureTitle": {
-    "message": "Evite payloads de rede muito grandes"
-  },
-  "lighthouse-core/audits/byte-efficiency/total-byte-weight.js | title": {
-    "message": "Evita payloads de rede muito grandes"
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-css.js | description": {
-    "message": "A redução de arquivos CSS pode diminuir o tamanho do payload de rede. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/minify-css)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-css.js | title": {
-    "message": "Reduza o CSS"
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-javascript.js | description": {
-    "message": "A redução de arquivos JavaScript pode diminuir o tamanho de payloads e o tempo de análise de scripts. [Saiba mais](https://developers.google.com/speed/docs/insights/MinifyResources)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unminified-javascript.js | title": {
-    "message": "Reduza o JavaScript"
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-css-rules.js | description": {
-    "message": "Remova regras não utilizadas das folhas de estilos para reduzir o consumo desnecessário de bytes da atividade de rede. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/unused-css)."
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-css-rules.js | title": {
-    "message": "Adie CSS não utilizado"
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-javascript.js | description": {
-    "message": "Remova o JavaScript não utilizado para reduzir o consumo de bytes da atividade de rede."
-  },
-  "lighthouse-core/audits/byte-efficiency/unused-javascript.js | title": {
-    "message": "Remova o JavaScript não utilizado"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | description": {
-    "message": "Um cache com ciclo de vida longo pode acelerar visitas repetidas à sua página. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/cache-policy)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 recurso encontrado}one{# recurso encontrado}other{# recursos encontrados}}"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | failureTitle": {
-    "message": "Disponibilize recursos estáticos com uma política de cache eficiente"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js | title": {
-    "message": "Usa uma política de cache eficiente em recursos estáticos"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | description": {
-    "message": "Imagens otimizadas são carregadas mais rapidamente e consomem menos dados da rede celular. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/optimize-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | title": {
-    "message": "Codifique as imagens com eficiência"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | description": {
-    "message": "Disponibilize imagens de tamanho adequado para economizar dados da rede celular e melhorar o tempo de carregamento. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/oversized-images)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | title": {
-    "message": "Defina um tamanho adequado para as imagens"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-text-compression.js | description": {
-    "message": "Os recursos baseados em texto precisam ser disponibilizados com compactação (gzip, deflate ou brotli) para reduzir o total de bytes da rede. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/text-compression)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-text-compression.js | title": {
-    "message": "Ative a compactação de texto"
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-webp-images.js | description": {
-    "message": "Formatos de imagem como JPEG 2000, JPEG XR e WebP geralmente resultam em uma compactação melhor em comparação a PNG ou JPEG, o que significa downloads mais rápidos e menor consumo de dados. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/webp)."
-  },
-  "lighthouse-core/audits/byte-efficiency/uses-webp-images.js | title": {
-    "message": "Disponibilize imagens em formatos de última geração"
-  },
-  "lighthouse-core/audits/critical-request-chains.js | description": {
-    "message": "As redes de solicitações críticas abaixo mostram os recursos emitidos com alta prioridade. Reduza o tamanho das redes e dos recursos ou adie o download de recursos desnecessários para melhorar o carregamento de página. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/critical-request-chains)."
-  },
-  "lighthouse-core/audits/critical-request-chains.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 rede encontrada}one{# rede encontrada}other{# redes encontradas}}"
-  },
-  "lighthouse-core/audits/critical-request-chains.js | title": {
-    "message": "Reduza a profundidade de solicitações críticas"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMDepth": {
-    "message": "Profundidade máxima de DOM"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMNodes": {
-    "message": "Total de nós de DOM"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | columnDOMWidth": {
-    "message": "Número máximo de filhos"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | description": {
-    "message": "Os engenheiros de navegador recomendam que as páginas tenham menos de ~1.500 nós de DOM. O ideal é uma profundidade de árvore com < 32 elementos e menos de 60 elementos filhos/pais. Um DOM grande pode aumentar o uso da memória, causar [cálculos de estilo] mais longos (https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations) e produzir [reflows de layout] de alto custo (https://developers.google.com/speed/articles/reflow). [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/dom-size)."
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 nó}one{# nó}other{# nós}}"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | failureTitle": {
-    "message": "Evite DOM de tamanho excessivo"
-  },
-  "lighthouse-core/audits/dobetterweb/dom-size.js | title": {
-    "message": "Evita DOM de tamanho excessivo"
-  },
-  "lighthouse-core/audits/font-display.js | description": {
-    "message": "Use o recurso CSS de exibição de fonte para garantir que o texto possa ser visto pelo usuário enquanto as webfonts são carregadas. [Saiba mais](https://developers.google.com/web/updates/2016/02/font-display)."
-  },
-  "lighthouse-core/audits/font-display.js | failureTitle": {
-    "message": "Garanta que o texto continue visível durante o carregamento da webfont"
-  },
-  "lighthouse-core/audits/font-display.js | title": {
-    "message": "Todo o texto continua visível durante o carregamento da webfont"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | columnCategory": {
-    "message": "Categoria"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | description": {
-    "message": "Reduza o tempo gasto com análise, compilação e execução de JS. Você perceberá que exibir payloads de JS menores ajuda a fazer isso."
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | failureTitle": {
-    "message": "Minimize o trabalho da thread principal"
-  },
-  "lighthouse-core/audits/mainthread-work-breakdown.js | title": {
-    "message": "Minimiza o trabalho da thread principal"
-  },
-  "lighthouse-core/audits/metrics/estimated-input-latency.js | description": {
-    "message": "A pontuação acima é uma estimativa do tempo que seu aplicativo leva para responder à atividade do usuário, em milésimos de segundo, durante a janela de carregamento de página mais movimentada de cinco segundos. Se a latência for superior a 50 ms, o usuário poderá notar lentidão no aplicativo. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/estimated-input-latency)."
-  },
-  "lighthouse-core/audits/metrics/estimated-input-latency.js | title": {
-    "message": "Latência de entrada estimada"
-  },
-  "lighthouse-core/audits/metrics/first-contentful-paint.js | description": {
-    "message": "\"Primeiro aparecimento com conteúdo\" marca o momento em que o primeiro texto ou imagem é disponibilizado. [Saiba mais](https://developers.google.com/web/fundamentals/performance/user-centric-performance-metrics#first_paint_and_first_contentful_paint)."
-  },
-  "lighthouse-core/audits/metrics/first-contentful-paint.js | title": {
-    "message": "Primeiro aparecimento com conteúdo"
-  },
-  "lighthouse-core/audits/metrics/first-cpu-idle.js | description": {
-    "message": "\"Primeira CPU ociosa\" marca a primeira vez que a thread principal da página fica silenciosa o suficiente para lidar com a entrada. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/first-interactive)."
-  },
-  "lighthouse-core/audits/metrics/first-cpu-idle.js | title": {
-    "message": "Primeira CPU ociosa"
-  },
-  "lighthouse-core/audits/metrics/first-meaningful-paint.js | description": {
-    "message": "\"Primeiro aparecimento importante\" marca o momento em que o conteúdo principal de uma página se torna visível. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/first-meaningful-paint)."
-  },
-  "lighthouse-core/audits/metrics/first-meaningful-paint.js | title": {
-    "message": "Primeiro aparecimento importante"
-  },
-  "lighthouse-core/audits/metrics/interactive.js | description": {
-    "message": "\"Interativa\" marca o momento em que a página se torna totalmente interativa. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/consistently-interactive)."
-  },
-  "lighthouse-core/audits/metrics/interactive.js | title": {
-    "message": "Tempo até ficar interativa"
-  },
-  "lighthouse-core/audits/metrics/speed-index.js | description": {
-    "message": "O Índice de velocidade mostra a rapidez com que o conteúdo de uma página é preenchido visivelmente. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/speed-index)."
-  },
-  "lighthouse-core/audits/metrics/speed-index.js | title": {
-    "message": "Índice de velocidade"
-  },
-  "lighthouse-core/audits/redirects.js | description": {
-    "message": "Os redirecionamentos causam mais atrasos antes do carregamento da página. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/redirects)."
-  },
-  "lighthouse-core/audits/redirects.js | title": {
-    "message": "Evite redirecionamentos múltiplos de página"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | description": {
-    "message": "\"Tempo até o primeiro byte\" identifica o momento em que seu servidor envia uma resposta. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/ttfb)."
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | displayValue": {
-    "message": "O documento raiz levou {timeInMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | failureTitle": {
-    "message": "Reduza os tempos de resposta do servidor (TTFB)"
-  },
-  "lighthouse-core/audits/time-to-first-byte.js | title": {
-    "message": "Os tempos de resposta do servidor são baixos (TTFB)"
-  },
-  "lighthouse-core/audits/user-timings.js | description": {
-    "message": "Instrumente seu aplicativo com a User Timing API para criar medições personalizadas e reais para as principais experiências do usuário. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/user-timing)."
-  },
-  "lighthouse-core/audits/user-timings.js | displayValue": {
-    "message": "{itemCount,plural, =1{1 velocidade do usuário}one{# velocidade do usuário}other{# velocidades do usuário}}"
-  },
-  "lighthouse-core/audits/user-timings.js | title": {
-    "message": "Marcações e medições de User Timing"
-  },
-  "lighthouse-core/audits/uses-rel-preconnect.js | description": {
-    "message": "Adicione dicas de recursos de pré-conexão ou pré-busca de DNS para estabelecer conexões antecipadas a origens importantes de terceiros. [Saiba mais](https://developers.google.com/web/fundamentals/performance/resource-prioritization#preconnect)."
-  },
-  "lighthouse-core/audits/uses-rel-preconnect.js | title": {
-    "message": "Pré-conecte às origens necessárias"
-  },
-  "lighthouse-core/audits/uses-rel-preload.js | description": {
-    "message": "Use <link rel=preload> para priorizar a busca posterior de recursos solicitados atualmente no carregamento de página. [Saiba mais](https://developers.google.com/web/tools/lighthouse/audits/preload)."
-  },
-  "lighthouse-core/audits/uses-rel-preload.js | title": {
-    "message": "Pré-carregue as principais solicitações"
-  },
-  "lighthouse-core/config/default-config.js | diagnosticsGroupDescription": {
-    "message": "Mais informações sobre o desempenho do seu aplicativo."
-  },
-  "lighthouse-core/config/default-config.js | diagnosticsGroupTitle": {
-    "message": "Diagnóstico"
-  },
-  "lighthouse-core/config/default-config.js | firstPaintImprovementsGroupDescription": {
-    "message": "O aspecto de desempenho mais importante é a rapidez com que os pixels são renderizados na tela. Principais métricas: Primeiro aparecimento com conteúdo, Primeiro aparecimento importante"
-  },
-  "lighthouse-core/config/default-config.js | firstPaintImprovementsGroupTitle": {
-    "message": "Melhorias do primeiro aparecimento"
-  },
-  "lighthouse-core/config/default-config.js | loadOpportunitiesGroupDescription": {
-    "message": "Essas otimizações podem acelerar o carregamento de página."
-  },
-  "lighthouse-core/config/default-config.js | loadOpportunitiesGroupTitle": {
-    "message": "Oportunidades"
-  },
-  "lighthouse-core/config/default-config.js | metricGroupTitle": {
-    "message": "Métricas"
-  },
-  "lighthouse-core/config/default-config.js | overallImprovementsGroupDescription": {
-    "message": "Aprimore a experiência geral de carregamento, para que a página seja responsiva e esteja pronta para ser usada assim que possível. Principais métricas: Tempo até fica interativa, Índice de velocidade"
-  },
-  "lighthouse-core/config/default-config.js | overallImprovementsGroupTitle": {
-    "message": "Melhorias gerais"
-  },
-  "lighthouse-core/config/default-config.js | performanceCategoryTitle": {
-    "message": "Desempenho"
-  },
-  "lighthouse-core/lib/i18n.js | columnCacheTTL": {
-    "message": "Cache TTL"
-  },
-  "lighthouse-core/lib/i18n.js | columnSize": {
-    "message": "Tamanho (KB)"
-  },
-  "lighthouse-core/lib/i18n.js | columnTimeSpent": {
-    "message": "Tempo gasto"
-  },
-  "lighthouse-core/lib/i18n.js | columnURL": {
-    "message": "URL"
-  },
-  "lighthouse-core/lib/i18n.js | columnWastedBytes": {
-    "message": "Possível economia (KB)"
-  },
-  "lighthouse-core/lib/i18n.js | columnWastedMs": {
-    "message": "Possível economia (ms)"
-  },
-  "lighthouse-core/lib/i18n.js | displayValueByteSavings": {
-    "message": "Possível economia de {wastedBytes, number, bytes} KB"
-  },
-  "lighthouse-core/lib/i18n.js | displayValueMsSavings": {
-    "message": "Possível economia de {wastedMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/lib/i18n.js | ms": {
-    "message": "{timeInMs, number, milliseconds} ms"
-  },
-  "lighthouse-core/report/html/renderer/util.js | auditGroupExpandTooltip": {
-    "message": "Mostrar auditorias"
-  },
-  "lighthouse-core/report/html/renderer/util.js | errorLabel": {
-    "message": "Erro!"
-  },
-  "lighthouse-core/report/html/renderer/util.js | errorMissingAuditInfo": {
-    "message": "Informar erro: nenhuma informação de auditoria"
-  },
-  "lighthouse-core/report/html/renderer/util.js | manualAuditsGroupTitle": {
-    "message": "Outros itens para verificação manual"
-  },
-  "lighthouse-core/report/html/renderer/util.js | notApplicableAuditsGroupTitle": {
-    "message": "Não aplicável"
-  },
-  "lighthouse-core/report/html/renderer/util.js | opportunityResourceColumnLabel": {
-    "message": "Oportunidade"
-  },
-  "lighthouse-core/report/html/renderer/util.js | opportunitySavingsColumnLabel": {
-    "message": "Economia estimada"
-  },
-  "lighthouse-core/report/html/renderer/util.js | passedAuditsGroupTitle": {
-    "message": "Auditorias aprovadas"
-  },
-  "lighthouse-core/report/html/renderer/util.js | scorescaleLabel": {
-    "message": "Escala de pontuação:"
-  },
-  "lighthouse-core/report/html/renderer/util.js | toplevelWarningsMessage": {
-    "message": "Alguns problemas afetaram esta execução do Lighthouse:"
-  },
-  "lighthouse-core/report/html/renderer/util.js | varianceDisclaimer": {
-    "message": "Os valores são estimados e podem variar."
-  },
-  "lighthouse-core/report/html/renderer/util.js | warningHeader": {
-    "message": "Avisos: "
-  }
-}
\ No newline at end of file
diff --git a/lighthouse-core/report/html/renderer/util.js b/lighthouse-core/report/html/renderer/util.js
index e34c24ebc..737b924ae 100644
--- a/lighthouse-core/report/html/renderer/util.js
+++ b/lighthouse-core/report/html/renderer/util.js
@@ -400,8 +400,7 @@ class Util {
     Util.numberDateLocale = locale;
 
     // When testing, use a locale with more exciting numeric formatting
-    // @ts-ignore - TODO: until `de-DE` is in LH.Locale
-    if (Util.numberDateLocale === 'en-XA') Util.numberDateLocale = 'de-DE';
+    if (Util.numberDateLocale === 'en-XA') Util.numberDateLocale = 'de';
   }
 }
 
@@ -409,7 +408,7 @@ class Util {
  * This value is updated on each run to the locale of the report
  * @type {LH.Locale}
  */
-Util.numberDateLocale = 'en-US';
+Util.numberDateLocale = 'en';
 
 Util.UIStrings = {
   /** Disclaimer shown to users below the metric values (First Contentful Paint, Time to Interactive, etc) to warn them that the numbers they see will likely change slightly the next time they run Lighthouse. */
diff --git a/package.json b/package.json
index 466dbad92..d3caf0bdd 100644
--- a/package.json
+++ b/package.json
@@ -156,7 +156,7 @@
   "bundlesize": [
     {
       "path": "./lighthouse-extension/dist/scripts/lighthouse-background.js",
-      "threshold": "426 Kb"
+      "threshold": "510 Kb"
     },
     {
       "path": "./lighthouse-viewer/dist/src/viewer.js",
diff --git a/third-party/snyk/snapshot.json b/third-party/snyk/snapshot.json
index a7fe36b9c..51ffd65f1 100644
--- a/third-party/snyk/snapshot.json
+++ b/third-party/snyk/snapshot.json
@@ -80,10 +80,16 @@
       {"id":"npm:mustache:20110814","severity":"medium","semver":{"vulnerable":["< 0.3.1"]}},
       {"id":"npm:mustache:20151207","severity":"medium","semver":{"vulnerable":["<2.2.1"]}}
     ],
+    "preact-render-to-string":[
+      {"id":"npm:preact-render-to-string:20180802","severity":"medium","semver":{"vulnerable":["<3.7.2"]}}
+    ],
     "react":[
       {"id":"npm:react:20131217","severity":"medium","semver":{"vulnerable":[">=0.5.0 <0.5.2 || >=0.4.0 <0.4.2"]}},
       {"id":"npm:react:20150318","severity":"high","semver":{"vulnerable":["<0.14.0"]}}
     ],
+    "react-dom":[
+      {"id":"npm:react-dom:20180802","severity":"medium","semver":{"vulnerable":["<16.0.1 || >=16.1.0 <16.1.2 || >=16.2.0 <16.2.1 || >=16.3.0 <16.3.3 || >=16.4.0 <16.4.2"]}}
+    ],
     "riot":[
       {"id":"npm:riot:20131114","severity":"medium","semver":{"vulnerable":["<0.9.6"]}}
     ],
diff --git a/typings/externs.d.ts b/typings/externs.d.ts
index 4515c0627..1534eedcd 100644
--- a/typings/externs.d.ts
+++ b/typings/externs.d.ts
@@ -58,7 +58,7 @@ declare global {
       cpuSlowdownMultiplier?: number
     }
 
-    export type Locale = 'ar'|'ar-XB'|'en'|'en-US'|'en-XA';
+    export type Locale = 'en'|'en-GB'|'ar-XB'|'ar'|'bg'|'ca'|'cs'|'da'|'de'|'el'|'en-AU'|'en-IE'|'en-IN'|'en-SG'|'en-US'|'en-XA'|'en-ZA'|'es'|'fi'|'fil'|'fr'|'gsw'|'hi'|'hr'|'hu'|'id'|'it'|'iw'|'ja'|'ko'|'lt'|'lv'|'nl'|'no'|'pl'|'pt-PT'|'pt'|'ro'|'ru'|'sk'|'sl'|'sr'|'sv'|'ta'|'te'|'th'|'tr'|'uk'|'vi'|'zh'|'zh-CN'|'zh-HK'|'zh-TW'
 
     export type OutputMode = 'json' | 'html' | 'csv';
 


Test patch:
diff --git a/lighthouse-core/test/lib/i18n-test.js b/lighthouse-core/test/lib/i18n-test.js
index fdf41d9ed..69e09c6b6 100644
--- a/lighthouse-core/test/lib/i18n-test.js
+++ b/lighthouse-core/test/lib/i18n-test.js
@@ -72,8 +72,8 @@ describe('i18n', () => {
       expect(i18n.lookupLocale('en-JKJK')).toEqual('en');
     });
 
-    it('falls back to en-US if no match is available', () => {
-      expect(i18n.lookupLocale('jk-Latn-DE-1996-a-ext-x-phonebk-i-klingon')).toEqual('en-US');
+    it('falls back to en if no match is available', () => {
+      expect(i18n.lookupLocale('jk-Latn-DE-1996-a-ext-x-phonebk-i-klingon')).toEqual('en');
     });
   });
 });
diff --git a/lighthouse-core/test/lib/locales/index-test.js b/lighthouse-core/test/lib/locales/index-test.js
index b1d9968fc..1a33d3310 100644
--- a/lighthouse-core/test/lib/locales/index-test.js
+++ b/lighthouse-core/test/lib/locales/index-test.js
@@ -21,7 +21,10 @@ describe('locales', () => {
   it('has a base language prefix fallback for all supported languages', () => {
     for (const locale of Object.keys(locales)) {
       const basePrefix = locale.split('-')[0];
-      assert.ok(locales[basePrefix]);
+      // The internet sez there is no canonical Chinese, so we exclude that one.
+      if (basePrefix !== 'zh') {
+        assert.ok(locales[basePrefix], `${locale} is missing a base fallback`);
+      }
     }
   });
 });
diff --git a/lighthouse-core/test/report/html/renderer/util-test.js b/lighthouse-core/test/report/html/renderer/util-test.js
index 2937c2771..6ed46231b 100644
--- a/lighthouse-core/test/report/html/renderer/util-test.js
+++ b/lighthouse-core/test/report/html/renderer/util-test.js
@@ -67,7 +67,7 @@ describe('util helpers', () => {
     const number = 12346.858558;
 
     const originalLocale = Util.numberDateLocale;
-    Util.setNumberDateLocale('de-DE');
+    Util.setNumberDateLocale('de');
     assert.strictEqual(Util.formatNumber(number), '12.346,9');
     Util.setNumberDateLocale(originalLocale); // reset
     assert.strictEqual(Util.formatNumber(number), '12,346.9');