You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2026/06/05 17:33:27 UTC

(superset) branch master updated: feat(duration-format): replace pretty-ms with native Intl.DurationFormat for localized duration formatting (#39330)

This is an automated email from the ASF dual-hosted git repository.

rusackas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 108e40cbb61 feat(duration-format): replace pretty-ms with native Intl.DurationFormat for localized duration formatting (#39330)
108e40cbb61 is described below

commit 108e40cbb61af67d72c4836d568d23ecf4a461a7
Author: innovark <er...@mailfence.com>
AuthorDate: Fri Jun 5 20:33:17 2026 +0300

    feat(duration-format): replace pretty-ms with native Intl.DurationFormat for localized duration formatting (#39330)
---
 UPDATING.md                                        |   6 +
 superset-frontend/jest.config.js                   |   2 +-
 superset-frontend/package-lock.json                |  51 ++++++-
 superset-frontend/package.json                     |   2 +-
 .../src/utils/D3Formatting.ts                      |   2 +-
 .../packages/superset-ui-core/package.json         |   2 +-
 .../superset-ui-core/src/number-format/README.md   |   6 +-
 .../factories/createDurationFormatter.ts           |  47 ++++++-
 .../getIntlDurationFormatter.ts}                   |  32 ++---
 .../src/number-format/utils/parseMilliseconds.ts   |  57 ++++++++
 .../factories/createDurationFormatter.test.ts      |  25 ++--
 .../utils/getIntlDurationFormatter.test.ts         |  38 ++++++
 .../number-format/utils/parseMilliseconds.test.ts  | 148 +++++++++++++++++++++
 .../packages/superset-ui-core/types/intl.d.ts      |  73 ++++++++++
 superset-frontend/spec/helpers/setup.ts            |   4 +
 .../src/features/tasks/TaskStatusIcon.tsx          |   4 +
 .../src/features/tasks/timeUtils.test.ts           |   6 +-
 superset-frontend/src/features/tasks/timeUtils.ts  |  72 ++++++++--
 superset-frontend/src/pages/TaskList/index.tsx     |   7 +-
 superset-frontend/src/preamble.test.ts             | 113 ++++++++++++++++
 superset-frontend/src/preamble.ts                  |   3 +-
 superset-frontend/src/setup/setupFormatters.ts     |  15 ++-
 superset/translations/ar/LC_MESSAGES/messages.po   |  80 +++++++----
 superset/translations/ca/LC_MESSAGES/messages.po   |  86 +++++++-----
 superset/translations/cs/LC_MESSAGES/messages.po   |  86 +++++++-----
 superset/translations/de/LC_MESSAGES/messages.po   |  82 ++++++++----
 superset/translations/en/LC_MESSAGES/messages.po   |  72 ++++++----
 superset/translations/es/LC_MESSAGES/messages.po   |  88 +++++++-----
 superset/translations/fa/LC_MESSAGES/messages.po   |  82 ++++++++----
 superset/translations/fi/LC_MESSAGES/messages.po   |  99 +++++++++-----
 superset/translations/fr/LC_MESSAGES/messages.po   |  86 +++++++-----
 superset/translations/it/LC_MESSAGES/messages.po   |  74 +++++++----
 superset/translations/ja/LC_MESSAGES/messages.po   |  84 +++++++-----
 superset/translations/ko/LC_MESSAGES/messages.po   |  73 ++++++----
 superset/translations/lv/LC_MESSAGES/messages.po   |  84 +++++++-----
 superset/translations/messages.pot                 |  66 +++++----
 superset/translations/mi/LC_MESSAGES/messages.po   |  84 +++++++-----
 superset/translations/nl/LC_MESSAGES/messages.po   |  80 +++++++----
 superset/translations/pl/LC_MESSAGES/messages.po   |  80 +++++++----
 superset/translations/pt/LC_MESSAGES/messages.po   |  74 +++++++----
 .../translations/pt_BR/LC_MESSAGES/messages.po     |  80 +++++++----
 superset/translations/ru/LC_MESSAGES/messages.po   |  92 ++++++++-----
 superset/translations/sk/LC_MESSAGES/messages.po   |  86 +++++++-----
 superset/translations/sl/LC_MESSAGES/messages.po   |  80 +++++++----
 superset/translations/th/LC_MESSAGES/messages.po   |  99 +++++++++-----
 superset/translations/tr/LC_MESSAGES/messages.po   |  76 +++++++----
 superset/translations/uk/LC_MESSAGES/messages.po   |  84 +++++++-----
 superset/translations/zh/LC_MESSAGES/messages.po   |  77 +++++++----
 .../translations/zh_TW/LC_MESSAGES/messages.po     |  77 +++++++----
 49 files changed, 2052 insertions(+), 874 deletions(-)

diff --git a/UPDATING.md b/UPDATING.md
index ce90df733c2..9e04218886f 100644
--- a/UPDATING.md
+++ b/UPDATING.md
@@ -24,6 +24,12 @@ assists people when migrating to a new version.
 
 ## Next
 
+### Duration formatter precision
+
+The `DURATION` number formatter now uses `Intl.DurationFormat` for locale-aware output. By default, sub-second fields are omitted, so values that previously displayed fractional seconds with `pretty-ms`, such as `10500` milliseconds rendering as `10.5s`, now render as `10s`.
+
+To preserve sub-second precision in custom duration formatters, enable `formatSubMilliseconds`.
+
 ### YDB now uses a native sqlglot dialect
 
 YDB SQL parsing now relies on the dedicated [`ydb-sqlglot-plugin`](https://pypi.org/project/ydb-sqlglot-plugin/) dialect, which registers itself with sqlglot automatically. YDB users must install this plugin (e.g., via `pip install "apache-superset[ydb]"`) to avoid a `ValueError` when Superset parses YDB queries.
diff --git a/superset-frontend/jest.config.js b/superset-frontend/jest.config.js
index d13cd1d03b0..e117ab3f0ee 100644
--- a/superset-frontend/jest.config.js
+++ b/superset-frontend/jest.config.js
@@ -69,7 +69,7 @@ module.exports = {
   ],
   coverageReporters: ['lcov', 'json-summary', 'html', 'text'],
   transformIgnorePatterns: [
-    'node_modules/(?!d3-(array|interpolate|color|time|scale|time-format|format)|internmap|@mapbox/tiny-sdf|remark-gfm|(?!@ngrx|(?!deck.gl)|d3-scale)|markdown-table|micromark-*.|decode-named-character-reference|character-entities|mdast-util-*.|unist-util-*.|ccount|escape-string-regexp|nanoid|uuid|@rjsf/*.|echarts|zrender|fetch-mock|pretty-ms|parse-ms|ol|@babel/runtime|@emotion|cheerio|cheerio/lib|parse5|dom-serializer|entities|htmlparser2|rehype-sanitize|hast-util-sanitize|unified|unist-. [...]
+    'node_modules/(?!@formatjs/.*|d3-(array|interpolate|color|time|scale|time-format|format)|internmap|@mapbox/tiny-sdf|remark-gfm|(?!@ngrx|(?!deck.gl)|d3-scale)|markdown-table|micromark-*.|decode-named-character-reference|character-entities|mdast-util-*.|unist-util-*.|ccount|escape-string-regexp|nanoid|uuid|@rjsf/*.|echarts|zrender|fetch-mock|pretty-ms|parse-ms|ol|@babel/runtime|@emotion|cheerio|cheerio/lib|parse5|dom-serializer|entities|htmlparser2|rehype-sanitize|hast-util-sanitize|un [...]
   ],
   preset: 'ts-jest',
   transform: {
diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json
index 824f1d4c72b..5212dd1e395 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -118,7 +118,6 @@
         "mustache": "^4.2.0",
         "nanoid": "^5.1.11",
         "ol": "^10.9.0",
-        "pretty-ms": "^9.3.0",
         "query-string": "9.4.0",
         "re-resizable": "^6.11.2",
         "react": "^18.2.0",
@@ -179,6 +178,7 @@
         "@babel/types": "^7.29.7",
         "@emotion/babel-plugin": "^11.13.5",
         "@emotion/jest": "^11.14.2",
+        "@formatjs/intl-durationformat": "^0.10.3",
         "@istanbuljs/nyc-config-typescript": "^1.0.1",
         "@mihkeleidast/storybook-addon-source": "^1.0.1",
         "@playwright/test": "^1.60.0",
@@ -3954,6 +3954,53 @@
         "url": "https://github.com/sponsors/ayuhito"
       }
     },
+    "node_modules/@formatjs/bigdecimal": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/@formatjs/bigdecimal/-/bigdecimal-0.2.0.tgz",
+      "integrity": "sha512-GeaxHZbUoYvHL9tC5eltHLs+1zU70aPw0s7LwqgktIzF5oMhNY4o4deEtusJMsq7WFJF3Ye2zQEzdG8beVk73w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@formatjs/ecma402-abstract": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-3.2.0.tgz",
+      "integrity": "sha512-dHnqHgBo6GXYGRsepaE1wmsC2etaivOWd5VaJstZd+HI2zR3DCUjbDVZRtoPGkkXZmyHvBwrdEUuqfvzhF/DtQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@formatjs/bigdecimal": "0.2.0",
+        "@formatjs/fast-memoize": "3.1.1",
+        "@formatjs/intl-localematcher": "0.8.2"
+      }
+    },
+    "node_modules/@formatjs/fast-memoize": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.1.1.tgz",
+      "integrity": "sha512-CbNbf+tlJn1baRnPkNePnBqTLxGliG6DDgNa/UtV66abwIjwsliPMOt0172tzxABYzSuxZBZfcp//qI8AvBWPg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@formatjs/intl-durationformat": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmjs.org/@formatjs/intl-durationformat/-/intl-durationformat-0.10.3.tgz",
+      "integrity": "sha512-xRS3GaOlsQLwz0n56SvaddwEnl2NLPKBvYg2M32ak/27dodmVxFJz3j7Nqj7EwKyHTu3f/e+BeoKPrIDUSXTuQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@formatjs/ecma402-abstract": "3.2.0",
+        "@formatjs/intl-localematcher": "0.8.2"
+      }
+    },
+    "node_modules/@formatjs/intl-localematcher": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.8.2.tgz",
+      "integrity": "sha512-q05KMYGJLyqFNFtIb8NhWLF5X3aK/k0wYt7dnRFuy6aLQL+vUwQ1cg5cO4qawEiINybeCPXAWlprY2mSBjSXAQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@formatjs/fast-memoize": "3.1.1"
+      }
+    },
     "node_modules/@gar/promise-retry": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/@gar/promise-retry/-/promise-retry-1.0.3.tgz",
@@ -49323,7 +49370,7 @@
         "jed": "^1.1.1",
         "lodash": "^4.18.1",
         "math-expression-evaluator": "^2.0.7",
-        "pretty-ms": "^9.3.0",
+        "parse-ms": "^4.0.0",
         "re-resizable": "^6.11.2",
         "react-ace": "^14.0.1",
         "react-draggable": "^4.5.0",
diff --git a/superset-frontend/package.json b/superset-frontend/package.json
index acd8cc38d35..9bfafbf4d3c 100644
--- a/superset-frontend/package.json
+++ b/superset-frontend/package.json
@@ -201,7 +201,6 @@
     "mustache": "^4.2.0",
     "nanoid": "^5.1.11",
     "ol": "^10.9.0",
-    "pretty-ms": "^9.3.0",
     "query-string": "9.4.0",
     "re-resizable": "^6.11.2",
     "react": "^18.2.0",
@@ -262,6 +261,7 @@
     "@babel/types": "^7.29.7",
     "@emotion/babel-plugin": "^11.13.5",
     "@emotion/jest": "^11.14.2",
+    "@formatjs/intl-durationformat": "^0.10.3",
     "@istanbuljs/nyc-config-typescript": "^1.0.1",
     "@mihkeleidast/storybook-addon-source": "^1.0.1",
     "@playwright/test": "^1.60.0",
diff --git a/superset-frontend/packages/superset-ui-chart-controls/src/utils/D3Formatting.ts b/superset-frontend/packages/superset-ui-chart-controls/src/utils/D3Formatting.ts
index 5a331448b28..b276a54f299 100644
--- a/superset-frontend/packages/superset-ui-chart-controls/src/utils/D3Formatting.ts
+++ b/superset-frontend/packages/superset-ui-chart-controls/src/utils/D3Formatting.ts
@@ -57,7 +57,7 @@ export const D3_FORMAT_OPTIONS: [string, string][] = [
   ...d3Formatted,
   ['DURATION', t('Duration in ms (66000 => 1m 6s)')],
   ['DURATION_SUB', t('Duration in ms (1.40008 => 1ms 400µs 80ns)')],
-  ['DURATION_COL', t('Duration in ms (10500 => 0:10.5)')],
+  ['DURATION_COL', t('Duration in ms (10500 => 0:00:10.5)')],
   ['MEMORY_DECIMAL', t('Memory in bytes - decimal (1024B => 1.024kB)')],
   ['MEMORY_BINARY', t('Memory in bytes - binary (1024B => 1KiB)')],
   [
diff --git a/superset-frontend/packages/superset-ui-core/package.json b/superset-frontend/packages/superset-ui-core/package.json
index c9d0d26e48f..d58c0ce41e2 100644
--- a/superset-frontend/packages/superset-ui-core/package.json
+++ b/superset-frontend/packages/superset-ui-core/package.json
@@ -49,7 +49,7 @@
     "jed": "^1.1.1",
     "lodash": "^4.18.1",
     "math-expression-evaluator": "^2.0.7",
-    "pretty-ms": "^9.3.0",
+    "parse-ms": "^4.0.0",
     "re-resizable": "^6.11.2",
     "react-ace": "^14.0.1",
     "react-draggable": "^4.5.0",
diff --git a/superset-frontend/packages/superset-ui-core/src/number-format/README.md b/superset-frontend/packages/superset-ui-core/src/number-format/README.md
index 49ba401c3d9..3999c76ae37 100644
--- a/superset-frontend/packages/superset-ui-core/src/number-format/README.md
+++ b/superset-frontend/packages/superset-ui-core/src/number-format/README.md
@@ -64,15 +64,15 @@ NumberFormats.PERCENT; // ,.2%
 NumberFormats.PERCENT_3_POINT; // ,.3%
 ```
 
-There is also a formatter based on [pretty-ms](https://www.npmjs.com/package/pretty-ms) that can be
+There is also a formatter based on [Intl.DurationFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DurationFormat) that can be
 used to format time durations:
 
 ```js
 import { createDurationFormatter, formatNumber, getNumberFormatterRegistry } from '@superset-ui-number-format';
 
-getNumberFormatterRegistry().registerValue('my_duration_format', createDurationFormatter({ colonNotation: true });
+getNumberFormatterRegistry().registerValue('my_duration_format', createDurationFormatter({ style: 'digital' }));
 console.log(formatNumber('my_duration_format', 95500))
-// prints '1:35.5'
+// prints '0:01:35'
 ```
 
 #### API
diff --git a/superset-frontend/packages/superset-ui-core/src/number-format/factories/createDurationFormatter.ts b/superset-frontend/packages/superset-ui-core/src/number-format/factories/createDurationFormatter.ts
index 958136d90c2..8ba197bd652 100644
--- a/superset-frontend/packages/superset-ui-core/src/number-format/factories/createDurationFormatter.ts
+++ b/superset-frontend/packages/superset-ui-core/src/number-format/factories/createDurationFormatter.ts
@@ -17,8 +17,9 @@
  * under the License.
  */
 
-import prettyMilliseconds, { Options } from 'pretty-ms';
 import NumberFormatter from '../NumberFormatter';
+import { getIntlDurationFormatter } from '../utils/getIntlDurationFormatter';
+import { parseMilliseconds } from '../utils/parseMilliseconds';
 
 export default function createDurationFormatter(
   config: {
@@ -26,14 +27,48 @@ export default function createDurationFormatter(
     id?: string;
     label?: string;
     multiplier?: number;
-  } & Options = {},
+    locale?: string;
+    formatSubMilliseconds?: boolean;
+  } & Intl.DurationFormatOptions = {},
 ) {
-  const { description, id, label, multiplier = 1, ...prettyMsOptions } = config;
-
+  const {
+    description,
+    id,
+    label,
+    multiplier = 1,
+    locale,
+    formatSubMilliseconds = false,
+    ...intlOptions
+  } = config;
+  const durationFormatter = getIntlDurationFormatter(locale, {
+    secondsDisplay: 'auto',
+    style: 'narrow',
+    ...intlOptions,
+  });
+  const zeroDurationFormatter = getIntlDurationFormatter(locale, {
+    secondsDisplay: 'always',
+    style: 'narrow',
+    ...intlOptions,
+  });
   return new NumberFormatter({
     description,
-    formatFunc: value =>
-      prettyMilliseconds(value * multiplier, prettyMsOptions),
+    formatFunc: value => {
+      const durObject = parseMilliseconds(value * multiplier);
+
+      if (!formatSubMilliseconds) {
+        durObject.milliseconds = 0;
+        durObject.microseconds = 0;
+        durObject.nanoseconds = 0;
+      }
+
+      const isAllUnitsZero = Object.values(durObject).every(
+        value => value === 0,
+      );
+
+      return (
+        isAllUnitsZero ? zeroDurationFormatter : durationFormatter
+      ).format(durObject);
+    },
     id: id ?? 'duration_format',
     label: label ?? `Duration formatter`,
   });
diff --git a/superset-frontend/packages/superset-ui-core/src/number-format/factories/createDurationFormatter.ts b/superset-frontend/packages/superset-ui-core/src/number-format/utils/getIntlDurationFormatter.ts
similarity index 58%
copy from superset-frontend/packages/superset-ui-core/src/number-format/factories/createDurationFormatter.ts
copy to superset-frontend/packages/superset-ui-core/src/number-format/utils/getIntlDurationFormatter.ts
index 958136d90c2..23644e0df02 100644
--- a/superset-frontend/packages/superset-ui-core/src/number-format/factories/createDurationFormatter.ts
+++ b/superset-frontend/packages/superset-ui-core/src/number-format/utils/getIntlDurationFormatter.ts
@@ -1,4 +1,4 @@
-/*
+/**
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -17,24 +17,14 @@
  * under the License.
  */
 
-import prettyMilliseconds, { Options } from 'pretty-ms';
-import NumberFormatter from '../NumberFormatter';
-
-export default function createDurationFormatter(
-  config: {
-    description?: string;
-    id?: string;
-    label?: string;
-    multiplier?: number;
-  } & Options = {},
-) {
-  const { description, id, label, multiplier = 1, ...prettyMsOptions } = config;
-
-  return new NumberFormatter({
-    description,
-    formatFunc: value =>
-      prettyMilliseconds(value * multiplier, prettyMsOptions),
-    id: id ?? 'duration_format',
-    label: label ?? `Duration formatter`,
-  });
+export function getIntlDurationFormatter(
+  locale?: string,
+  options?: Intl.DurationFormatOptions,
+): Intl.DurationFormat {
+  const normalizedLocale = locale?.replace(/_/g, '-');
+  try {
+    return new Intl.DurationFormat(normalizedLocale, options);
+  } catch {
+    return new Intl.DurationFormat('en', options);
+  }
 }
diff --git a/superset-frontend/packages/superset-ui-core/src/number-format/utils/parseMilliseconds.ts b/superset-frontend/packages/superset-ui-core/src/number-format/utils/parseMilliseconds.ts
new file mode 100644
index 00000000000..67f654c6b0d
--- /dev/null
+++ b/superset-frontend/packages/superset-ui-core/src/number-format/utils/parseMilliseconds.ts
@@ -0,0 +1,57 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import parseMs from 'parse-ms';
+
+interface Duration {
+  years: number;
+  days: number;
+  hours: number;
+  minutes: number;
+  seconds: number;
+  milliseconds: number;
+  microseconds: number;
+  nanoseconds: number;
+}
+
+const DAYS_IN_YEAR = 365;
+
+/**
+ * Parses milliseconds into a duration object.
+
+ * @param ms - The number of milliseconds to parse
+ * @returns A duration object containing years, days, hours, minutes, seconds,
+ *          milliseconds, microseconds, and nanoseconds (1 year = 365 days)
+ * @example
+ * // Parse a complex duration
+ * parseMilliseconds(90061000);
+ * // { years: 0, days: 1, hours: 1, minutes: 1, seconds: 1, milliseconds: 0, ... }
+ */
+export function parseMilliseconds(ms: number): Duration {
+  const parsed = parseMs(ms);
+  const totalDays = parsed.days;
+  const years = Math.trunc(totalDays / DAYS_IN_YEAR);
+  const remainingDays = totalDays % DAYS_IN_YEAR;
+
+  return {
+    ...parsed,
+    years,
+    days: remainingDays,
+  };
+}
diff --git a/superset-frontend/packages/superset-ui-core/test/number-format/factories/createDurationFormatter.test.ts b/superset-frontend/packages/superset-ui-core/test/number-format/factories/createDurationFormatter.test.ts
index 0e7c6fff7f6..964f92834ed 100644
--- a/superset-frontend/packages/superset-ui-core/test/number-format/factories/createDurationFormatter.test.ts
+++ b/superset-frontend/packages/superset-ui-core/test/number-format/factories/createDurationFormatter.test.ts
@@ -26,34 +26,31 @@ test('creates an instance of NumberFormatter', () => {
 test('format milliseconds in human readable format with default options', () => {
   const formatter = createDurationFormatter();
   expect(formatter(-1000)).toBe('-1s');
-  expect(formatter(0)).toBe('0ms');
+  expect(formatter(0)).toBe('0s');
   expect(formatter(1000)).toBe('1s');
-  expect(formatter(1337)).toBe('1.3s');
-  expect(formatter(10500)).toBe('10.5s');
+  expect(formatter(1337)).toBe('1s');
+  expect(formatter(10500)).toBe('10s');
   expect(formatter(60 * 1000)).toBe('1m');
   expect(formatter(90 * 1000)).toBe('1m 30s');
 });
 test('format seconds in human readable format with default options', () => {
   const formatter = createDurationFormatter({ multiplier: 1000 });
-  expect(formatter(-0.5)).toBe('-500ms');
-  expect(formatter(0.5)).toBe('500ms');
+  expect(formatter(-0.5)).toBe('-0s');
+  expect(formatter(0.5)).toBe('0s');
   expect(formatter(1)).toBe('1s');
   expect(formatter(30)).toBe('30s');
   expect(formatter(60)).toBe('1m');
   expect(formatter(90)).toBe('1m 30s');
 });
-test('format milliseconds in human readable format with additional pretty-ms options', () => {
+test('format milliseconds in human readable format with additional options', () => {
   const colonNotationFormatter = createDurationFormatter({
-    colonNotation: true,
-  });
-  expect(colonNotationFormatter(-10500)).toBe('-0:10.5');
-  expect(colonNotationFormatter(10500)).toBe('0:10.5');
-  const zeroDecimalFormatter = createDurationFormatter({
-    secondsDecimalDigits: 0,
+    style: 'digital',
+    formatSubMilliseconds: true,
+    fractionalDigits: 1,
   });
-  expect(zeroDecimalFormatter(10500)).toBe('10s');
+  expect(colonNotationFormatter(10500)).toBe('0:00:10.5');
   const subMillisecondFormatter = createDurationFormatter({
     formatSubMilliseconds: true,
   });
-  expect(subMillisecondFormatter(100.40008)).toBe('100ms 400µs 80ns');
+  expect(subMillisecondFormatter(100.40008)).toBe('100ms 400μs 80ns');
 });
diff --git a/superset-frontend/packages/superset-ui-core/test/number-format/utils/getIntlDurationFormatter.test.ts b/superset-frontend/packages/superset-ui-core/test/number-format/utils/getIntlDurationFormatter.test.ts
new file mode 100644
index 00000000000..1aa053beb20
--- /dev/null
+++ b/superset-frontend/packages/superset-ui-core/test/number-format/utils/getIntlDurationFormatter.test.ts
@@ -0,0 +1,38 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import { getIntlDurationFormatter } from '@superset-ui/core/number-format/utils/getIntlDurationFormatter';
+
+test('getIntlDurationFormatter creates formatter with fallback locale when passed locale is invalid', () => {
+  const formatter = getIntlDurationFormatter('invalid-locale-xyz');
+  expect(formatter).toBeInstanceOf(Intl.DurationFormat);
+  expect(formatter.format({ seconds: 60 })).toBe('60 sec');
+});
+
+test('getIntlDurationFormatter creates formatter with custom options', () => {
+  const formatter = getIntlDurationFormatter('en', { style: 'digital' });
+  expect(formatter).toBeInstanceOf(Intl.DurationFormat);
+  expect(formatter.format({ minutes: 5, seconds: 30 })).toContain(':');
+});
+
+test('getIntlDurationFormatter normalizes locale underscores', () => {
+  const formatter = getIntlDurationFormatter('zh_Hans_CN');
+  expect(formatter).toBeInstanceOf(Intl.DurationFormat);
+  expect(formatter.resolvedOptions().locale).toMatch(/^zh/);
+});
diff --git a/superset-frontend/packages/superset-ui-core/test/number-format/utils/parseMilliseconds.test.ts b/superset-frontend/packages/superset-ui-core/test/number-format/utils/parseMilliseconds.test.ts
new file mode 100644
index 00000000000..6e70ef39621
--- /dev/null
+++ b/superset-frontend/packages/superset-ui-core/test/number-format/utils/parseMilliseconds.test.ts
@@ -0,0 +1,148 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import { parseMilliseconds } from '@superset-ui/core/number-format/utils/parseMilliseconds';
+
+test('parseMilliseconds should parse basic time units correctly', () => {
+  expect(parseMilliseconds(500)).toEqual({
+    years: 0,
+    days: 0,
+    hours: 0,
+    minutes: 0,
+    seconds: 0,
+    milliseconds: 500,
+    microseconds: 0,
+    nanoseconds: 0,
+  });
+  expect(parseMilliseconds(5000)).toEqual({
+    years: 0,
+    days: 0,
+    hours: 0,
+    minutes: 0,
+    seconds: 5,
+    milliseconds: 0,
+    microseconds: 0,
+    nanoseconds: 0,
+  });
+  expect(parseMilliseconds(120000)).toEqual({
+    years: 0,
+    days: 0,
+    hours: 0,
+    minutes: 2,
+    seconds: 0,
+    milliseconds: 0,
+    microseconds: 0,
+    nanoseconds: 0,
+  });
+  expect(parseMilliseconds(7200000)).toEqual({
+    years: 0,
+    days: 0,
+    hours: 2,
+    minutes: 0,
+    seconds: 0,
+    milliseconds: 0,
+    microseconds: 0,
+    nanoseconds: 0,
+  });
+  expect(parseMilliseconds(172800000)).toEqual({
+    years: 0,
+    days: 2,
+    hours: 0,
+    minutes: 0,
+    seconds: 0,
+    milliseconds: 0,
+    microseconds: 0,
+    nanoseconds: 0,
+  });
+  expect(parseMilliseconds(31536000000)).toEqual({
+    years: 1,
+    days: 0,
+    hours: 0,
+    minutes: 0,
+    seconds: 0,
+    milliseconds: 0,
+    microseconds: 0,
+    nanoseconds: 0,
+  });
+});
+
+test('parseMilliseconds should handle complex duration', () => {
+  expect(parseMilliseconds(90061234)).toEqual({
+    years: 0,
+    days: 1,
+    hours: 1,
+    minutes: 1,
+    seconds: 1,
+    milliseconds: 234,
+    microseconds: 0,
+    nanoseconds: 0,
+  });
+});
+
+test('parseMilliseconds should handle fractional milliseconds', () => {
+  expect(parseMilliseconds(1.001001)).toEqual({
+    years: 0,
+    days: 0,
+    hours: 0,
+    minutes: 0,
+    seconds: 0,
+    milliseconds: 1,
+    microseconds: 1,
+    nanoseconds: 1,
+  });
+});
+
+test('parseMilliseconds should handle zero', () => {
+  expect(parseMilliseconds(0)).toEqual({
+    years: 0,
+    days: 0,
+    hours: 0,
+    minutes: 0,
+    seconds: 0,
+    milliseconds: 0,
+    microseconds: 0,
+    nanoseconds: 0,
+  });
+});
+
+test('parseMilliseconds should handle negative duration', () => {
+  expect(parseMilliseconds(-1000)).toEqual({
+    years: -0,
+    days: -0,
+    hours: -0,
+    minutes: -0,
+    seconds: -1,
+    milliseconds: -0,
+    microseconds: -0,
+    nanoseconds: -0,
+  });
+});
+
+test('parseMilliseconds should handle negative days without overflowing into years', () => {
+  expect(parseMilliseconds(-31449600000)).toEqual({
+    years: -0,
+    days: -364,
+    hours: -0,
+    minutes: -0,
+    seconds: -0,
+    milliseconds: -0,
+    microseconds: -0,
+    nanoseconds: -0,
+  });
+});
diff --git a/superset-frontend/packages/superset-ui-core/types/intl.d.ts b/superset-frontend/packages/superset-ui-core/types/intl.d.ts
new file mode 100644
index 00000000000..6c85991c57f
--- /dev/null
+++ b/superset-frontend/packages/superset-ui-core/types/intl.d.ts
@@ -0,0 +1,73 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+declare namespace Intl {
+  class DurationFormat {
+    constructor(locale?: string | string[], options?: DurationFormatOptions);
+    format(duration: DurationObject): string;
+    formatToParts(
+      duration: DurationObject,
+    ): { type: string; value: string; unit?: string }[];
+    resolvedOptions(): ResolvedDurationFormatOptions;
+  }
+
+  interface DurationObject {
+    years?: number;
+    months?: number;
+    weeks?: number;
+    days?: number;
+    hours?: number;
+    minutes?: number;
+    seconds?: number;
+    milliseconds?: number;
+    microseconds?: number;
+    nanoseconds?: number;
+  }
+
+  interface DurationFormatOptions {
+    localeMatcher?: 'lookup' | 'best fit';
+    numberingSystem?: string;
+    style?: 'long' | 'short' | 'narrow' | 'digital';
+    years?: 'long' | 'short' | 'narrow';
+    yearsDisplay?: 'always' | 'auto';
+    months?: 'long' | 'short' | 'narrow';
+    monthsDisplay?: 'always' | 'auto';
+    weeks?: 'long' | 'short' | 'narrow';
+    weeksDisplay?: 'always' | 'auto';
+    days?: 'long' | 'short' | 'narrow';
+    daysDisplay?: 'always' | 'auto';
+    hours?: 'long' | 'short' | 'narrow' | 'numeric' | '2-digit';
+    hoursDisplay?: 'always' | 'auto';
+    minutes?: 'long' | 'short' | 'narrow' | 'numeric' | '2-digit';
+    minutesDisplay?: 'always' | 'auto';
+    seconds?: 'long' | 'short' | 'narrow' | 'numeric' | '2-digit';
+    secondsDisplay?: 'always' | 'auto';
+    milliseconds?: 'long' | 'short' | 'narrow' | 'numeric';
+    millisecondsDisplay?: 'always' | 'auto';
+    microseconds?: 'long' | 'short' | 'narrow' | 'numeric';
+    microsecondsDisplay?: 'always' | 'auto';
+    nanoseconds?: 'long' | 'short' | 'narrow' | 'numeric';
+    nanosecondsDisplay?: 'always' | 'auto';
+    fractionalDigits?: number;
+  }
+
+  interface ResolvedDurationFormatOptions extends DurationFormatOptions {
+    locale: string;
+  }
+}
diff --git a/superset-frontend/spec/helpers/setup.ts b/superset-frontend/spec/helpers/setup.ts
index 9ec6d6661fe..3d216e00af1 100644
--- a/superset-frontend/spec/helpers/setup.ts
+++ b/superset-frontend/spec/helpers/setup.ts
@@ -23,6 +23,10 @@ import React from 'react';
 import { configure as configureTestingLibrary } from '@testing-library/react';
 import { matchers } from '@emotion/jest';
 
+if (typeof Intl.DurationFormat === 'undefined') {
+  require('@formatjs/intl-durationformat/polyfill.js');
+}
+
 configureTestingLibrary({
   testIdAttribute: 'data-test',
 });
diff --git a/superset-frontend/src/features/tasks/TaskStatusIcon.tsx b/superset-frontend/src/features/tasks/TaskStatusIcon.tsx
index abb2bd99d28..702d82a0f34 100644
--- a/superset-frontend/src/features/tasks/TaskStatusIcon.tsx
+++ b/superset-frontend/src/features/tasks/TaskStatusIcon.tsx
@@ -18,10 +18,12 @@
  */
 
 import React from 'react';
+import { useSelector } from 'react-redux';
 import { useTheme, SupersetTheme } from '@apache-superset/core/theme';
 import { t } from '@apache-superset/core/translation';
 import { Icons } from '@superset-ui/core/components/Icons';
 import { Tooltip } from '@superset-ui/core/components';
+import type { RootState } from 'src/views/store';
 import { TaskStatus } from './types';
 import { formatProgressTooltip } from './timeUtils';
 
@@ -86,6 +88,7 @@ export default function TaskStatusIcon({
   exceptionType,
 }: TaskStatusIconProps) {
   const theme = useTheme();
+  const locale = useSelector((state: RootState) => state.common?.locale);
   const IconComponent = statusIcons[status];
   const label = statusLabels[status];
 
@@ -99,6 +102,7 @@ export default function TaskStatusIcon({
       progressTotal,
       progressPercent,
       durationSeconds,
+      locale,
     );
     tooltipContent = (
       <>
diff --git a/superset-frontend/src/features/tasks/timeUtils.test.ts b/superset-frontend/src/features/tasks/timeUtils.test.ts
index 3a286a4140b..0514b426852 100644
--- a/superset-frontend/src/features/tasks/timeUtils.test.ts
+++ b/superset-frontend/src/features/tasks/timeUtils.test.ts
@@ -31,7 +31,7 @@ test('formatDuration returns null for invalid inputs', () => {
 });
 
 test('formatDuration formats seconds correctly', () => {
-  expect(formatDuration(37.5)).toBe('37s');
+  expect(formatDuration(37.5)).toBe('37s 500ms');
   expect(formatDuration(1)).toBe('1s');
   expect(formatDuration(30)).toBe('30s');
 });
@@ -48,6 +48,10 @@ test('formatDuration formats hours correctly', () => {
   expect(formatDuration(7200)).toBe('2h');
 });
 
+test('formatDuration limits output to two units', () => {
+  expect(formatDuration(93784)).toBe('1d 2h');
+});
+
 test('calculateEta returns null for invalid inputs', () => {
   expect(calculateEta(null, 60)).toBeNull();
   expect(calculateEta(undefined, 60)).toBeNull();
diff --git a/superset-frontend/src/features/tasks/timeUtils.ts b/superset-frontend/src/features/tasks/timeUtils.ts
index 4a52f6f4814..bf4e2e13e85 100644
--- a/superset-frontend/src/features/tasks/timeUtils.ts
+++ b/superset-frontend/src/features/tasks/timeUtils.ts
@@ -17,32 +17,75 @@
  * under the License.
  */
 
-import prettyMs from 'pretty-ms';
+import { parseMilliseconds } from '@superset-ui/core/number-format/utils/parseMilliseconds';
 
 /**
  * Maximum ETA to display (24 hours in seconds).
  * ETAs beyond this are not shown as they're unreliable.
  */
 const MAX_ETA_SECONDS = 86400;
+const durationFormatters = new Map<string, Intl.DurationFormat>();
+
+function createDurationFormatter(locale: string): Intl.DurationFormat {
+  const normalizedLocale = locale.replace(/_/g, '-');
+
+  try {
+    return new Intl.DurationFormat(normalizedLocale, { style: 'narrow' });
+  } catch {
+    return new Intl.DurationFormat('en', { style: 'narrow' });
+  }
+}
+
+function getCachedDurationFormatter(locale?: string): Intl.DurationFormat {
+  const key = locale ?? '';
+  const formatter = durationFormatters.get(key);
+
+  if (formatter) {
+    return formatter;
+  }
+
+  const newFormatter = createDurationFormatter(locale ?? 'en');
+  durationFormatters.set(key, newFormatter);
+  return newFormatter;
+}
 
 /**
  * Format a duration in seconds to a human-readable string.
  *
  * @param seconds - Duration in seconds
+ * @param locale - Current locale
  * @returns Formatted string like "1m 30s" or "2h 15m", or null if invalid
  */
 export function formatDuration(
   seconds: number | null | undefined,
+  locale = 'en',
 ): string | null {
   if (seconds === null || seconds === undefined || seconds <= 0) {
     return null;
   }
 
-  return prettyMs(seconds * 1000, {
-    unitCount: 2,
-    secondsDecimalDigits: 0,
-    keepDecimalsOnWholeSeconds: false,
-  });
+  const durObject = parseMilliseconds(seconds * 1000);
+  const unitOrder = [
+    'years',
+    'days',
+    'hours',
+    'minutes',
+    'seconds',
+    'milliseconds',
+    'microseconds',
+    'nanoseconds',
+  ] as const;
+  const nonZeroUnits = unitOrder
+    .filter(unit => durObject[unit] > 0)
+    .slice(0, 2)
+    .reduce(
+      (obj, unit) => {
+        obj[unit] = durObject[unit];
+        return obj;
+      },
+      {} as Record<string, number>,
+    );
+  return getCachedDurationFormatter(locale).format(nonZeroUnits);
 }
 
 /**
@@ -53,11 +96,13 @@ export function formatDuration(
  *
  * @param progressPercent - Progress as a fraction (0.0 to 1.0)
  * @param durationSeconds - Time elapsed so far in seconds
+ * @param locale - Current locale
  * @returns Formatted ETA string or null if cannot be calculated
  */
 export function calculateEta(
   progressPercent: number | null | undefined,
   durationSeconds: number | null | undefined,
+  locale?: string,
 ): string | null {
   // Need both progress and duration to calculate ETA
   if (
@@ -76,19 +121,16 @@ export function calculateEta(
 
   // ETA = (elapsed / progress) * (1 - progress)
   const estimatedTotalTime = durationSeconds / progressPercent;
-  const remainingSeconds = estimatedTotalTime * (1 - progressPercent);
+  const remainingSeconds = Math.round(
+    estimatedTotalTime * (1 - progressPercent),
+  );
 
   // Only show ETA if it's reasonable (less than 24 hours)
   if (remainingSeconds <= 0 || remainingSeconds > MAX_ETA_SECONDS) {
     return null;
   }
 
-  // Use unitCount: 2 to show up to 2 units (e.g., "1m 30s" instead of just "1m")
-  // Use secondsDecimalDigits: 0 to show whole seconds (e.g., "52s" instead of "52.4s")
-  return prettyMs(remainingSeconds * 1000, {
-    unitCount: 2,
-    secondsDecimalDigits: 0,
-  });
+  return formatDuration(remainingSeconds, locale);
 }
 
 /**
@@ -105,6 +147,7 @@ export function calculateEta(
  * @param progressTotal - Total count of items to process
  * @param progressPercent - Progress as a fraction (0.0 to 1.0)
  * @param durationSeconds - Time elapsed so far in seconds (used for ETA calculation)
+ * @param locale - Current locale
  * @returns Array of lines for tooltip display
  */
 export function formatProgressTooltip(
@@ -113,6 +156,7 @@ export function formatProgressTooltip(
   progressTotal?: number | null,
   progressPercent?: number | null,
   durationSeconds?: number | null,
+  locale?: string,
 ): string[] {
   const lines: string[] = [];
   let progressPart = '';
@@ -142,7 +186,7 @@ export function formatProgressTooltip(
   }
 
   // Add ETA on a separate line if available
-  const eta = calculateEta(progressPercent, durationSeconds);
+  const eta = calculateEta(progressPercent, durationSeconds, locale);
   if (eta) {
     lines.push(`ETA: ${eta}`);
   }
diff --git a/superset-frontend/src/pages/TaskList/index.tsx b/superset-frontend/src/pages/TaskList/index.tsx
index 205dc0e3f8d..ad6f05e5c2f 100644
--- a/superset-frontend/src/pages/TaskList/index.tsx
+++ b/superset-frontend/src/pages/TaskList/index.tsx
@@ -25,6 +25,7 @@ import {
 import { useTheme } from '@apache-superset/core/theme';
 import { t } from '@apache-superset/core/translation';
 import { useMemo, useCallback, useState } from 'react';
+import { useSelector } from 'react-redux';
 import { Tooltip, Label, Modal, Checkbox } from '@superset-ui/core/components';
 import {
   CreatedInfo,
@@ -52,6 +53,7 @@ import {
 } from 'src/features/tasks/types';
 import { isUserAdmin } from 'src/dashboard/util/permissionUtils';
 import getBootstrapData from 'src/utils/getBootstrapData';
+import type { RootState } from 'src/views/store';
 
 const PAGE_SIZE = 25;
 
@@ -77,6 +79,7 @@ interface TaskListProps {
 
 function TaskList({ addDangerToast, addSuccessToast, user }: TaskListProps) {
   const theme = useTheme();
+  const locale = useSelector((state: RootState) => state.common?.locale);
 
   // Check if GTF feature flag is enabled
   if (!isFeatureEnabled(FeatureFlag.GlobalTaskFramework)) {
@@ -380,7 +383,7 @@ function TaskList({ addDangerToast, addSuccessToast, user }: TaskListProps) {
           row: {
             original: { duration_seconds },
           },
-        }: TaskCellProps) => formatDuration(duration_seconds) ?? '-',
+        }: TaskCellProps) => formatDuration(duration_seconds, locale) ?? '-',
         accessor: 'duration_seconds',
         Header: t('Duration'),
         size: 'sm',
@@ -530,7 +533,7 @@ function TaskList({ addDangerToast, addSuccessToast, user }: TaskListProps) {
         disableSortBy: true,
       },
     ],
-    [user.userId, theme, openCancelModal],
+    [user.userId, theme, locale, openCancelModal],
   );
 
   const filters: ListViewFilters = useMemo(
diff --git a/superset-frontend/src/preamble.test.ts b/superset-frontend/src/preamble.test.ts
new file mode 100644
index 00000000000..579b0c97f71
--- /dev/null
+++ b/superset-frontend/src/preamble.test.ts
@@ -0,0 +1,113 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+const mockConfigure = jest.fn();
+const mockInitFeatureFlags = jest.fn();
+const mockMakeApi = jest.fn(() => jest.fn());
+const mockSetupClient = jest.fn();
+const mockSetupColors = jest.fn();
+const mockSetupDashboardComponents = jest.fn();
+const mockSetupFormatters = jest.fn();
+const mockGetBootstrapData = jest.fn();
+const mockApplicationRoot = jest.fn(() => '/');
+const mockMakeUrl = jest.fn((url: string) => url);
+const mockDayjsLocale = jest.fn();
+
+jest.mock('@apache-superset/core/translation', () => ({
+  configure: mockConfigure,
+}));
+jest.mock('@apache-superset/core/utils', () => ({
+  logging: {
+    warn: jest.fn(),
+  },
+}));
+jest.mock('@superset-ui/core', () => ({
+  initFeatureFlags: mockInitFeatureFlags,
+  makeApi: mockMakeApi,
+}));
+jest.mock('@superset-ui/core/utils/dates', () => ({
+  extendedDayjs: {
+    locale: mockDayjsLocale,
+  },
+}));
+jest.mock('./setup/setupClient', () => ({
+  __esModule: true,
+  default: mockSetupClient,
+}));
+jest.mock('./setup/setupColors', () => ({
+  __esModule: true,
+  default: mockSetupColors,
+}));
+jest.mock('./setup/setupDashboardComponents', () => ({
+  __esModule: true,
+  default: mockSetupDashboardComponents,
+}));
+jest.mock('./setup/setupFormatters', () => ({
+  __esModule: true,
+  default: mockSetupFormatters,
+}));
+jest.mock('./utils/getBootstrapData', () => ({
+  __esModule: true,
+  applicationRoot: mockApplicationRoot,
+  default: mockGetBootstrapData,
+}));
+jest.mock('./utils/pathUtils', () => ({
+  makeUrl: mockMakeUrl,
+}));
+jest.mock('./hooks/useLocale', () => ({}));
+
+const bootstrapData = (locale?: string) => ({
+  common: {
+    d3_format: {},
+    d3_time_format: {},
+    extra_categorical_color_schemes: [],
+    extra_sequential_color_schemes: [],
+    feature_flags: {},
+    locale,
+  },
+  user: {
+    isActive: false,
+  },
+});
+
+async function runPreamble() {
+  const { default: initPreamble } = await import('./preamble');
+  await initPreamble();
+}
+
+beforeEach(() => {
+  jest.clearAllMocks();
+  jest.resetModules();
+});
+
+test('passes bootstrap locale to setupFormatters', async () => {
+  mockGetBootstrapData.mockReturnValue(bootstrapData('pt_BR'));
+
+  await runPreamble();
+
+  expect(mockSetupFormatters).toHaveBeenCalledWith({}, {}, 'pt_BR');
+});
+
+test('falls back to en when passing locale to setupFormatters', async () => {
+  mockGetBootstrapData.mockReturnValue(bootstrapData());
+
+  await runPreamble();
+
+  expect(mockSetupFormatters).toHaveBeenCalledWith({}, {}, 'en');
+});
diff --git a/superset-frontend/src/preamble.ts b/superset-frontend/src/preamble.ts
index 57874fb537e..cc304da84d3 100644
--- a/superset-frontend/src/preamble.ts
+++ b/superset-frontend/src/preamble.ts
@@ -53,10 +53,12 @@ export default function initPreamble(): Promise<void> {
 
     // Grab initial bootstrap data
     const bootstrapData = getBootstrapData();
+    const lang = bootstrapData.common.locale || 'en';
 
     setupFormatters(
       bootstrapData.common.d3_format,
       bootstrapData.common.d3_time_format,
+      lang,
     );
 
     // Setup SupersetClient early so we can fetch language pack
@@ -64,7 +66,6 @@ export default function initPreamble(): Promise<void> {
 
     // Load language pack before rendering
     // Use native fetch to avoid race condition with SupersetClient initialization
-    const lang = bootstrapData.common.locale || 'en';
     if (lang !== 'en') {
       const abortController = new AbortController();
       const timeoutId = window.setTimeout(() => {
diff --git a/superset-frontend/src/setup/setupFormatters.ts b/superset-frontend/src/setup/setupFormatters.ts
index 1f0d17ee2b4..c8d5dc0ef11 100644
--- a/superset-frontend/src/setup/setupFormatters.ts
+++ b/superset-frontend/src/setup/setupFormatters.ts
@@ -36,6 +36,7 @@ import { TimeLocaleDefinition } from 'd3-time-format';
 export default function setupFormatters(
   d3NumberFormat: Partial<FormatLocaleDefinition>,
   d3TimeFormat: Partial<TimeLocaleDefinition>,
+  locale: string,
 ) {
   getNumberFormatterRegistry()
     .setD3Format(d3NumberFormat)
@@ -73,14 +74,22 @@ export default function setupFormatters(
     .registerValue('$,0', getNumberFormatter('$,.4f'))
     .registerValue('$,0f', getNumberFormatter('$,.4f'))
     .registerValue('$,.f', getNumberFormatter('$,.4f'))
-    .registerValue('DURATION', createDurationFormatter())
+    .registerValue('DURATION', createDurationFormatter({ locale }))
     .registerValue(
       'DURATION_SUB',
-      createDurationFormatter({ formatSubMilliseconds: true }),
+      createDurationFormatter({
+        locale,
+        formatSubMilliseconds: true,
+      }),
     )
     .registerValue(
       'DURATION_COL',
-      createDurationFormatter({ colonNotation: true }),
+      createDurationFormatter({
+        locale,
+        style: 'digital',
+        formatSubMilliseconds: true,
+        fractionalDigits: 1,
+      }),
     )
     .registerValue('MEMORY_DECIMAL', createMemoryFormatter({ binary: false }))
     .registerValue('MEMORY_BINARY', createMemoryFormatter({ binary: true }))
diff --git a/superset/translations/ar/LC_MESSAGES/messages.po b/superset/translations/ar/LC_MESSAGES/messages.po
index 1701821bfb8..09489efa8e8 100644
--- a/superset/translations/ar/LC_MESSAGES/messages.po
+++ b/superset/translations/ar/LC_MESSAGES/messages.po
@@ -24,7 +24,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version:  \n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2024-07-14 15:10+0300\n"
 "Last-Translator: Abdalrahim G. Fakhouri <ab...@yahoo.com>\n"
 "Language: ar\n"
@@ -34,7 +34,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1256,6 +1256,10 @@ msgstr "إضافة منسق لون جديد"
 msgid "Add new formatter"
 msgstr "إضافة منسق جديد"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr " لإضافة أعمدة محسوبة"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "إضافة فلاتر وتعديلها"
@@ -1813,7 +1817,7 @@ msgstr "حدث خطأ أثناء جلب قيم المخطط: %s"
 msgid "An error occurred while fetching semantic layer types"
 msgstr "حدث خطأ أثناء جلب قوالب CSS المتوفرة"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "حدث خطأ أثناء جلب قيم المخطط: %s"
 
@@ -1884,7 +1888,7 @@ msgstr "حدث خطأ أثناء تحليل المفتاح."
 msgid "An error occurred while pruning logs "
 msgstr "حدث خطأ أثناء تقليم السجلات "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "حدث خطأ أثناء عرض المرئيات: %s"
 
@@ -2434,7 +2438,7 @@ msgstr "منفذ قاعدة البيانات"
 msgid "Base height"
 msgstr "ارتفاع الرسم البياني"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "نمط خريطة الطبقة الأساسية. راجع وثائق Mapbox: %s"
 
@@ -4249,6 +4253,13 @@ msgstr "SQL مخصص"
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr "لم يتم تمكين مقاييس SQL المخصصة المخصصة لمجموعة البيانات هذه"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "لا يمكن أن تحتوي حقول SQL المخصصة على استعلامات فرعية."
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "لا يمكن أن تحتوي حقول SQL المخصصة على استعلامات فرعية."
 
@@ -5779,7 +5790,7 @@ msgstr ""
 "نانوثانية)"
 
 #, fuzzy
-msgid "Duration in ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
 msgstr "المدة بالمللي ثانية (66000 => 1 م 6 ثانية)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
@@ -9465,7 +9476,7 @@ msgstr ""
 msgid "No table columns"
 msgstr "لا توجد أعمدة جدول"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "لا %s حتى الآن"
 
@@ -9558,6 +9569,10 @@ msgstr "لم يتم تعريفه"
 msgid "Not equal to (≠)"
 msgstr "لا يساوي (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "لم يتم العثور على الرسم البياني"
+
 msgid "Not in"
 msgstr "ليس في"
 
@@ -10613,6 +10628,12 @@ msgstr "تم إهماله"
 msgid "Proportional"
 msgstr "نسبي"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "منشورة"
 
@@ -10876,9 +10897,6 @@ msgstr "التصفية المسبقة"
 msgid "Registration date"
 msgstr "تاريخ البداية"
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -11393,6 +11411,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "مختبر إس كيو إل"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 #, fuzzy
 msgid "SQL Lab queries"
 msgstr "الاستعلامات المحفوظة"
@@ -15609,6 +15633,9 @@ msgstr "اكتب قيمة"
 msgid "Type is required"
 msgstr "النوع مطلوب"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -15769,6 +15796,10 @@ msgstr "التراجع عن الإجراء"
 msgid "Undo?"
 msgstr "التراجع؟"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr "حدث خطأ غير متوقع، يرجى التحقق من سجلاتك للحصول على التفاصيل"
+
 msgid "Unexpected error"
 msgstr "خطأ غير متوقع"
 
@@ -16707,6 +16738,10 @@ msgstr "ما إذا كان سيتم عرض القيم الدنيا والقصو
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "ما إذا كان سيتم عرض القيم الدنيا والقصوى للمحور Y"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "ما إذا كان سيتم عرض خط الاتجاه"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "ما إذا كان سيتم عرض القيم العددية داخل الخلايا"
 
@@ -18269,6 +18304,10 @@ msgstr "قيمة تصاعدية"
 msgid "value descending"
 msgstr "قيمة تنازلي"
 
+#, fuzzy
+msgid "valuename"
+msgstr "اسم الجدول"
+
 msgid "var"
 msgstr "VAR"
 
@@ -18318,25 +18357,8 @@ msgstr ""
 msgid "zoom area"
 msgstr ""
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
+msgid "© Layer attribution"
 msgstr ""
 
-msgid "© Layer attribution"
+msgid "№"
 msgstr ""
diff --git a/superset/translations/ca/LC_MESSAGES/messages.po b/superset/translations/ca/LC_MESSAGES/messages.po
index 1ebb89c5253..1c04ae40a87 100644
--- a/superset/translations/ca/LC_MESSAGES/messages.po
+++ b/superset/translations/ca/LC_MESSAGES/messages.po
@@ -21,7 +21,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Superset VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2025-06-27 12:56+0200\n"
 "Last-Translator: FULL NAME <EM...@ADDRESS>\n"
 "Language: ca\n"
@@ -30,7 +30,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1250,6 +1250,10 @@ msgstr "Afegir nou formatador de color"
 msgid "Add new formatter"
 msgstr "Afegir nou formatador"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr " per afegir columnes calculades"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "Afegir o editar filtres"
@@ -1827,7 +1831,7 @@ msgstr "S'ha produït un error mentre es recuperaven els valors de l'esquema: %s
 msgid "An error occurred while fetching semantic layer types"
 msgstr "S'ha produït un error mentre es recuperaven les plantilles CSS disponibles"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "S'ha produït un error mentre es recuperaven els valors de l'esquema: %s"
 
@@ -1902,7 +1906,7 @@ msgstr "S'ha produït un error mentre s'analitzava la clau."
 msgid "An error occurred while pruning logs "
 msgstr "S'ha produït un error mentre es netejaven els registres "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "S'ha produït un error mentre es renderitzava la visualització: %s"
 
@@ -2455,7 +2459,7 @@ msgstr "Exponent base"
 msgid "Base height"
 msgstr "Alçada base"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "Estil de mapa de capa base. Consulta la documentació de Mapbox: %s"
 
@@ -4250,6 +4254,13 @@ msgstr ""
 "Les mètriques SQL ad-hoc personalitzades no estan habilitades per a "
 "aquest conjunt de dades"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "Els camps SQL personalitzats no poden contenir sub-consultes."
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "Els camps SQL personalitzats no poden contenir sub-consultes."
 
@@ -5720,8 +5731,8 @@ msgstr "Duració en ms (1.40008 => 1ms 400µs 80ns)"
 msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr "Duració en ms (100.40008 => 100ms 400µs 80ns)"
 
-msgid "Duration in ms (10500 => 0:10.5)"
-msgstr "Duració en ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
+msgstr "Duració en ms (10500 => 0:00:10.5)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
 msgstr "Duració en ms (66000 => 1m 6s)"
@@ -9369,7 +9380,7 @@ msgstr ""
 msgid "No table columns"
 msgstr "Cap columna de taula"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "Cap %s encara"
 
@@ -9461,6 +9472,10 @@ msgstr "No definit"
 msgid "Not equal to (≠)"
 msgstr "No igual a (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "Gràfic no trobat"
+
 msgid "Not in"
 msgstr "No en"
 
@@ -10526,6 +10541,12 @@ msgstr "ID del Projecte"
 msgid "Proportional"
 msgstr "Proporcional"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "Publicat"
 
@@ -10788,9 +10809,6 @@ msgstr "Pre-filtre"
 msgid "Registration date"
 msgstr "Data d'inici"
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -11296,6 +11314,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL Lab"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 msgid "SQL Lab queries"
 msgstr "Consultes del SQL Lab"
 
@@ -15597,6 +15621,9 @@ msgstr "Escriu un valor"
 msgid "Type is required"
 msgstr "El tipus és obligatori"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -15760,6 +15787,12 @@ msgstr "Desfer l'acció"
 msgid "Undo?"
 msgstr "Desfer?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr ""
+"Ha ocorregut un error inesperat, si us plau comprova els teus logs per "
+"detalls"
+
 msgid "Unexpected error"
 msgstr "Error inesperat"
 
@@ -16698,6 +16731,10 @@ msgstr "Si mostrar els valors mínims i màxims de l'eix X"
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "Si mostrar els valors mínims i màxims de l'eix Y"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Si mostrar la línia de tendència"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "Si mostrar els valors numèrics dins les cel·les"
 
@@ -18263,6 +18300,10 @@ msgstr "valor ascendent"
 msgid "value descending"
 msgstr "valor descendent"
 
+#, fuzzy
+msgid "valuename"
+msgstr "Nom de taula"
+
 msgid "var"
 msgstr "var"
 
@@ -18311,25 +18352,8 @@ msgstr ""
 msgid "zoom area"
 msgstr "àrea de zoom"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
-msgstr ""
-
 msgid "© Layer attribution"
 msgstr "© Atribució de capa"
+
+msgid "№"
+msgstr ""
diff --git a/superset/translations/cs/LC_MESSAGES/messages.po b/superset/translations/cs/LC_MESSAGES/messages.po
index efdbaeb8eb9..b6abe64fe6c 100644
--- a/superset/translations/cs/LC_MESSAGES/messages.po
+++ b/superset/translations/cs/LC_MESSAGES/messages.po
@@ -18,7 +18,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Superset VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2016-05-02 08:49-0700\n"
 "Last-Translator: Jan Šmejkal <ja...@orgis.cz>\n"
 "Language: cs\n"
@@ -28,7 +28,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1254,6 +1254,10 @@ msgstr "Přidat nový formátovač barev"
 msgid "Add new formatter"
 msgstr "Přidat nový formátovač"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr " pro přidání počítaných sloupců"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "Přidat nebo upravit ovládací prvky zobrazení"
@@ -1814,7 +1818,7 @@ msgstr "Při načítání hodnot schématu došlo k chybě: %s"
 msgid "An error occurred while fetching semantic layer types"
 msgstr "Při načítání dostupných témat došlo k chybě"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "Při načítání hodnot schématu došlo k chybě: %s"
 
@@ -1887,7 +1891,7 @@ msgstr "Při parsování klíče došlo k chybě."
 msgid "An error occurred while pruning logs "
 msgstr "Při promazávání protokolů došlo k chybě "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "Při vykreslování vizualizace došlo k chybě: %s"
 
@@ -2447,7 +2451,7 @@ msgstr "Exponent základu"
 msgid "Base height"
 msgstr "Výška základu"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "Styl mapy základní vrstvy. Viz dokumentaci Mapbox: %s"
 
@@ -4227,6 +4231,13 @@ msgstr "Vlastní SQL"
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr "Vlastní SQL ad-hoc metriky nejsou pro tuto sadu dat povoleny"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "Vlastní pole SQL nemohou obsahovat poddotazy."
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "Vlastní pole SQL nemohou obsahovat poddotazy."
 
@@ -5714,8 +5725,8 @@ msgstr "Trvání v ms (1.40008 => 1ms 400µs 80ns)"
 msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr "Trvání v ms (100.40008 => 100ms 400µs 80ns)"
 
-msgid "Duration in ms (10500 => 0:10.5)"
-msgstr "Trvání v ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
+msgstr "Trvání v ms (10500 => 0:00:10.5)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
 msgstr "Trvání v ms (66000 => 1m 6s)"
@@ -9357,7 +9368,7 @@ msgstr ""
 msgid "No table columns"
 msgstr "Žádné sloupce tabulky"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "Zatím žádné %s"
 
@@ -9446,6 +9457,10 @@ msgstr "Nedefinováno"
 msgid "Not equal to (≠)"
 msgstr "Nerovná se (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "Graf nenalezen"
+
 msgid "Not in"
 msgstr "Není v"
 
@@ -10500,6 +10515,12 @@ msgstr "ID projektu"
 msgid "Proportional"
 msgstr "Proporcionální"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "Zveřejněno"
 
@@ -10760,9 +10781,6 @@ msgstr "Registrovat"
 msgid "Registration date"
 msgstr "Datum registrace"
 
-msgid "Registration hash"
-msgstr "Hash registrace"
-
 msgid "Registration successful"
 msgstr "Registrace úspěšná"
 
@@ -11269,6 +11287,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL Lab"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 msgid "SQL Lab queries"
 msgstr "Dotazy SQL Labu"
 
@@ -15524,6 +15548,9 @@ msgstr "Napište hodnotu"
 msgid "Type is required"
 msgstr "Typ je povinný"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr "Typ grafu pro zobrazení ve sparkline"
 
@@ -15687,6 +15714,12 @@ msgstr "Vrátit akci zpět"
 msgid "Undo?"
 msgstr "Zpět?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr ""
+"Došlo k neočekávané chybě, zkontrolujte prosím své protokoly pro "
+"podrobnosti"
+
 msgid "Unexpected error"
 msgstr "Neočekávaná chyba"
 
@@ -16645,6 +16678,10 @@ msgstr "Zda zobrazit minimální a maximální hodnoty osy X"
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "Zda zobrazit minimální a maximální hodnoty osy Y"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Zda zobrazit trendovou čáru"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "Zda zobrazit číselné hodnoty v buňkách"
 
@@ -18204,6 +18241,10 @@ msgstr "hodnota vzestupně"
 msgid "value descending"
 msgstr "hodnota sestupně"
 
+#, fuzzy
+msgid "valuename"
+msgstr "Název tabulky"
+
 msgid "var"
 msgstr "var"
 
@@ -18252,25 +18293,8 @@ msgstr "your-project-1234-a1"
 msgid "zoom area"
 msgstr "oblast přiblížení"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
-msgstr ""
-
 msgid "© Layer attribution"
 msgstr "© Atribuce vrstvy"
+
+msgid "№"
+msgstr ""
diff --git a/superset/translations/de/LC_MESSAGES/messages.po b/superset/translations/de/LC_MESSAGES/messages.po
index e3904578546..79beed0e360 100644
--- a/superset/translations/de/LC_MESSAGES/messages.po
+++ b/superset/translations/de/LC_MESSAGES/messages.po
@@ -18,7 +18,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2023-04-07 19:45+0200\n"
 "Last-Translator: Holger Bruch <ho...@wattbewerb.de>\n"
 "Language: de\n"
@@ -27,7 +27,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1258,6 +1258,10 @@ msgstr "Neuen Farbformatierer hinzufügen"
 msgid "Add new formatter"
 msgstr "Neuen Formatierer hinzufügen"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr ", um berechnete Spalten hinzuzufügen"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "Hinzufügen und Bearbeiten von Filtern"
@@ -1831,7 +1835,7 @@ msgstr "Beim Abrufen von Schemawerten ist ein Fehler aufgetreten: %s"
 msgid "An error occurred while fetching semantic layer types"
 msgstr "Beim Abrufen verfügbarer CSS-Vorlagen ist ein Fehler aufgetreten"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "Beim Abrufen von Schemawerten ist ein Fehler aufgetreten: %s"
 
@@ -1906,7 +1910,7 @@ msgstr "Beim Parsen des Schlüssels ist ein Fehler aufgetreten."
 msgid "An error occurred while pruning logs "
 msgstr "Beim Kürzen von Protokollen ist ein Fehler aufgetreten "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "Bei der Darstellung dieser Visualisierung ist ein Fehler aufgetreten: %s"
 
@@ -2469,7 +2473,7 @@ msgstr "Datenbankport"
 msgid "Base height"
 msgstr "Diagrammhöhe"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "Kartenstil der Basisebene. Siehe Mapbox-Dokumentation: %s"
 
@@ -4313,6 +4317,13 @@ msgstr ""
 "Benutzerdefinierte SQL-Ad-hoc-Metriken sind für diesen Datasatz nicht "
 "aktiviert"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "Benutzerdefinierte SQL-Felder dürfen keine Unterabfragen enthalten."
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "Benutzerdefinierte SQL-Felder dürfen keine Unterabfragen enthalten."
 
@@ -5807,7 +5818,7 @@ msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr "Dauer in ms (100,40008 => 100ms 400μs 80ns)"
 
 #, fuzzy
-msgid "Duration in ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
 msgstr "Dauer in ms (66000 => 1m 6s)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
@@ -9528,7 +9539,7 @@ msgstr ""
 msgid "No table columns"
 msgstr "Keine Tabellenspalten"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "Noch keine %s"
 
@@ -9621,6 +9632,10 @@ msgstr "Nicht definiert"
 msgid "Not equal to (≠)"
 msgstr "Ist nicht gleich (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "Diagramm nicht gefunden"
+
 msgid "Not in"
 msgstr "Nicht in"
 
@@ -10721,6 +10736,12 @@ msgstr "Veraltet"
 msgid "Proportional"
 msgstr "Proportional"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "Veröffentlicht"
 
@@ -10984,9 +11005,6 @@ msgstr "Vorfilter"
 msgid "Registration date"
 msgstr "Startdatum"
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -11502,6 +11520,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL Lab"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 #, fuzzy
 msgid "SQL Lab queries"
 msgstr "gespeicherte Abfragen"
@@ -15892,6 +15916,9 @@ msgstr "Geben Sie einen Wert ein"
 msgid "Type is required"
 msgstr "Typ ist erforderlich"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -16059,6 +16086,12 @@ msgstr "Aktion rückgängig machen"
 msgid "Undo?"
 msgstr "Rückgängig machen?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr ""
+"Unerwarteter Fehler aufgetreten, bitte überprüfen Sie Ihre Protokolle auf"
+" Details"
+
 msgid "Unexpected error"
 msgstr "Unerwarteter Fehler"
 
@@ -17056,6 +17089,10 @@ msgstr "Ob die Min- und Max-Werte der X-Achse angezeigt werden sollen"
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "Ob die Min- und Max-Werte der Y-Achse angezeigt werden sollen"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Ob die Trendlinie angezeigt werden soll"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "Ob die numerischen Werte innerhalb der Zellen angezeigt werden sollen"
 
@@ -18645,6 +18682,10 @@ msgstr "Wert aufsteigend"
 msgid "value descending"
 msgstr "Wert absteigend"
 
+#, fuzzy
+msgid "valuename"
+msgstr "Tabellenname"
+
 msgid "var"
 msgstr "var"
 
@@ -18693,25 +18734,8 @@ msgstr ""
 msgid "zoom area"
 msgstr "Zoombereich"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
+msgid "© Layer attribution"
 msgstr ""
 
-msgid "© Layer attribution"
+msgid "№"
 msgstr ""
diff --git a/superset/translations/en/LC_MESSAGES/messages.po b/superset/translations/en/LC_MESSAGES/messages.po
index c356a2e31d7..39cb3dacb0b 100644
--- a/superset/translations/en/LC_MESSAGES/messages.po
+++ b/superset/translations/en/LC_MESSAGES/messages.po
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2016-05-02 08:49-0700\n"
 "Last-Translator: FULL NAME <EM...@ADDRESS>\n"
 "Language: en\n"
@@ -26,7 +26,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1105,6 +1105,9 @@ msgstr ""
 msgid "Add new formatter"
 msgstr ""
 
+msgid "Add numbered column"
+msgstr ""
+
 msgid "Add or edit display controls"
 msgstr ""
 
@@ -3832,6 +3835,12 @@ msgstr ""
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr ""
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+msgid "Custom SQL fields cannot contain set operations."
+msgstr ""
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr ""
 
@@ -4541,7 +4550,7 @@ msgstr ""
 msgid "Delete Role?"
 msgstr ""
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Delete Semantic Layer?"
 msgstr ""
 
@@ -5146,7 +5155,7 @@ msgstr ""
 msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr ""
 
-msgid "Duration in ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
 msgstr ""
 
 msgid "Duration in ms (66000 => 1m 6s)"
@@ -6165,7 +6174,7 @@ msgstr ""
 msgid "Filter only displays values relevant to selections made in other filters."
 msgstr ""
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Filter options"
 msgstr ""
 
@@ -8593,6 +8602,9 @@ msgstr ""
 msgid "Not equal to (≠)"
 msgstr ""
 
+msgid "Not found"
+msgstr ""
+
 msgid "Not in"
 msgstr ""
 
@@ -9553,6 +9565,12 @@ msgstr ""
 msgid "Proportional"
 msgstr ""
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr ""
 
@@ -9717,7 +9735,7 @@ msgstr ""
 msgid "Recipients are separated by \",\" or \";\""
 msgstr ""
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Records"
 msgstr ""
 
@@ -9798,9 +9816,6 @@ msgstr ""
 msgid "Registration date"
 msgstr ""
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -10268,6 +10283,12 @@ msgstr ""
 msgid "SQL Lab"
 msgstr ""
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 msgid "SQL Lab queries"
 msgstr ""
 
@@ -14015,6 +14036,9 @@ msgstr ""
 msgid "Type is required"
 msgstr ""
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -14152,6 +14176,9 @@ msgstr ""
 msgid "Undo?"
 msgstr ""
 
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr ""
+
 msgid "Unexpected error"
 msgstr ""
 
@@ -14982,6 +15009,9 @@ msgstr ""
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr ""
 
+msgid "Whether to display the numbered column"
+msgstr ""
+
 msgid "Whether to display the numerical values within the cells"
 msgstr ""
 
@@ -16413,6 +16443,9 @@ msgstr ""
 msgid "value descending"
 msgstr ""
 
+msgid "valuename"
+msgstr ""
+
 msgid "var"
 msgstr ""
 
@@ -16461,25 +16494,8 @@ msgstr ""
 msgid "zoom area"
 msgstr ""
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
+msgid "© Layer attribution"
 msgstr ""
 
-msgid "© Layer attribution"
+msgid "№"
 msgstr ""
diff --git a/superset/translations/es/LC_MESSAGES/messages.po b/superset/translations/es/LC_MESSAGES/messages.po
index b564abf5f07..8bc01a868e7 100644
--- a/superset/translations/es/LC_MESSAGES/messages.po
+++ b/superset/translations/es/LC_MESSAGES/messages.po
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2016-05-02 08:49-0700\n"
 "Last-Translator: FULL NAME <EM...@ADDRESS>\n"
 "Language: es\n"
@@ -26,7 +26,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1269,6 +1269,10 @@ msgstr "Añadir nuevo formateador de color"
 msgid "Add new formatter"
 msgstr "Añadir nuevo formateador"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr " para añadir columnas calculadas"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "Añadir o editar filtros"
@@ -1850,7 +1854,7 @@ msgstr "Se ha producido un error al recuperar los valores del esquema: %s"
 msgid "An error occurred while fetching semantic layer types"
 msgstr "Se ha producido un error al recuperar las plantillas CSS disponibles"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "Se ha producido un error al recuperar los valores del esquema: %s"
 
@@ -1925,7 +1929,7 @@ msgstr "Se ha producido un error al analizar la clave."
 msgid "An error occurred while pruning logs "
 msgstr "Se ha producido un error al depurar los registros "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "Se ha producido un error al renderizar la visualización: %s"
 
@@ -2512,7 +2516,7 @@ msgstr "Exponente de la base"
 msgid "Base height"
 msgstr "Altura de la base"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "Estilo del mapa de la capa base. Consulta la documentación de Mapbox: %s"
 
@@ -4383,6 +4387,13 @@ msgstr ""
 "Las métricas «ad hoc» SQL personalizadas no están habilitadas para este "
 "conjunto de datos"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "Los campos SQL personalizados no pueden contener subconsultas."
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "Los campos SQL personalizados no pueden contener subconsultas."
 
@@ -5919,8 +5930,8 @@ msgstr "Duración en ms (1,40008 => 1 ms 400 µs 80 ns)"
 msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr "Duración en ms (100.40008 => 100 ms 400 µs 80 ns)"
 
-msgid "Duration in ms (10500 => 0:10.5)"
-msgstr "Duración en ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
+msgstr "Duración en ms (10500 => 0:00:10.5)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
 msgstr "Duración en ms (66 000 => 1 m 6 s)"
@@ -9727,7 +9738,7 @@ msgstr ""
 msgid "No table columns"
 msgstr "No hay columnas de la tabla"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "Todavía no hay %s"
 
@@ -9819,6 +9830,10 @@ msgstr "Sin definir"
 msgid "Not equal to (≠)"
 msgstr "No es igual a (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "No se ha encontrado ningún gráfico"
+
 msgid "Not in"
 msgstr "No está en"
 
@@ -10907,6 +10922,12 @@ msgstr "ID del proyecto"
 msgid "Proportional"
 msgstr "Proporcional"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "Publicado"
 
@@ -11170,11 +11191,6 @@ msgstr "Filtro previo"
 msgid "Registration date"
 msgstr "Fecha de inicio"
 
-# Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: fr, ru]
-#, fuzzy
-msgid "Registration hash"
-msgstr "Hash de registro"
-
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: fr, ru]
 #, fuzzy
 msgid "Registration successful"
@@ -11706,6 +11722,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL Lab"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 msgid "SQL Lab queries"
 msgstr "Consultas de SQL Lab"
 
@@ -16219,6 +16241,9 @@ msgstr "Introduce un valor"
 msgid "Type is required"
 msgstr "El tipo es obligatorio"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: fr, ru]
 #, fuzzy
 msgid "Type of chart to display in sparkline"
@@ -16399,6 +16424,12 @@ msgstr "Deshacer la acción"
 msgid "Undo?"
 msgstr "¿Deshacer?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr ""
+"Se ha producido un error inesperado; comprueba tus registros para obtener"
+" más información"
+
 msgid "Unexpected error"
 msgstr "Error inesperado"
 
@@ -17393,6 +17424,10 @@ msgstr "Si se deben mostrar los valores mínimo y máximo del eje X"
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "Si se deben mostrar los valores mínimo y máximo del eje Y"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Si se debe mostrar la línea de tendencia"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "Si se deben mostrar los valores numéricos dentro de las celdas"
 
@@ -18986,6 +19021,10 @@ msgstr "valor ascendente"
 msgid "value descending"
 msgstr "valor descendente"
 
+#, fuzzy
+msgid "valuename"
+msgstr "Nombre de la tabla"
+
 msgid "var"
 msgstr "var."
 
@@ -19036,25 +19075,8 @@ msgstr "your-project-1234-a1"
 msgid "zoom area"
 msgstr "área del «zoom»"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
-msgstr ""
-
 msgid "© Layer attribution"
 msgstr "© Atribución de la capa"
+
+msgid "№"
+msgstr ""
diff --git a/superset/translations/fa/LC_MESSAGES/messages.po b/superset/translations/fa/LC_MESSAGES/messages.po
index 55a12241a87..80e3de95092 100644
--- a/superset/translations/fa/LC_MESSAGES/messages.po
+++ b/superset/translations/fa/LC_MESSAGES/messages.po
@@ -21,7 +21,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Superset VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2024-10-20 00:07+0330\n"
 "Last-Translator: Emad Rad <co...@gmail.com>\n"
 "Language: fa\n"
@@ -30,7 +30,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1224,6 +1224,10 @@ msgstr "فرمت‌کننده رنگ جدیدی اضافه کنید."
 msgid "Add new formatter"
 msgstr "فرمت‌کننده جدید اضافه کن"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr "برای اضافه کردن ستون‌های محاسبه‌شده"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "فیلترها را اضافه و ویرایش کنید"
@@ -1773,7 +1777,7 @@ msgstr "در حین دریافت ارزش‌های طرح خطایی رخ داد
 msgid "An error occurred while fetching semantic layer types"
 msgstr "در هنگام بارگیری الگوهای CSS موجود یک خطا رخ داد"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "در حین دریافت ارزش‌های طرح خطایی رخ داد: %s"
 
@@ -1844,7 +1848,7 @@ msgstr "یک خطا در حین تجزیه کلید رخ داد."
 msgid "An error occurred while pruning logs "
 msgstr "در حین قطع کردن گزارش‌ها خطایی رخ داد"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "یک خطا در هنگام رسم تجسم رخ داده است: %s"
 
@@ -2401,7 +2405,7 @@ msgstr "پورت پایگاه داده"
 msgid "Base height"
 msgstr "ارتفاع نمودار"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "سبک نقشه لایه پایه. به مستندات Mapbox مراجعه کنید: %s"
 
@@ -4194,6 +4198,13 @@ msgstr "SQL سفارشی"
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr "متریک‌های SQL سفارشی ad-hoc برای این مجموعه داده فعال نیستند."
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "فیلدهای SQL سفارشی نمی‌توانند شامل زیرکوئریها باشند."
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "فیلدهای SQL سفارشی نمی‌توانند شامل زیرکوئریها باشند."
 
@@ -5667,7 +5678,7 @@ msgstr ""
 " نانوثانیه)"
 
 #, fuzzy
-msgid "Duration in ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
 msgstr "مدت زمان به میلی‌ثانیه (۶۶۰۰۰ => ۱د ۶ث)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
@@ -9342,7 +9353,7 @@ msgstr ""
 msgid "No table columns"
 msgstr "هیچ ستونی در جدول وجود ندارد."
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "هنوز هیچ %s وجود ندارد"
 
@@ -9433,6 +9444,10 @@ msgstr "تعریف نشده است"
 msgid "Not equal to (≠)"
 msgstr "نابرابر با (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "نمودار یافت نشد"
+
 msgid "Not in"
 msgstr "نه در"
 
@@ -10490,6 +10505,12 @@ msgstr "منسوخ شده"
 msgid "Proportional"
 msgstr "تناسبی"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "منتشر شده"
 
@@ -10753,9 +10774,6 @@ msgstr "پیش‌فیلتر"
 msgid "Registration date"
 msgstr "تاریخ شروع"
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -11259,6 +11277,12 @@ msgstr "اس کیو ال"
 msgid "SQL Lab"
 msgstr "آزمایشگاه SQL"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 #, fuzzy
 msgid "SQL Lab queries"
 msgstr "کوئری‌های ذخیره‌شده"
@@ -15512,6 +15536,9 @@ msgstr "یک مقدار وارد کنید"
 msgid "Type is required"
 msgstr "نوع الزامی است"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -15670,6 +15697,12 @@ msgstr "عملیات را لغو کنید"
 msgid "Undo?"
 msgstr "بازگردانی؟"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr ""
+"خطای غیرمنتظره‌ای رخ داده است، لطفاً لاگ‌های خود را برای جزئیات بررسی "
+"کنید."
+
 msgid "Unexpected error"
 msgstr "خطای غیرمنتظره"
 
@@ -16621,6 +16654,10 @@ msgstr "آیا باید مقادیر حداقل و حداکثر محور X نم
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "آیا باید مقادیر حداقل و حداکثر محور Y نمایش داده شود؟"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "آیا خط روند نمایش داده شود؟"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "آیا باید مقادیر عددی را درون سلول‌ها نمایش داد؟"
 
@@ -18192,6 +18229,10 @@ msgstr "مقدار صعودی"
 msgid "value descending"
 msgstr "مقدار نزولی"
 
+#, fuzzy
+msgid "valuename"
+msgstr "نام جدول"
+
 msgid "var"
 msgstr "متغیر"
 
@@ -18240,25 +18281,8 @@ msgstr ""
 msgid "zoom area"
 msgstr "منطقه‌ی زوم"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
+msgid "© Layer attribution"
 msgstr ""
 
-msgid "© Layer attribution"
+msgid "№"
 msgstr ""
diff --git a/superset/translations/fi/LC_MESSAGES/messages.po b/superset/translations/fi/LC_MESSAGES/messages.po
index e8e6260966c..6fcc301abba 100644
--- a/superset/translations/fi/LC_MESSAGES/messages.po
+++ b/superset/translations/fi/LC_MESSAGES/messages.po
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Superset VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EM...@ADDRESS>\n"
 "Language: fi\n"
@@ -26,7 +26,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ca, cs, de,
 # es, fa, fr, ja, lv, mi, pt_BR, ru, sk, sl, uk]
@@ -2023,6 +2023,12 @@ msgstr "Lisää uusi värimuotoilija"
 msgid "Add new formatter"
 msgstr "Lisää uusi muotoilija"
 
+# Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
+# de, es, fa, fr, ja, lv, mi, nl, ru, sk, sl, uk]
+#, fuzzy
+msgid "Add numbered column"
+msgstr " lisätäksesi laskettuja sarakkeita"
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: fr, ja, lv,
 # ru, sk, uk]
 #, fuzzy
@@ -3015,7 +3021,7 @@ msgstr "Käytettävissä olevien teemojen hakemisessa tapahtui virhe"
 
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, it, ja, lv, mi, nl, pt, pt_BR, ru, sk, sl, uk, zh, zh_TW]
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "Skeeman arvojen hakemisessa tapahtui virhe: %s"
 
@@ -3140,7 +3146,7 @@ msgstr "Lokien siistimisen aikana tapahtui virhe "
 
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, it, ja, lv, mi, nl, pt, pt_BR, ru, sk, sl, uk, zh, zh_TW]
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "Visualisoinnin renderöinnin aikana tapahtui virhe: %s"
 
@@ -4152,7 +4158,7 @@ msgstr "Pohjan korkeus"
 
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, ja, lv, mi, nl, pl, ru, sk, sl, uk]
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "Peruskerroksen karttatyyli. Katso Mapbox-dokumentaatio: %s"
 
@@ -7406,6 +7412,15 @@ msgstr "Mukautettu SQL"
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr "Mukautetut SQL-ad-hoc-mittarit eivät ole käytössä tässä tietojoukossa"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+# Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
+# de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, uk]
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "Mukautetut SQL-kentät eivät voi sisältää alikyselyjä."
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, uk]
 #, fuzzy
@@ -9959,8 +9974,8 @@ msgstr "Kesto ms (100.40008 => 100ms 400µs 80ns)"
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ca, cs, es,
 # fr, ja, lv, mi, ru, sk, uk]
 #, fuzzy
-msgid "Duration in ms (10500 => 0:10.5)"
-msgstr "Kesto ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
+msgstr "Kesto ms (10500 => 0:00:10.5)"
 
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, uk, zh, zh_TW]
@@ -16563,7 +16578,7 @@ msgstr "Ei taulukon sarakkeita"
 
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, uk, zh, zh_TW]
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "Ei vielä %s"
 
@@ -16727,6 +16742,12 @@ msgstr "Ei määritelty"
 msgid "Not equal to (≠)"
 msgstr "Ei yhtä suuri kuin (≠)"
 
+# Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
+# de, es, fa, fr, ja, lv, mi, nl, pl, ru, sk, sl, tr, uk]
+#, fuzzy
+msgid "Not found"
+msgstr "Kaaviota ei löydy"
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, uk]
 #, fuzzy
@@ -18637,6 +18658,12 @@ msgstr "Projektin tunnus"
 msgid "Proportional"
 msgstr "Suhteellinen"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, tr, uk, zh, zh_TW]
 #, fuzzy
@@ -19129,12 +19156,6 @@ msgstr "Rekisteröidy"
 msgid "Registration date"
 msgstr "Rekisteröintipäivä"
 
-# Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: cs, fr, ja,
-# lv, ru, sk, uk]
-#, fuzzy
-msgid "Registration hash"
-msgstr "Rekisteröinti-hash"
-
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: cs, ja, ru,
 # sk, uk]
 #, fuzzy
@@ -20071,6 +20092,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL Lab"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ca, cs, es,
 # ja, lv, mi, ru, sk, uk]
 #, fuzzy
@@ -27334,6 +27361,9 @@ msgstr "Kirjoita arvo"
 msgid "Type is required"
 msgstr "Tyyppi vaaditaan"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: cs, ja, lv,
 # ru, sk, uk]
 #, fuzzy
@@ -27597,6 +27627,12 @@ msgstr "Kumoa toiminto"
 msgid "Undo?"
 msgstr "Kumotaanko?"
 
+# Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
+# de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, tr, uk, zh, zh_TW]
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr "Tapahtui odottamaton virhe. Tarkista lokit lisätietojen saamiseksi"
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, tr, uk, zh, zh_TW]
 #, fuzzy
@@ -29207,6 +29243,12 @@ msgstr "Näytetäänkö X-akselin minimi- ja maksimiarvot"
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "Näytetäänkö Y-akselin minimi- ja maksimiarvot"
 
+# Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
+# de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, uk, zh, zh_TW]
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Näytetäänkö trendiviiva"
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, uk, zh, zh_TW]
 #, fuzzy
@@ -32020,6 +32062,12 @@ msgstr "arvo nouseva"
 msgid "value descending"
 msgstr "arvo laskeva"
 
+# Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ca, cs, es,
+# fr, ja, lv, mi, ru, sk, uk]
+#, fuzzy
+msgid "valuename"
+msgstr "Taulukon nimi"
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, ja, lv, mi, nl, pt_BR, ru, sk, sl, uk]
 #, fuzzy
@@ -32119,28 +32167,11 @@ msgstr "your-project-1234-a1"
 msgid "zoom area"
 msgstr "zoomausalue"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
-msgstr ""
-
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ca, cs, es,
 # fr, ja, lv, mi, ru, sk, uk]
 #, fuzzy
 msgid "© Layer attribution"
 msgstr "© Kerroksen attribuutio"
+
+msgid "№"
+msgstr ""
diff --git a/superset/translations/fr/LC_MESSAGES/messages.po b/superset/translations/fr/LC_MESSAGES/messages.po
index 99d3cfe3741..45ce8c44e7f 100644
--- a/superset/translations/fr/LC_MESSAGES/messages.po
+++ b/superset/translations/fr/LC_MESSAGES/messages.po
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2025-06-26 15:34+0200\n"
 "Last-Translator: \n"
 "Language: fr\n"
@@ -26,7 +26,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1240,6 +1240,10 @@ msgstr "Ajouter un nouveau formateur de couleur"
 msgid "Add new formatter"
 msgstr "Ajouter un nouveau formateur"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr " pour ajouter des colonnes calculées"
+
 msgid "Add or edit display controls"
 msgstr "Ajouter ou modifier les contrôles d'affichage"
 
@@ -1809,7 +1813,7 @@ msgstr "Une erreur s'est produite lors de l'extraction des valeurs du schéma :
 msgid "An error occurred while fetching semantic layer types"
 msgstr "Une erreur s'est produite lors de l'extraction des Thèmes "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "Une erreur s'est produite lors de l'extraction des valeurs du schéma : %s"
 
@@ -1885,7 +1889,7 @@ msgstr "Une erreur s'est produite lors de l'analyse de la clé."
 msgid "An error occurred while pruning logs "
 msgstr "Une erreur s'est produite lors de la suppression des journaux "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "Une erreur s'est produite durant le rendu de la visualisation : %s"
 
@@ -2452,7 +2456,7 @@ msgstr "Port de la base de données"
 msgid "Base height"
 msgstr "Hauteur de base"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "Style de la couche de base de la carte. Voir la documentation Mapbox : %s"
 
@@ -4245,6 +4249,13 @@ msgstr ""
 "Les mesures SQL ponctuelles personnalisées ne sont pas activées pour cet "
 "ensemble de données"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "Les champs SQL personnalisés ne peuvent pas contenir de sous-requêtes."
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "Les champs SQL personnalisés ne peuvent pas contenir de sous-requêtes."
 
@@ -5736,8 +5747,8 @@ msgstr "Durée en ms (1.40008 => 1ms 400µs 80ns)"
 msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr "Durée en ms (100.40008 => 100ms 400µs 80ns)"
 
-msgid "Duration in ms (10500 => 0:10.5)"
-msgstr "Durée en ms (66000 => 1m 6s)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
+msgstr "Durée en ms (10500 => 0:00:10.5)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
 msgstr "Durée en ms (66000 => 1m 6s)"
@@ -9503,7 +9514,7 @@ msgstr ""
 msgid "No table columns"
 msgstr "Pas de colonnes de tableau"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "Pas encore de %s"
 
@@ -9599,6 +9610,10 @@ msgstr "Indéfini"
 msgid "Not equal to (≠)"
 msgstr "Différent de (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "Graphique non trouvé"
+
 #, fuzzy
 msgid "Not in"
 msgstr "Pas dans"
@@ -10708,6 +10723,12 @@ msgstr "Déclassé"
 msgid "Proportional"
 msgstr "Proportionnel"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "Publié"
 
@@ -10972,9 +10993,6 @@ msgstr "S'enregister"
 msgid "Registration date"
 msgstr "Source de l'annotation"
 
-msgid "Registration hash"
-msgstr "Hachage d'enregistrement"
-
 #, fuzzy
 msgid "Registration successful"
 msgstr "Hachage d'enregistrement"
@@ -11517,6 +11535,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL Lab"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 #, fuzzy
 msgid "SQL Lab queries"
 msgstr "Requêtes enregistrées"
@@ -16003,6 +16027,9 @@ msgstr "Saisissez une valeur"
 msgid "Type is required"
 msgstr "Le type est requis"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 #, fuzzy
 msgid "Type of chart to display in sparkline"
 msgstr "Nombre de graphiques à afficher par ligne"
@@ -16173,6 +16200,12 @@ msgstr "Annuler l'action"
 msgid "Undo?"
 msgstr "Annuler?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr ""
+"Une erreur inattendue s'est produite, veuillez consulter vos journaux "
+"pour plus de détails"
+
 msgid "Unexpected error"
 msgstr "Erreur inattendue"
 
@@ -17185,6 +17218,10 @@ msgstr "Affichage ou non des valeurs min et max de l’axe des absisses"
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "Affichage ou non des valeurs min et max de l’axe des ordonnées"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Affichage ou non de la ligne de tendance"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "Affichage ou non des valeurs numériques dans les cellules"
 
@@ -18821,6 +18858,10 @@ msgstr "valeurs croissantes"
 msgid "value descending"
 msgstr "valeurs décroissantes"
 
+#, fuzzy
+msgid "valuename"
+msgstr "Nom du tableau"
+
 msgid "var"
 msgstr "var"
 
@@ -18869,25 +18910,8 @@ msgstr ""
 msgid "zoom area"
 msgstr "zone de zoom"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
-msgstr ""
-
 msgid "© Layer attribution"
 msgstr "© Attribution de la couche"
+
+msgid "№"
+msgstr ""
diff --git a/superset/translations/it/LC_MESSAGES/messages.po b/superset/translations/it/LC_MESSAGES/messages.po
index e948c866866..e28bf84d4ef 100644
--- a/superset/translations/it/LC_MESSAGES/messages.po
+++ b/superset/translations/it/LC_MESSAGES/messages.po
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2018-02-11 22:26+0200\n"
 "Last-Translator: Raffaele Spangaro <ra...@raffaelespangaro.it>\n"
 "Language: it\n"
@@ -26,7 +26,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1160,6 +1160,10 @@ msgstr ""
 msgid "Add new formatter"
 msgstr ""
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr "Visualizza colonne"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "Aggiungi filtro"
@@ -1714,7 +1718,7 @@ msgstr "Errore nel rendering della visualizzazione: %s"
 msgid "An error occurred while fetching semantic layer types"
 msgstr "Errore nel recupero dei metadati della tabella"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "Errore nel rendering della visualizzazione: %s"
 
@@ -1787,7 +1791,7 @@ msgstr "Errore nel creare il datasource"
 msgid "An error occurred while pruning logs "
 msgstr "Errore nel rendering della visualizzazione: %s"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "Errore nel rendering della visualizzazione: %s"
 
@@ -4151,6 +4155,12 @@ msgstr ""
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr ""
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+msgid "Custom SQL fields cannot contain set operations."
+msgstr ""
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr ""
 
@@ -5576,7 +5586,7 @@ msgstr ""
 msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr ""
 
-msgid "Duration in ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
 msgstr ""
 
 msgid "Duration in ms (66000 => 1m 6s)"
@@ -9397,6 +9407,10 @@ msgstr "Modificato"
 msgid "Not equal to (≠)"
 msgstr ""
 
+#, fuzzy
+msgid "Not found"
+msgstr "Azione"
+
 #, fuzzy
 msgid "Not in"
 msgstr "Azione"
@@ -10430,6 +10444,12 @@ msgstr "Creato il"
 msgid "Proportional"
 msgstr ""
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr ""
 
@@ -10707,9 +10727,6 @@ msgstr "Cerca / Filtra"
 msgid "Registration date"
 msgstr "Ultima Modifica"
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -11219,6 +11236,12 @@ msgstr ""
 msgid "SQL Lab"
 msgstr ""
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 #, fuzzy
 msgid "SQL Lab queries"
 msgstr "Query salvate"
@@ -15303,6 +15326,9 @@ msgstr "Valore del filtro"
 msgid "Type is required"
 msgstr ""
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -15447,6 +15473,9 @@ msgstr "Seleziona una colonna"
 msgid "Undo?"
 msgstr ""
 
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr ""
+
 msgid "Unexpected error"
 msgstr ""
 
@@ -16330,6 +16359,10 @@ msgstr ""
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr ""
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Seleziona una metrica da visualizzare"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr ""
 
@@ -17895,6 +17928,10 @@ msgstr "Importa"
 msgid "value descending"
 msgstr "Importa"
 
+#, fuzzy
+msgid "valuename"
+msgstr "Database"
+
 msgid "var"
 msgstr ""
 
@@ -17945,25 +17982,8 @@ msgstr ""
 msgid "zoom area"
 msgstr ""
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
+msgid "© Layer attribution"
 msgstr ""
 
-msgid "© Layer attribution"
+msgid "№"
 msgstr ""
diff --git a/superset/translations/ja/LC_MESSAGES/messages.po b/superset/translations/ja/LC_MESSAGES/messages.po
index ed5d39d99d8..30eeb91dffd 100644
--- a/superset/translations/ja/LC_MESSAGES/messages.po
+++ b/superset/translations/ja/LC_MESSAGES/messages.po
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2024-05-14 13:30+0900\n"
 "Last-Translator: Yuri Umezaki <bu...@gmail.com>\n"
 "Language: ja\n"
@@ -26,7 +26,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1153,6 +1153,10 @@ msgstr "新しいカラー形式を追加"
 msgid "Add new formatter"
 msgstr "新しい形式を追加"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr "計算列を追加する"
+
 msgid "Add or edit display controls"
 msgstr "表示コントロールを追加または編集"
 
@@ -1667,7 +1671,7 @@ msgstr "スキーマの値を取得中にエラーが発生しました: %s"
 msgid "An error occurred while fetching semantic layer types"
 msgstr "利用可能なテーマの取得中にエラーが発生しました"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "スキーマの値を取得中にエラーが発生しました: %s"
 
@@ -1735,7 +1739,7 @@ msgstr "キーの解析中にエラーが発生しました。"
 msgid "An error occurred while pruning logs "
 msgstr "ログの削除(プルーニング)中にエラーが発生しました "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "視覚化(ビジュアライゼーション)のレンダリング中にエラーが発生しました: %s"
 
@@ -2256,7 +2260,7 @@ msgstr "基本の指数"
 msgid "Base height"
 msgstr "基本の高さ"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "ベースレイヤーのマップスタイル。Mapboxのドキュメントを参照: %s"
 
@@ -3916,6 +3920,13 @@ msgstr "カスタムSQL"
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr "このデータセットではカスタムSQLアドホックメトリックが有効になっていません"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "カスタムSQLフィールドにサブクエリを含めることはできません。"
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "カスタムSQLフィールドにサブクエリを含めることはできません。"
 
@@ -5235,8 +5246,8 @@ msgstr "所要時間(ミリ秒) (1.40008 => 1ms 400µs 80ns)"
 msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr "所要時間(ミリ秒) (100.40008 => 100ms 400µs 80ns)"
 
-msgid "Duration in ms (10500 => 0:10.5)"
-msgstr "所要時間(ミリ秒) (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
+msgstr "所要時間(ミリ秒) (10500 => 0:00:10.5)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
 msgstr "所要時間(ミリ秒) (66000 => 1分6秒)"
@@ -8661,7 +8672,7 @@ msgstr "該当する列が見つかりません。メトリックでフィルタ
 msgid "No table columns"
 msgstr "テーブル列がありません"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "%s はまだありません"
 
@@ -8746,6 +8757,10 @@ msgstr "未定義"
 msgid "Not equal to (≠)"
 msgstr "等しくない (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "チャートが見つかりません"
+
 msgid "Not in"
 msgstr "次を含まない (Not in)"
 
@@ -9716,6 +9731,12 @@ msgstr "プロジェクトID"
 msgid "Proportional"
 msgstr "比例"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "公開済み"
 
@@ -9964,9 +9985,6 @@ msgstr "登録"
 msgid "Registration date"
 msgstr "登録日"
 
-msgid "Registration hash"
-msgstr "登録ハッシュ"
-
 msgid "Registration successful"
 msgstr "登録が完了しました"
 
@@ -10447,6 +10465,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL Lab"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 msgid "SQL Lab queries"
 msgstr "SQL Lab クエリ"
 
@@ -14310,6 +14334,9 @@ msgstr "値を入力してください"
 msgid "Type is required"
 msgstr "種類は必須です"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr "スパークラインに表示するチャートの種類"
 
@@ -14458,6 +14485,10 @@ msgstr "操作を元に戻す"
 msgid "Undo?"
 msgstr "元に戻しますか?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr "予期しないエラーが発生しました。詳細についてはログを確認してください"
+
 msgid "Unexpected error"
 msgstr "予期しないエラー"
 
@@ -15299,6 +15330,10 @@ msgstr "X軸の最小値と最大値を表示するかどうか"
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "Y軸の最小値と最大値を表示するかどうか"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "トレンドラインを表示するかどうか"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "セル内の数値を表示するかどうか"
 
@@ -16782,6 +16817,10 @@ msgstr "値の昇順"
 msgid "value descending"
 msgstr "値の降順"
 
+#, fuzzy
+msgid "valuename"
+msgstr "テーブル名"
+
 msgid "var"
 msgstr "分散"
 
@@ -16831,25 +16870,8 @@ msgstr "your-project-1234-a1"
 msgid "zoom area"
 msgstr "ズームエリア"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
-msgstr ""
-
 msgid "© Layer attribution"
 msgstr "© レイヤー帰属情報"
+
+msgid "№"
+msgstr ""
diff --git a/superset/translations/ko/LC_MESSAGES/messages.po b/superset/translations/ko/LC_MESSAGES/messages.po
index 79a21a01558..042fef4a03e 100644
--- a/superset/translations/ko/LC_MESSAGES/messages.po
+++ b/superset/translations/ko/LC_MESSAGES/messages.po
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2019-02-02 22:28+0900\n"
 "Last-Translator: \n"
 "Language: ko\n"
@@ -26,7 +26,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1155,6 +1155,10 @@ msgstr ""
 msgid "Add new formatter"
 msgstr ""
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr "컬럼 목록"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "테이블 추가"
@@ -1720,7 +1724,7 @@ msgid ""
 "administrator."
 msgstr ""
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching the configuration schema"
 msgstr "데이터 베이스 목록을 가져오는 도중 에러가 발생하였습니다."
 
@@ -1774,7 +1778,7 @@ msgstr "데이터 베이스 목록을 가져오는 도중 에러가 발생하였
 msgid "An error occurred while pruning logs "
 msgstr ""
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "데이터 베이스 목록을 가져오는 도중 에러가 발생하였습니다."
 
@@ -4131,6 +4135,12 @@ msgstr ""
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr ""
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+msgid "Custom SQL fields cannot contain set operations."
+msgstr ""
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr ""
 
@@ -5538,7 +5548,7 @@ msgstr ""
 msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr ""
 
-msgid "Duration in ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
 msgstr ""
 
 msgid "Duration in ms (66000 => 1m 6s)"
@@ -9309,6 +9319,10 @@ msgstr "수정됨"
 msgid "Not equal to (≠)"
 msgstr ""
 
+#, fuzzy
+msgid "Not found"
+msgstr "데이터베이스를 찾을 수 없습니다."
+
 #, fuzzy
 msgid "Not in"
 msgstr "주석"
@@ -10333,6 +10347,12 @@ msgstr "생성자"
 msgid "Proportional"
 msgstr ""
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr ""
 
@@ -10611,9 +10631,6 @@ msgstr "필터"
 msgid "Registration date"
 msgstr "시작 시간"
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -11115,6 +11132,12 @@ msgstr ""
 msgid "SQL Lab"
 msgstr "SQL Lab"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 #, fuzzy
 msgid "SQL Lab queries"
 msgstr "저장된 Query"
@@ -15180,6 +15203,9 @@ msgstr "원본 값"
 msgid "Type is required"
 msgstr ""
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -15321,6 +15347,9 @@ msgstr "주석"
 msgid "Undo?"
 msgstr ""
 
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr ""
+
 msgid "Unexpected error"
 msgstr ""
 
@@ -16199,6 +16228,9 @@ msgstr ""
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr ""
 
+msgid "Whether to display the numbered column"
+msgstr ""
+
 msgid "Whether to display the numerical values within the cells"
 msgstr ""
 
@@ -17730,6 +17762,10 @@ msgstr ""
 msgid "value descending"
 msgstr ""
 
+#, fuzzy
+msgid "valuename"
+msgstr "테이블 명"
+
 msgid "var"
 msgstr ""
 
@@ -17780,25 +17816,8 @@ msgstr ""
 msgid "zoom area"
 msgstr ""
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
+msgid "© Layer attribution"
 msgstr ""
 
-msgid "© Layer attribution"
+msgid "№"
 msgstr ""
diff --git a/superset/translations/lv/LC_MESSAGES/messages.po b/superset/translations/lv/LC_MESSAGES/messages.po
index 4d406cc2257..8e85229d07d 100644
--- a/superset/translations/lv/LC_MESSAGES/messages.po
+++ b/superset/translations/lv/LC_MESSAGES/messages.po
@@ -21,7 +21,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Superset VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2026-03-27 14:01+0200\n"
 "Last-Translator: FULL NAME <EM...@ADDRESS>\n"
 "Language: lv\n"
@@ -31,7 +31,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1248,6 +1248,10 @@ msgstr "Pievienot jaunu krāsu formatētāju"
 msgid "Add new formatter"
 msgstr "Pievienot jaunu formatētāju"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr " lai pievienotu aprēķinātās kolonnas"
+
 msgid "Add or edit display controls"
 msgstr "Pievienot vai rediģēt displeja vadības elementus"
 
@@ -1794,7 +1798,7 @@ msgstr "Radās kļūda, iegūstot shēmu vērtības: %s"
 msgid "An error occurred while fetching semantic layer types"
 msgstr "Radās kļūda, lejupielādējot pieejamos motīvus"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "Radās kļūda, iegūstot shēmu vērtības: %s"
 
@@ -1864,7 +1868,7 @@ msgstr "Radās kļūda, apstrādājot atslēgu."
 msgid "An error occurred while pruning logs "
 msgstr "Radās kļūda, tīrot žurnālus "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "Radās kļūda, attēlojot vizualizāciju: %s"
 
@@ -2417,7 +2421,7 @@ msgstr "Bāzes eksponents"
 msgid "Base height"
 msgstr "Bāzes augstums"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "Pamata slāņa kartes stils. Skatīt Mapbox dokumentāciju: %s"
 
@@ -4170,6 +4174,13 @@ msgstr "Pielāgots SQL"
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr "Pielāgoti SQL ad-hoc rādītāji nav iespējoti šai datu kopai"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "Pielāgotie SQL lauki nevar saturēt apakšvaicājumus."
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "Pielāgotie SQL lauki nevar saturēt apakšvaicājumus."
 
@@ -5611,8 +5622,8 @@ msgstr "Ilgums ms (1.40008 => 1ms 400µs 80ns)"
 msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr "Ilgums ms (100.40008 => 100ms 400µs 80ns)"
 
-msgid "Duration in ms (10500 => 0:10.5)"
-msgstr "Ilgums ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
+msgstr "Ilgums ms (10500 => 0:00:10.5)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
 msgstr "Ilgums ms (66000 => 1m 6s)"
@@ -9148,7 +9159,7 @@ msgstr ""
 msgid "No table columns"
 msgstr "Nav tabulas kolonnu"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "Pagaidām nav %s"
 
@@ -9235,6 +9246,10 @@ msgstr "Nav definēts"
 msgid "Not equal to (≠)"
 msgstr "Nav vienāds ar (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "Diagramma nav atrasta"
+
 msgid "Not in"
 msgstr "Neietilpst"
 
@@ -10270,6 +10285,12 @@ msgstr "Projekta ID"
 msgid "Proportional"
 msgstr "Proporcionāls"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "Publicēts"
 
@@ -10520,9 +10541,6 @@ msgstr "Reģistrēties"
 msgid "Registration date"
 msgstr "Reģistrācijas datums"
 
-msgid "Registration hash"
-msgstr "Reģistrācijas hash"
-
 #, fuzzy
 msgid "Registration successful"
 msgstr "Reģistrācija veiksmīga"
@@ -11020,6 +11038,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL laboratorija"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 msgid "SQL Lab queries"
 msgstr "SQL laboratorijas vaicājumi"
 
@@ -15189,6 +15213,9 @@ msgstr "Ierakstiet vērtību"
 msgid "Type is required"
 msgstr "Veids ir obligāts"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr "Diagrammas veids, kas jāparāda sparkline"
 
@@ -15352,6 +15379,10 @@ msgstr "Atsaukt darbību"
 msgid "Undo?"
 msgstr "Atsaukt?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr "Radās neparedzēta kļūda, lūdzu pārbaudiet žurnālus detaļām"
+
 msgid "Unexpected error"
 msgstr "Neparedzēta kļūda"
 
@@ -16291,6 +16322,10 @@ msgstr "Vai rādīt X ass minimālās un maksimālās vērtības"
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "Vai rādīt Y ass minimālās un maksimālās vērtības"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Vai rādīt tendences līniju"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "Vai rādīt skaitliskās vērtības šūnās"
 
@@ -17826,6 +17861,10 @@ msgstr "vērtība augošā secībā"
 msgid "value descending"
 msgstr "vērtība dilstošā secībā"
 
+#, fuzzy
+msgid "valuename"
+msgstr "Tabulas nosaukums"
+
 msgid "var"
 msgstr "dispersija"
 
@@ -17874,25 +17913,8 @@ msgstr "jūsu-projekts-1234-a1"
 msgid "zoom area"
 msgstr "tālummaiņas zona"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
-msgstr ""
-
 msgid "© Layer attribution"
 msgstr "© Slāņa attiecinājums"
+
+msgid "№"
+msgstr ""
diff --git a/superset/translations/messages.pot b/superset/translations/messages.pot
index 087b4d91bc3..dab26836c67 100644
--- a/superset/translations/messages.pot
+++ b/superset/translations/messages.pot
@@ -25,14 +25,14 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Superset VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EM...@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL...@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1110,6 +1110,9 @@ msgstr ""
 msgid "Add new formatter"
 msgstr ""
 
+msgid "Add numbered column"
+msgstr ""
+
 msgid "Add or edit display controls"
 msgstr ""
 
@@ -3834,6 +3837,12 @@ msgstr ""
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr ""
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+msgid "Custom SQL fields cannot contain set operations."
+msgstr ""
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr ""
 
@@ -5144,7 +5153,7 @@ msgstr ""
 msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr ""
 
-msgid "Duration in ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
 msgstr ""
 
 msgid "Duration in ms (66000 => 1m 6s)"
@@ -8584,6 +8593,9 @@ msgstr ""
 msgid "Not equal to (≠)"
 msgstr ""
 
+msgid "Not found"
+msgstr ""
+
 msgid "Not in"
 msgstr ""
 
@@ -9542,6 +9554,12 @@ msgstr ""
 msgid "Proportional"
 msgstr ""
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr ""
 
@@ -9786,9 +9804,6 @@ msgstr ""
 msgid "Registration date"
 msgstr ""
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -10256,6 +10271,12 @@ msgstr ""
 msgid "SQL Lab"
 msgstr ""
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 msgid "SQL Lab queries"
 msgstr ""
 
@@ -13993,6 +14014,9 @@ msgstr ""
 msgid "Type is required"
 msgstr ""
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -14129,6 +14153,9 @@ msgstr ""
 msgid "Undo?"
 msgstr ""
 
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr ""
+
 msgid "Unexpected error"
 msgstr ""
 
@@ -14959,6 +14986,9 @@ msgstr ""
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr ""
 
+msgid "Whether to display the numbered column"
+msgstr ""
+
 msgid "Whether to display the numerical values within the cells"
 msgstr ""
 
@@ -16388,6 +16418,9 @@ msgstr ""
 msgid "value descending"
 msgstr ""
 
+msgid "valuename"
+msgstr ""
+
 msgid "var"
 msgstr ""
 
@@ -16436,25 +16469,8 @@ msgstr ""
 msgid "zoom area"
 msgstr ""
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
+msgid "© Layer attribution"
 msgstr ""
 
-msgid "© Layer attribution"
+msgid "№"
 msgstr ""
diff --git a/superset/translations/mi/LC_MESSAGES/messages.po b/superset/translations/mi/LC_MESSAGES/messages.po
index 3c5598a963c..974bceee95f 100644
--- a/superset/translations/mi/LC_MESSAGES/messages.po
+++ b/superset/translations/mi/LC_MESSAGES/messages.po
@@ -21,7 +21,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Superset VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2026-01-25 16:09+1300\n"
 "Last-Translator: karo.co.nz\n"
 "Language: mi\n"
@@ -30,7 +30,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1219,6 +1219,10 @@ msgstr "Tāpiri kaihōputu tae hou"
 msgid "Add new formatter"
 msgstr "Tāpiri kaihōputu hou"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr " hei tāpiri i ngā tīwae tatau"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "Tāpiri, whakatika rānei i ngā tātari"
@@ -1782,7 +1786,7 @@ msgstr "I puta he hapa i te tikitanga o ngā uara hanga: %s"
 msgid "An error occurred while fetching semantic layer types"
 msgstr "I puta he hapa i te tikitanga o ngā tauira CSS wātea"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "I puta he hapa i te tikitanga o ngā uara hanga: %s"
 
@@ -1857,7 +1861,7 @@ msgstr "I puta he hapa i te poroporo o te kī."
 msgid "An error occurred while pruning logs "
 msgstr "I puta he hapa i te puretanga o ngā rārangi "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "I puta he hapa i te whakaatutanga o te whakakitenga: %s"
 
@@ -2408,7 +2412,7 @@ msgstr "Pūmahi pūtake"
 msgid "Base height"
 msgstr "Teitei pūtake"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "Kāhua papa pūtake. Tirohia te tuhinga a Mapbox: %s"
 
@@ -4186,6 +4190,13 @@ msgstr "SQL Ritenga"
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr "Kāore i whakahohengia ngā ine ad-hoc SQL Ritenga mō tēnei rārangi raraunga"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "Kāore e taea e ngā āpure SQL Ritenga te whai i ngā pātai-iti."
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "Kāore e taea e ngā āpure SQL Ritenga te whai i ngā pātai-iti."
 
@@ -5649,8 +5660,8 @@ msgstr "Roa i ngā ms (1.40008 => 1ms 400µs 80ns)"
 msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr "Roa i ngā ms (100.40008 => 100ms 400µs 80ns)"
 
-msgid "Duration in ms (10500 => 0:10.5)"
-msgstr "Roa i ngā ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
+msgstr "Roa i ngā ms (10500 => 0:00:10.5)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
 msgstr "Roa i ngā ms (66000 => 1m 6s)"
@@ -9295,7 +9306,7 @@ msgstr ""
 msgid "No table columns"
 msgstr "Kāore he tīwae ripanga"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "Kāore anō he %s"
 
@@ -9385,6 +9396,10 @@ msgstr "Kāore i tautuhia"
 msgid "Not equal to (≠)"
 msgstr "Kāore e ōrite ki (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "Kāore i kitea te kauwhata"
+
 msgid "Not in"
 msgstr "Kāore i roto i"
 
@@ -10441,6 +10456,12 @@ msgstr "ID Kaupapa"
 msgid "Proportional"
 msgstr "Tauōrite"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "Kua Whakaputaina"
 
@@ -10703,9 +10724,6 @@ msgstr "Tātari-i-mua"
 msgid "Registration date"
 msgstr "Rā tīmata"
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -11220,6 +11238,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL Lab"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 msgid "SQL Lab queries"
 msgstr "Pātai SQL Lab"
 
@@ -15480,6 +15504,9 @@ msgstr "Pato tētahi uara"
 msgid "Type is required"
 msgstr "E hiahiatia ana te momo"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -15641,6 +15668,10 @@ msgstr "Wetekina te mahi"
 msgid "Undo?"
 msgstr "Wete?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr "I puta he hapa ohorere, tēnā tirohia ō rārangi mō ngā taipitopito"
+
 msgid "Unexpected error"
 msgstr "Hapa ohorere"
 
@@ -16620,6 +16651,10 @@ msgstr "Mēnā ka whakaatu i ngā uara iti me ngā uara rahi o te tukutuku-X"
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "Mēnā ka whakaatu i ngā uara iti me ngā uara rahi o te tukutuku-Y"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Mēnā ka whakaatu i te rārangi ia"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "Mēnā ka whakaatu i ngā uara tau i roto i ngā pūtau"
 
@@ -18185,6 +18220,10 @@ msgstr "uara piki"
 msgid "value descending"
 msgstr "uara heke"
 
+#, fuzzy
+msgid "valuename"
+msgstr "Ingoa ripanga"
+
 msgid "var"
 msgstr "var"
 
@@ -18233,25 +18272,8 @@ msgstr ""
 msgid "zoom area"
 msgstr "horahanga topa"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
-msgstr ""
-
 msgid "© Layer attribution"
 msgstr "© Whakatuakī Papa"
+
+msgid "№"
+msgstr ""
diff --git a/superset/translations/nl/LC_MESSAGES/messages.po b/superset/translations/nl/LC_MESSAGES/messages.po
index 1c986d6f98a..7f266f6bfc6 100644
--- a/superset/translations/nl/LC_MESSAGES/messages.po
+++ b/superset/translations/nl/LC_MESSAGES/messages.po
@@ -13,7 +13,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version:  superset-ds\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2024-05-08 14:41+0000\n"
 "Last-Translator: \n"
 "Language: nl\n"
@@ -22,7 +22,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1216,6 +1216,10 @@ msgstr "Voeg nieuwe kleur formatter toe"
 msgid "Add new formatter"
 msgstr "Nieuwe formatter toevoegen"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr " berekende kolommen toevoegen"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "Filters toevoegen en bewerken"
@@ -1799,7 +1803,7 @@ msgstr ""
 "Er is een fout opgetreden tijdens het ophalen van beschikbare CSS "
 "templates"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "Er is een fout opgetreden tijdens het ophalen van schemawaarden: %s"
 
@@ -1880,7 +1884,7 @@ msgstr "Er is een fout opgetreden tijdens het parsen van de sleutel."
 msgid "An error occurred while pruning logs "
 msgstr "Er is een fout opgetreden tijdens opschonen van de logbestanden "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "Er is een fout opgetreden bij het renderen van de visualisatie: %s"
 
@@ -2443,7 +2447,7 @@ msgstr "Database poort"
 msgid "Base height"
 msgstr "Grafiek hoogte"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "Basislaag kaartstijl. Zie Mapbox documentatie: %s"
 
@@ -4273,6 +4277,13 @@ msgstr ""
 "Aangepaste SQL ad hoc statistieken zijn niet ingeschakeld voor deze "
 "dataset"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "Aangepaste SQL velden mogen geen sub-query's bevatten."
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "Aangepaste SQL velden mogen geen sub-query's bevatten."
 
@@ -5764,7 +5775,7 @@ msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr "Duur in ms (100.40008 => 100ms 400μs 80ns)"
 
 #, fuzzy
-msgid "Duration in ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
 msgstr "Duur in ms (66000 => 1m 6s)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
@@ -9474,7 +9485,7 @@ msgstr ""
 msgid "No table columns"
 msgstr "Geen tabelkolommen"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "Nog geen %s"
 
@@ -9567,6 +9578,10 @@ msgstr "Niet gedefinieerd"
 msgid "Not equal to (≠)"
 msgstr "Niet gelijk aan (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "Grafiek niet gevonden"
+
 msgid "Not in"
 msgstr "Niet in"
 
@@ -10637,6 +10652,12 @@ msgstr "Verouderd"
 msgid "Proportional"
 msgstr "Proportioneel"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "Gepubliceerd"
 
@@ -10901,9 +10922,6 @@ msgstr "Vooraf-filter"
 msgid "Registration date"
 msgstr "Start datum"
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -11421,6 +11439,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL-lab"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 #, fuzzy
 msgid "SQL Lab queries"
 msgstr "opgeslagen queries"
@@ -15730,6 +15754,9 @@ msgstr "Voer een waarde in"
 msgid "Type is required"
 msgstr "Type is vereist"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -15896,6 +15923,10 @@ msgstr "Actie ongedaan maken"
 msgid "Undo?"
 msgstr "Ongedaan maken?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr "Er is een onverwachte fout opgetreden, controleer uw logs voor details"
+
 msgid "Unexpected error"
 msgstr "Onverwachte fout"
 
@@ -16880,6 +16911,10 @@ msgstr "Of de min en max waarden van de X-as getoond moeten worden"
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "Of de min en max waarden van de Y-as getoond moeten worden"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Of de trendlijn moet worden weergegeven"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "Of de numerieke waarden binnen de cellen moeten worden weergegeven"
 
@@ -18472,6 +18507,10 @@ msgstr "waarde oplopend"
 msgid "value descending"
 msgstr "waarde aflopend"
 
+#, fuzzy
+msgid "valuename"
+msgstr "Tabel Naam"
+
 msgid "var"
 msgstr "var"
 
@@ -18521,25 +18560,8 @@ msgstr ""
 msgid "zoom area"
 msgstr "zoom gebied"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
+msgid "© Layer attribution"
 msgstr ""
 
-msgid "© Layer attribution"
+msgid "№"
 msgstr ""
diff --git a/superset/translations/pl/LC_MESSAGES/messages.po b/superset/translations/pl/LC_MESSAGES/messages.po
index a19dbc13d71..7f6f89b5ff8 100644
--- a/superset/translations/pl/LC_MESSAGES/messages.po
+++ b/superset/translations/pl/LC_MESSAGES/messages.po
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2021-11-16 17:33+0100\n"
 "Last-Translator: FULL NAME <EM...@ADDRESS>\n"
 "Language: fr\n"
@@ -26,7 +26,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1266,6 +1266,10 @@ msgstr "Dodaj nowy formater kolorów"
 msgid "Add new formatter"
 msgstr "Dodaj nowy formater"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr " aby dodać obliczane kolumny"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "Dodaj i edytuj filtry"
@@ -1854,7 +1858,7 @@ msgstr "Wystąpił błąd podczas usuwania wartości."
 msgid "An error occurred while fetching semantic layer types"
 msgstr "Wystąpił błąd podczas pobierania dostępnych szablonów CSS."
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "Wystąpił błąd podczas usuwania wartości."
 
@@ -1928,7 +1932,7 @@ msgstr "Wystąpił błąd podczas analizowania klucza."
 msgid "An error occurred while pruning logs "
 msgstr "Wystąpił błąd podczas czyszczenia dzienników."
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "Wystąpił błąd podczas usuwania wartości."
 
@@ -2490,7 +2494,7 @@ msgstr "Port bazy danych"
 msgid "Base height"
 msgstr "Wysokość wykresu"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "Styl mapy warstwy podstawowej. Zobacz dokumentację Mapbox: %s"
 
@@ -4367,6 +4371,13 @@ msgstr "Niestandardowy SQL"
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr "Niestandardowe metryki SQL ad-hoc nie są włączone dla tego zestawu danych"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "Pola niestandardowego SQL nie mogą zawierać podzapytań."
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "Pola niestandardowego SQL nie mogą zawierać podzapytań."
 
@@ -5913,7 +5924,7 @@ msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr "Czas trwania w ms (100.40008 => 100ms 400µs 80ns)"
 
 #, fuzzy
-msgid "Duration in ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
 msgstr "Czas trwania w ms (66000 => 1m 6s)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
@@ -9732,7 +9743,7 @@ msgstr ""
 msgid "No table columns"
 msgstr "Brak kolumn tabeli"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "Jeszcze brak %s"
 
@@ -9825,6 +9836,10 @@ msgstr "Nie zdefiniowano"
 msgid "Not equal to (≠)"
 msgstr "Nie równe (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "Nie znaleziono wykresu"
+
 msgid "Not in"
 msgstr "Nie w"
 
@@ -10931,6 +10946,12 @@ msgstr "Przestarzałe"
 msgid "Proportional"
 msgstr "Proporcjonalny"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "Opublikowany"
 
@@ -11215,9 +11236,6 @@ msgstr "Filtr wstępny"
 msgid "Registration date"
 msgstr "Data rozpoczęcia"
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -11765,6 +11783,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL Lab"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 #, fuzzy
 msgid "SQL Lab queries"
 msgstr "zapisane zapytania"
@@ -16276,6 +16300,9 @@ msgstr "Wpisz wartość"
 msgid "Type is required"
 msgstr "Typ jest wymagany"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -16439,6 +16466,10 @@ msgstr "Cofnij akcję"
 msgid "Undo?"
 msgstr "Cofnąć?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr "Wystąpił nieoczekiwany błąd. Sprawdź dzienniki, aby uzyskać szczegóły."
+
 msgid "Unexpected error"
 msgstr "Nieoczekiwany błąd"
 
@@ -17440,6 +17471,10 @@ msgstr "Czy wyświetlać minimalne i maksymalne wartości osi X"
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "Czy wyświetlać minimalne i maksymalne wartości osi Y"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Czy wyświetlać linię trendu"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "Czy wyświetlać wartości liczbowe w komórkach"
 
@@ -19122,6 +19157,10 @@ msgstr "wartości rosnące"
 msgid "value descending"
 msgstr "wartości malejące"
 
+#, fuzzy
+msgid "valuename"
+msgstr "Nazwa tabeli"
+
 #, fuzzy
 msgid "var"
 msgstr "zmienność"
@@ -19177,25 +19216,8 @@ msgstr ""
 msgid "zoom area"
 msgstr "obszar powiększenia"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
+msgid "© Layer attribution"
 msgstr ""
 
-msgid "© Layer attribution"
+msgid "№"
 msgstr ""
diff --git a/superset/translations/pt/LC_MESSAGES/messages.po b/superset/translations/pt/LC_MESSAGES/messages.po
index 6eca11246f0..167ceca3a15 100644
--- a/superset/translations/pt/LC_MESSAGES/messages.po
+++ b/superset/translations/pt/LC_MESSAGES/messages.po
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2018-03-12 16:24+0000\n"
 "Last-Translator: Nuno Heli Beires <nu...@douroeci.com>\n"
 "Language: pt\n"
@@ -26,7 +26,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1182,6 +1182,10 @@ msgstr ""
 msgid "Add new formatter"
 msgstr ""
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr "Lista de Colunas"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "Adicionar filtro"
@@ -1746,7 +1750,7 @@ msgstr "Ocorreu um erro ao renderizar a visualização: %s"
 msgid "An error occurred while fetching semantic layer types"
 msgstr "Ocorreu um erro ao carregar os metadados da tabela"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "Ocorreu um erro ao renderizar a visualização: %s"
 
@@ -1819,7 +1823,7 @@ msgstr "Ocorreu um erro ao criar a origem dos dados"
 msgid "An error occurred while pruning logs "
 msgstr "Ocorreu um erro ao renderizar a visualização: %s"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "Ocorreu um erro ao renderizar a visualização: %s"
 
@@ -4210,6 +4214,12 @@ msgstr ""
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr ""
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+msgid "Custom SQL fields cannot contain set operations."
+msgstr ""
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr ""
 
@@ -5669,7 +5679,7 @@ msgstr ""
 msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr ""
 
-msgid "Duration in ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
 msgstr ""
 
 msgid "Duration in ms (66000 => 1m 6s)"
@@ -9520,6 +9530,10 @@ msgstr "Indefinido"
 msgid "Not equal to (≠)"
 msgstr ""
 
+#, fuzzy
+msgid "Not found"
+msgstr "Visualização %(id)s não encontrada"
+
 #, fuzzy
 msgid "Not in"
 msgstr "Anotações"
@@ -10568,6 +10582,12 @@ msgstr "Criado em"
 msgid "Proportional"
 msgstr ""
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr ""
 
@@ -10854,9 +10874,6 @@ msgstr "Filtro de data"
 msgid "Registration date"
 msgstr "Início"
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -11374,6 +11391,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL Lab"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 #, fuzzy
 msgid "SQL Lab queries"
 msgstr "Queries Gravadas"
@@ -15535,6 +15558,9 @@ msgstr "nome da origem de dados"
 msgid "Type is required"
 msgstr ""
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -15679,6 +15705,9 @@ msgstr "Executar a query selecionada"
 msgid "Undo?"
 msgstr ""
 
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr ""
+
 msgid "Unexpected error"
 msgstr ""
 
@@ -16570,6 +16599,10 @@ msgstr ""
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr ""
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Selecione uma métrica para visualizar"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr ""
 
@@ -18138,6 +18171,10 @@ msgstr "Ordenar decrescente"
 msgid "value descending"
 msgstr "Ordenar decrescente"
 
+#, fuzzy
+msgid "valuename"
+msgstr "Nome da Tabela"
+
 msgid "var"
 msgstr ""
 
@@ -18189,25 +18226,8 @@ msgstr ""
 msgid "zoom area"
 msgstr ""
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
+msgid "© Layer attribution"
 msgstr ""
 
-msgid "© Layer attribution"
+msgid "№"
 msgstr ""
diff --git a/superset/translations/pt_BR/LC_MESSAGES/messages.po b/superset/translations/pt_BR/LC_MESSAGES/messages.po
index 0898130c3f7..5a752992617 100644
--- a/superset/translations/pt_BR/LC_MESSAGES/messages.po
+++ b/superset/translations/pt_BR/LC_MESSAGES/messages.po
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2023-05-22 08:04-0400\n"
 "Last-Translator: \n"
 "Language: pt_BR\n"
@@ -26,7 +26,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1275,6 +1275,10 @@ msgstr "Adicionar novo formatador de cores"
 msgid "Add new formatter"
 msgstr "Adicionar novo formatador"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr " para adicionar colunas calculadas"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "Adicionar e editar filtros"
@@ -1853,7 +1857,7 @@ msgstr "Ocorreu um erro durante a extração dos valores do esquema: %s"
 msgid "An error occurred while fetching semantic layer types"
 msgstr "Ocorreu um erro ao buscar os modelos CSS disponíveis"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "Ocorreu um erro durante a extração dos valores do esquema: %s"
 
@@ -1930,7 +1934,7 @@ msgstr "Ocorreu um erro ao analisar a chave."
 msgid "An error occurred while pruning logs "
 msgstr "Ocorreu um erro ao podar os registos"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "Ocorreu um erro ao renderizar a visualização: %s"
 
@@ -4371,6 +4375,13 @@ msgstr ""
 "As métricas ad-hoc de SQL personalizado não estão ativadas para este "
 "conjunto de dados"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "Os campos SQL personalizados não podem conter subconsultas."
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "Os campos SQL personalizados não podem conter subconsultas."
 
@@ -5878,7 +5889,7 @@ msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr "Duração em ms (100,40008 => 100ms 400µs 80ns)"
 
 #, fuzzy
-msgid "Duration in ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
 msgstr "Duração em ms (66000 => 1m 6s)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
@@ -9625,7 +9636,7 @@ msgstr ""
 msgid "No table columns"
 msgstr "Nenhuma coluna da tabela"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "Sem %s ainda"
 
@@ -9720,6 +9731,10 @@ msgstr "Indefinido"
 msgid "Not equal to (≠)"
 msgstr "Diferente de (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "Gráfico não encontrado"
+
 msgid "Not in"
 msgstr "Não está em"
 
@@ -10805,6 +10820,12 @@ msgstr "Depreciado"
 msgid "Proportional"
 msgstr "Proporcional"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "Publicado"
 
@@ -11074,9 +11095,6 @@ msgstr "Mais filtros"
 msgid "Registration date"
 msgstr "Data de início"
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -11601,6 +11619,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL Lab"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 #, fuzzy
 msgid "SQL Lab queries"
 msgstr "consultas salvas"
@@ -15954,6 +15978,9 @@ msgstr "Digite um valor"
 msgid "Type is required"
 msgstr "O tipo é obrigatório"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -16118,6 +16145,12 @@ msgstr "Desfazer a ação"
 msgid "Undo?"
 msgstr "Desfazer?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr ""
+"Ocorreu um erro inesperado, verifique os registros(logs) para obter "
+"detalhes"
+
 msgid "Unexpected error"
 msgstr "Erro inesperado"
 
@@ -17106,6 +17139,10 @@ msgstr "Se devem ser exibidos os valores mínimo e máximo do eixo X"
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "Se devem ser exibidos os valores mínimo e máximo do eixo Y"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Se a linha de tendência deve ser exibida"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "Se deseja exibir os valores numéricos dentro das células"
 
@@ -18713,6 +18750,10 @@ msgstr "valor crescente"
 msgid "value descending"
 msgstr "valor decrescente"
 
+#, fuzzy
+msgid "valuename"
+msgstr "Nome da Tabela"
+
 msgid "var"
 msgstr "var"
 
@@ -18762,25 +18803,8 @@ msgstr ""
 msgid "zoom area"
 msgstr "área de zoom"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
+msgid "© Layer attribution"
 msgstr ""
 
-msgid "© Layer attribution"
+msgid "№"
 msgstr ""
diff --git a/superset/translations/ru/LC_MESSAGES/messages.po b/superset/translations/ru/LC_MESSAGES/messages.po
index 9c3e1f57237..ef3940a8ddd 100644
--- a/superset/translations/ru/LC_MESSAGES/messages.po
+++ b/superset/translations/ru/LC_MESSAGES/messages.po
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2025-11-05 14:37+0300\n"
 "Last-Translator: innovark\n"
 "Language: ru\n"
@@ -27,7 +27,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1230,6 +1230,10 @@ msgstr "Окрашивать по условию"
 msgid "Add new formatter"
 msgstr "Новое условие"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr " для добавления вычисляемых столбцов"
+
 msgid "Add or edit display controls"
 msgstr "Добавить/изменить параметры отображения"
 
@@ -1778,7 +1782,7 @@ msgstr "Произошла ошибка при извлечении значен
 msgid "An error occurred while fetching semantic layer types"
 msgstr "Произошла ошибка при получении доступных тем"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "Произошла ошибка при извлечении значений схемы: %s"
 
@@ -1848,7 +1852,7 @@ msgstr "Произошла ошибка при парсинге ключа"
 msgid "An error occurred while pruning logs "
 msgstr "Произошла ошибка при удалении журналов "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "Произошла ошибка при построении диаграммы: %s"
 
@@ -2405,7 +2409,7 @@ msgstr "Базовая экспонента"
 msgid "Base height"
 msgstr "Базовая высота"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "Стиль базового слоя карты. Подробнее в документации Mapbox: %s"
 
@@ -4155,6 +4159,13 @@ msgstr "Через SQL"
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr "Пользовательские ad-hoc меры SQL не разрешены для этого датасета"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "Пользовательские поля SQL не могут содержать подзапросы"
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "Пользовательские поля SQL не могут содержать подзапросы"
 
@@ -5585,16 +5596,16 @@ msgid "Duration Ms"
 msgstr "Продолжительность (мс)"
 
 msgid "Duration in ms (1.40008 => 1ms 400µs 80ns)"
-msgstr "Продолжительность в мс (1.40008 => 1ms 400µs 80ns)"
+msgstr "Продолжительность в мс (1.40008 => 1 мс 400 мкс 80 нс)"
 
 msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
-msgstr "Продолжительность в мс (100.40008 => 100ms 400µs 80ns)"
+msgstr "Продолжительность в мс (100.40008 => 100 мс 400 мкс 80 нс)"
 
-msgid "Duration in ms (10500 => 0:10.5)"
-msgstr "Продолжительность в мс (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
+msgstr "Продолжительность в мс (10500 => 0:00:10,5)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
-msgstr "Продолжительность в мс (66000 => 1m 6s)"
+msgstr "Продолжительность в мс (66000 => 1 мин 6 с)"
 
 #, fuzzy
 msgid "Duration in seconds"
@@ -9132,7 +9143,7 @@ msgstr ""
 msgid "No table columns"
 msgstr "Нет столбцов в таблице"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "Пока нет %s"
 
@@ -9219,6 +9230,10 @@ msgstr "Не определено"
 msgid "Not equal to (≠)"
 msgstr "Не равно (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "Диаграмма не найдена"
+
 msgid "Not in"
 msgstr "Not in"
 
@@ -10256,6 +10271,12 @@ msgstr "Id проекта"
 msgid "Proportional"
 msgstr "Пропорция"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "Опубликовано"
 
@@ -10504,9 +10525,6 @@ msgstr "Регистрация"
 msgid "Registration date"
 msgstr "Дата регистрации"
 
-msgid "Registration hash"
-msgstr "Хеш регистрации"
-
 msgid "Registration successful"
 msgstr "Регистрация выполнена успешно"
 
@@ -11007,6 +11025,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL Lab"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 msgid "SQL Lab queries"
 msgstr "SQL Lab запросы"
 
@@ -15165,6 +15189,9 @@ msgstr "Введите значение"
 msgid "Type is required"
 msgstr "Тип обязателен"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr "Тип диаграммы для отображения в спарклайне"
 
@@ -15331,6 +15358,12 @@ msgstr "Отменить действие"
 msgid "Undo?"
 msgstr "Отменить?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr ""
+"Произошла неожиданная ошибка. Проверьте историю действий для уточнения "
+"деталей."
+
 msgid "Unexpected error"
 msgstr "Неожиданная ошибка"
 
@@ -16267,6 +16300,10 @@ msgstr "Отобразить минимальное и максимальное
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "Отобразить минимальное и максимальное значение на оси Y"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Отобразить линию тренда"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "Отобразить значения"
 
@@ -17821,6 +17858,10 @@ msgstr "по возрастанию значения"
 msgid "value descending"
 msgstr "по убыванию значения"
 
+#, fuzzy
+msgid "valuename"
+msgstr "Имя таблицы"
+
 msgid "var"
 msgstr "дисперсия"
 
@@ -17870,25 +17911,8 @@ msgstr ""
 msgid "zoom area"
 msgstr "область масштабирования"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
-msgstr ""
-
 msgid "© Layer attribution"
 msgstr "© Настройки слоя"
+
+msgid "№"
+msgstr ""
diff --git a/superset/translations/sk/LC_MESSAGES/messages.po b/superset/translations/sk/LC_MESSAGES/messages.po
index 516696a62ae..a057025df3f 100644
--- a/superset/translations/sk/LC_MESSAGES/messages.po
+++ b/superset/translations/sk/LC_MESSAGES/messages.po
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2026-05-18 15:42+0200\n"
 "Last-Translator: FULL NAME <EM...@ADDRESS>\n"
 "Language: sk\n"
@@ -26,7 +26,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1247,6 +1247,10 @@ msgstr "Pridať nový formátovač farieb"
 msgid "Add new formatter"
 msgstr "Pridať nový formátovač"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr " pre pridanie počítaných stĺpcov"
+
 msgid "Add or edit display controls"
 msgstr "Pridať alebo upraviť ovládací prvky zobrazenie"
 
@@ -1807,7 +1811,7 @@ msgstr "Pri načítavanie hodnôt schématu došlo k chybe: %s"
 msgid "An error occurred while fetching semantic layer types"
 msgstr "Pri načítavanie dostupných témat došlo k chybe"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "Pri načítavanie hodnôt schématu došlo k chybe: %s"
 
@@ -1880,7 +1884,7 @@ msgstr "Pri parsovanie klíče došlo k chybe."
 msgid "An error occurred while pruning logs "
 msgstr "Pri mazaní protokolov došlo k chybe "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "Pri vykreslovanie vizualizácia došlo k chybe: %s"
 
@@ -2441,7 +2445,7 @@ msgstr "Exponent základu"
 msgid "Base height"
 msgstr "Výška základu"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "Styl mapy základný vrstvy. Viz dokumentaci Mapbox: %s"
 
@@ -4227,6 +4231,13 @@ msgstr "Vlastný SQL"
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr "Vlastný SQL ad-hoc metriky nesú pre tuto sadu dat povoleny"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "Vlastný pole SQL nemôžu obsahovať poddotazy."
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "Vlastný pole SQL nemôžu obsahovať poddotazy."
 
@@ -5714,8 +5725,8 @@ msgstr "Trvanie v ms (1.40008 => 1ms 400µs 80ns)"
 msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr "Trvanie v ms (100.40008 => 100ms 400µs 80ns)"
 
-msgid "Duration in ms (10500 => 0:10.5)"
-msgstr "Trvanie v ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
+msgstr "Trvanie v ms (10500 => 0:00:10.5)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
 msgstr "Trvanie v ms (66000 => 1m 6s)"
@@ -9362,7 +9373,7 @@ msgstr ""
 msgid "No table columns"
 msgstr "Žiadne stĺpce tabuľky"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "Zatiaľ žiadne %s"
 
@@ -9451,6 +9462,10 @@ msgstr "Nedefinováno"
 msgid "Not equal to (≠)"
 msgstr "Nerovná sa (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "Graf nenalezen"
+
 msgid "Not in"
 msgstr "Nie je v"
 
@@ -10505,6 +10520,12 @@ msgstr "ID projektu"
 msgid "Proportional"
 msgstr "Proporcionální"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "Zveřejneno"
 
@@ -10765,9 +10786,6 @@ msgstr "Registrovať"
 msgid "Registration date"
 msgstr "Dátum registrácia"
 
-msgid "Registration hash"
-msgstr "Hash registrácia"
-
 msgid "Registration successful"
 msgstr "Registrácia úspešná"
 
@@ -11276,6 +11294,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL Lab"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 msgid "SQL Lab queries"
 msgstr "Dotazy SQL Labu"
 
@@ -15548,6 +15572,9 @@ msgstr "Napište hodnotu"
 msgid "Type is required"
 msgstr "Typ je povinný"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr "Typ grafu pre zobrazenie ve sparkline"
 
@@ -15712,6 +15739,12 @@ msgstr "Vrátiť akci späť"
 msgid "Undo?"
 msgstr "Späť?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr ""
+"Došlo k neočekávané chybe, skontrolujte prosím svoje protokoly pre "
+"podrobnosti"
+
 msgid "Unexpected error"
 msgstr "Neočekávaná chyba"
 
@@ -16668,6 +16701,10 @@ msgstr "Či zobraziť minimální a maximální hodnoty osy X"
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "Či zobraziť minimální a maximální hodnoty osy Y"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Či zobraziť trendovou čáru"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "Či zobraziť číselné hodnoty v buňkách"
 
@@ -18227,6 +18264,10 @@ msgstr "hodnota vzestupne"
 msgid "value descending"
 msgstr "hodnota sestupne"
 
+#, fuzzy
+msgid "valuename"
+msgstr "Názov tabuľky"
+
 msgid "var"
 msgstr "var"
 
@@ -18275,25 +18316,8 @@ msgstr "your-project-1234-a1"
 msgid "zoom area"
 msgstr "oblasť priblíženie"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
-msgstr ""
-
 msgid "© Layer attribution"
 msgstr "© Atribuce vrstvy"
+
+msgid "№"
+msgstr ""
diff --git a/superset/translations/sl/LC_MESSAGES/messages.po b/superset/translations/sl/LC_MESSAGES/messages.po
index 41ac7a438cc..d33c5fb0435 100644
--- a/superset/translations/sl/LC_MESSAGES/messages.po
+++ b/superset/translations/sl/LC_MESSAGES/messages.po
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version:  Superset\n"
 "Report-Msgid-Bugs-To: dkrat7 @github.com\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2024-10-05 23:46+0200\n"
 "Last-Translator: dkrat7 <dkrat7 @github.com>\n"
 "Language: sl_SI\n"
@@ -27,7 +27,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1266,6 +1266,10 @@ msgstr "Dodaj novo pravilo za barvo"
 msgid "Add new formatter"
 msgstr "Dodaj novo pravilo"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr " za dodajanje izračunanih stolpcev"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "Dodaj in uredi filtre"
@@ -1830,7 +1834,7 @@ msgstr "Pri pridobivanju vrednosti shem je prišlo do napake: %s"
 msgid "An error occurred while fetching semantic layer types"
 msgstr "Pri pridobivanju CSS predlog je prišlo do napake"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "Pri pridobivanju vrednosti shem je prišlo do napake: %s"
 
@@ -1905,7 +1909,7 @@ msgstr "Pri branju ključa je prišlo do težave."
 msgid "An error occurred while pruning logs "
 msgstr "Pri krajšanju dnevnikov je prišlo do napake "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "Pri prikazovanju vizualizacije je prišlo do napake: %s"
 
@@ -2462,7 +2466,7 @@ msgstr "Vrata podatkovne baze"
 msgid "Base height"
 msgstr "Višina grafikona"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "Slog osnovnega zemljevida. Glej dokumentacijo Mapbox: %s"
 
@@ -4250,6 +4254,13 @@ msgstr "Prilagojen SQL"
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr "Prilagodljive ad-hoc SQL-mere za ta podatkovni set niso omogočene"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "Prilagojena SQL-polja ne smejo vsebovati podpoizvedb."
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "Prilagojena SQL-polja ne smejo vsebovati podpoizvedb."
 
@@ -5735,7 +5746,7 @@ msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr "Trajanje v ms (100.40008 => 100ms 400µs 80ns)"
 
 #, fuzzy
-msgid "Duration in ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
 msgstr "Trajanje v ms (66000 => 1m 6s)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
@@ -9409,7 +9420,7 @@ msgstr ""
 msgid "No table columns"
 msgstr "Ni stolpcev tabel"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "%s še ne obstajajo"
 
@@ -9500,6 +9511,10 @@ msgstr "Ni definirano"
 msgid "Not equal to (≠)"
 msgstr "Ni enako (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "Grafikon ni najden"
+
 msgid "Not in"
 msgstr "Ne vsebuje (NOT IN)"
 
@@ -10559,6 +10574,12 @@ msgstr "Zastarelo"
 msgid "Proportional"
 msgstr "Proporcionalno"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "Objavljeno"
 
@@ -10818,9 +10839,6 @@ msgstr "Predfilter"
 msgid "Registration date"
 msgstr "Začetni datum"
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -11331,6 +11349,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL laboratorij"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 #, fuzzy
 msgid "SQL Lab queries"
 msgstr "shranjene poizvedbe"
@@ -15568,6 +15592,9 @@ msgstr "Vnesite vrednost"
 msgid "Type is required"
 msgstr "Tip je obvezen"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -15725,6 +15752,10 @@ msgstr "Razveljavi dejanje"
 msgid "Undo?"
 msgstr "Povrni?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr "Zgodila se je nepričakovana napaka. Podrobnosti preverite v dnevnikih"
+
 msgid "Unexpected error"
 msgstr "Nepričakovana napaka"
 
@@ -16687,6 +16718,10 @@ msgstr "Če želite prikaz min. in max. vrednosti X-osi"
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "Če želite prikaz min. in max. vrednosti Y-osi"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Če želite prikazati trendno črto"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "Če želite v celicah prikazati numerične vrednosti"
 
@@ -18248,6 +18283,10 @@ msgstr "0 - 9"
 msgid "value descending"
 msgstr "9 - 0"
 
+#, fuzzy
+msgid "valuename"
+msgstr "Ime tabele"
+
 msgid "var"
 msgstr "var"
 
@@ -18296,25 +18335,8 @@ msgstr ""
 msgid "zoom area"
 msgstr "približaj območje"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
+msgid "© Layer attribution"
 msgstr ""
 
-msgid "© Layer attribution"
+msgid "№"
 msgstr ""
diff --git a/superset/translations/th/LC_MESSAGES/messages.po b/superset/translations/th/LC_MESSAGES/messages.po
index 385b2171c8a..ac2307bc4bd 100644
--- a/superset/translations/th/LC_MESSAGES/messages.po
+++ b/superset/translations/th/LC_MESSAGES/messages.po
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Superset VERSION\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EM...@ADDRESS>\n"
 "Language: th\n"
@@ -26,7 +26,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ca, cs, de,
 # es, fa, fr, ja, lv, mi, pt_BR, ru, sk, sl, uk]
@@ -1965,6 +1965,12 @@ msgstr "เพิ่มตัวจัดรูปแบบสีใหม่"
 msgid "Add new formatter"
 msgstr "เพิ่มตัวจัดรูปแบบใหม่"
 
+# Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
+# de, es, fa, fr, ja, lv, mi, nl, ru, sk, sl, uk]
+#, fuzzy
+msgid "Add numbered column"
+msgstr " เพื่อเพิ่มคอลัมน์ที่คำนวณ"
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: fr, ja, lv,
 # ru, sk, uk]
 #, fuzzy
@@ -2935,7 +2941,7 @@ msgstr "เกิดข้อผิดพลาดขณะดึงธีมท
 
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, it, ja, lv, mi, nl, pt, pt_BR, ru, sk, sl, uk, zh, zh_TW]
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "เกิดข้อผิดพลาดขณะดึงค่าสคีมา: %s"
 
@@ -3058,7 +3064,7 @@ msgstr "เกิดข้อผิดพลาดขณะตัดแต่ง
 
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, it, ja, lv, mi, nl, pt, pt_BR, ru, sk, sl, uk, zh, zh_TW]
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "เกิดข้อผิดพลาดขณะแสดงผลการแสดงข้อมูล: %s"
 
@@ -4060,7 +4066,7 @@ msgstr "ความสูงฐาน"
 
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, ja, lv, mi, nl, pl, ru, sk, sl, uk]
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "รูปแบบแผนที่เลเยอร์ฐาน ดูเอกสาร Mapbox: %s"
 
@@ -7275,6 +7281,15 @@ msgstr "SQL กำหนดเอง"
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr "เมตริก SQL เฉพาะกิจแบบกำหนดเองไม่ได้เปิดใช้งานสำหรับชุดข้อมูลนี้"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+# Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
+# de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, uk]
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "ฟิลด์ SQL กำหนดเองไม่สามารถมีคำสั่งย่อยได้"
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, uk]
 #, fuzzy
@@ -9784,8 +9799,8 @@ msgstr "ระยะเวลาในหน่วยมิลลิวินา
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ca, cs, es,
 # fr, ja, lv, mi, ru, sk, uk]
 #, fuzzy
-msgid "Duration in ms (10500 => 0:10.5)"
-msgstr "ระยะเวลาในหน่วยมิลลิวินาที (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
+msgstr "ระยะเวลาในหน่วยมิลลิวินาที (10500 => 0:00:10.5)"
 
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, uk, zh, zh_TW]
@@ -16360,7 +16375,7 @@ msgstr "ไม่มีคอลัมน์ในตาราง"
 
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, uk, zh, zh_TW]
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "ยังไม่มี %s"
 
@@ -16524,6 +16539,12 @@ msgstr "ไม่ได้กำหนด"
 msgid "Not equal to (≠)"
 msgstr "ไม่เท่ากับ (≠)"
 
+# Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
+# de, es, fa, fr, ja, lv, mi, nl, pl, ru, sk, sl, tr, uk]
+#, fuzzy
+msgid "Not found"
+msgstr "ไม่พบแผนภูมิ"
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, uk]
 #, fuzzy
@@ -18420,6 +18441,12 @@ msgstr "รหัสโครงการ"
 msgid "Proportional"
 msgstr "สัดส่วน"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, tr, uk, zh, zh_TW]
 #, fuzzy
@@ -18911,12 +18938,6 @@ msgstr "ลงทะเบียน"
 msgid "Registration date"
 msgstr "วันที่ลงทะเบียน"
 
-# Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: cs, fr, ja,
-# lv, ru, sk, uk]
-#, fuzzy
-msgid "Registration hash"
-msgstr "แฮชการลงทะเบียน"
-
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: cs, ja, ru,
 # sk, uk]
 #, fuzzy
@@ -19847,6 +19868,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL Lab"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ca, cs, es,
 # ja, lv, mi, ru, sk, uk]
 #, fuzzy
@@ -27026,6 +27053,9 @@ msgstr "พิมพ์ค่า"
 msgid "Type is required"
 msgstr "ต้องระบุประเภท"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: cs, ja, lv,
 # ru, sk, uk]
 #, fuzzy
@@ -27283,6 +27313,12 @@ msgstr "เลิกทำการกระทำ"
 msgid "Undo?"
 msgstr "เลิกทำ?"
 
+# Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
+# de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, tr, uk, zh, zh_TW]
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr "เกิดข้อผิดพลาดที่ไม่คาดคิด โปรดตรวจสอบบันทึกของคุณเพื่อดูรายละเอียด"
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, tr, uk, zh, zh_TW]
 #, fuzzy
@@ -28854,6 +28890,12 @@ msgstr "ว่าจะแสดงค่าต่ำสุดและสูง
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "ว่าจะแสดงค่าต่ำสุดและสูงสุดของแกน Y หรือไม่"
 
+# Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
+# de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, uk, zh, zh_TW]
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "ว่าจะแสดงเส้นแนวโน้มหรือไม่"
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, ja, lv, mi, nl, pl, pt_BR, ru, sk, sl, uk, zh, zh_TW]
 #, fuzzy
@@ -31658,6 +31700,12 @@ msgstr "ค่าจากน้อยไปมาก"
 msgid "value descending"
 msgstr "ค่าจากมากไปน้อย"
 
+# Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ca, cs, es,
+# fr, ja, lv, mi, ru, sk, uk]
+#, fuzzy
+msgid "valuename"
+msgstr "ชื่อตาราง"
+
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ar, ca, cs,
 # de, es, fa, fr, ja, lv, mi, nl, pt_BR, ru, sk, sl, uk]
 #, fuzzy
@@ -31757,28 +31805,11 @@ msgstr "your-project-1234-a1"
 msgid "zoom area"
 msgstr "พื้นที่ซูม"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
-msgstr ""
-
 # Machine-translated via backfill_po.py (claude-sonnet-4-6) [refs: ca, cs, es,
 # fr, ja, lv, mi, ru, sk, uk]
 #, fuzzy
 msgid "© Layer attribution"
 msgstr "© การระบุแหล่งที่มาของเลเยอร์"
+
+msgid "№"
+msgstr ""
diff --git a/superset/translations/tr/LC_MESSAGES/messages.po b/superset/translations/tr/LC_MESSAGES/messages.po
index 4d77f579625..dbe4be53771 100644
--- a/superset/translations/tr/LC_MESSAGES/messages.po
+++ b/superset/translations/tr/LC_MESSAGES/messages.po
@@ -21,7 +21,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Superset VERSION\n"
 "Report-Msgid-Bugs-To: avsarcoteli@gmail.com\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2024-02-25 14:00+0300\n"
 "Last-Translator: FULL NAME <EM...@ADDRESS>\n"
 "Language: tr\n"
@@ -30,7 +30,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1119,6 +1119,10 @@ msgstr ""
 msgid "Add new formatter"
 msgstr ""
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr "Kolon seç"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "Ekle ve filtreleri düzenle"
@@ -3967,6 +3971,12 @@ msgstr ""
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr ""
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+msgid "Custom SQL fields cannot contain set operations."
+msgstr ""
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr ""
 
@@ -5331,7 +5341,7 @@ msgstr ""
 msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr ""
 
-msgid "Duration in ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
 msgstr ""
 
 msgid "Duration in ms (66000 => 1m 6s)"
@@ -8945,6 +8955,10 @@ msgstr ""
 msgid "Not equal to (≠)"
 msgstr ""
 
+#, fuzzy
+msgid "Not found"
+msgstr "Grafik bulunamadı"
+
 msgid "Not in"
 msgstr ""
 
@@ -9928,6 +9942,12 @@ msgstr ""
 msgid "Proportional"
 msgstr ""
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "Paylaşıldı"
 
@@ -10184,9 +10204,6 @@ msgstr ""
 msgid "Registration date"
 msgstr "Başlangıç tarihi"
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -10671,6 +10688,12 @@ msgstr ""
 msgid "SQL Lab"
 msgstr ""
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 #, fuzzy
 msgid "SQL Lab queries"
 msgstr "kaydedilmiş sorgular"
@@ -12159,7 +12182,7 @@ msgstr ""
 msgid "Sort by original table order"
 msgstr ""
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Sort by series"
 msgstr "%s’e göre sırala"
 
@@ -14580,6 +14603,9 @@ msgstr "Bir değer girin"
 msgid "Type is required"
 msgstr ""
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -14720,6 +14746,10 @@ msgstr ""
 msgid "Undo?"
 msgstr "Geri almak ister misiniz?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr "Beklenmeyen bir hata oluştu, detaylar için lütfen loglarınızı kontrol edin"
+
 msgid "Unexpected error"
 msgstr "Beklenmeyen hata"
 
@@ -15573,6 +15603,9 @@ msgstr ""
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr ""
 
+msgid "Whether to display the numbered column"
+msgstr ""
+
 msgid "Whether to display the numerical values within the cells"
 msgstr ""
 
@@ -15986,11 +16019,11 @@ msgstr "Bu verisetine erişemezsiniz."
 msgid "You don't have permission to copy to clipboard"
 msgstr "Değeri değiştirmek için yetkiniz yok."
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "You don't have permission to export data"
 msgstr "Bu %s’i değiştirmeye yetkiniz yok"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "You don't have permission to export images"
 msgstr "Bu %s’i değiştirmeye yetkiniz yok"
 
@@ -17056,6 +17089,10 @@ msgstr ""
 msgid "value descending"
 msgstr ""
 
+#, fuzzy
+msgid "valuename"
+msgstr "Tablo ismi"
+
 msgid "var"
 msgstr ""
 
@@ -17104,25 +17141,8 @@ msgstr ""
 msgid "zoom area"
 msgstr ""
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
+msgid "© Layer attribution"
 msgstr ""
 
-msgid "© Layer attribution"
+msgid "№"
 msgstr ""
diff --git a/superset/translations/uk/LC_MESSAGES/messages.po b/superset/translations/uk/LC_MESSAGES/messages.po
index 0f7c84f47be..7ffa53f04e9 100644
--- a/superset/translations/uk/LC_MESSAGES/messages.po
+++ b/superset/translations/uk/LC_MESSAGES/messages.po
@@ -18,7 +18,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version:  \n"
 "Report-Msgid-Bugs-To: ted.korostiled@gmail.com\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2026-04-30 22:04+0300\n"
 "Last-Translator: Danylo Korostil\n"
 "Language: uk\n"
@@ -28,7 +28,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1246,6 +1246,10 @@ msgstr "Додати нову кольорову гамму"
 msgid "Add new formatter"
 msgstr "Додати нову умову"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr " для додавання обчислювальних стовпців"
+
 msgid "Add or edit display controls"
 msgstr "Додати або редагувати контроль вигляду"
 
@@ -1787,7 +1791,7 @@ msgstr "Не вдалось одержати інформацію про схе
 msgid "An error occurred while fetching semantic layer types"
 msgstr "Не вдалось одержати доступні теми"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "Не вдалось одержати інформацію про схему: %s"
 
@@ -1855,7 +1859,7 @@ msgstr "Не вдалося розібрати ключ."
 msgid "An error occurred while pruning logs "
 msgstr "Не вдалося очистити журнали "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "Не вдалося відтворити візуалізацію: %s"
 
@@ -2403,7 +2407,7 @@ msgstr "Основний ступінь"
 msgid "Base height"
 msgstr "Основна висота"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "Base layer map style. Accepts a MapLibre-compatible style URL."
 msgstr "Стиль карти основного шару. Переглянути документацію Mapbox: %s"
 
@@ -4143,6 +4147,13 @@ msgstr "Нетиповий запит"
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr "Нетипові показники вимкнено для цього набору даних"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+#, fuzzy
+msgid "Custom SQL fields cannot contain set operations."
+msgstr "Нетипові поля запиту не можуть містити підзапити."
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr "Нетипові поля запиту не можуть містити підзапити."
 
@@ -5585,8 +5596,8 @@ msgstr "Тривалість у мілісекундах (наприклад: 1.
 msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr "Тривалість у мілісекундах (наприклад: 100.40008 → 100 мс 400 мкс 80 нс)"
 
-msgid "Duration in ms (10500 => 0:10.5)"
-msgstr "Тривалість у мілісекундах (наприклад: 10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
+msgstr "Тривалість у мілісекундах (наприклад: 10500 => 0:00:10.5)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
 msgstr "Тривалість у мілісекундах (наприклад: 10500 => 1 хв 6 с)"
@@ -9110,7 +9121,7 @@ msgstr ""
 msgid "No table columns"
 msgstr "Немає стовпців у таблиці"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "Ще немає %s"
 
@@ -9197,6 +9208,10 @@ msgstr "Не визначено"
 msgid "Not equal to (≠)"
 msgstr "Не дорівнює (≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "Діаграму не знайдено"
+
 msgid "Not in"
 msgstr "Не в"
 
@@ -10226,6 +10241,12 @@ msgstr "Ідентифікатор проєкту"
 msgid "Proportional"
 msgstr "Пропорційний"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "Оприлюднений"
 
@@ -10476,9 +10497,6 @@ msgstr "Реєстрація"
 msgid "Registration date"
 msgstr "Дата реєстрації"
 
-msgid "Registration hash"
-msgstr "Хеш реєстрації"
-
 msgid "Registration successful"
 msgstr "Успішна реєстрація"
 
@@ -10976,6 +10994,12 @@ msgstr "Запити"
 msgid "SQL Lab"
 msgstr "Майстерня запитів"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 msgid "SQL Lab queries"
 msgstr "Збережені запити"
 
@@ -15145,6 +15169,9 @@ msgstr "Введіть значення"
 msgid "Type is required"
 msgstr "Тип обовʼязковий"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr "Тип діаграми, яку показувати у нитці"
 
@@ -15307,6 +15334,10 @@ msgstr "Скасувати дію"
 msgid "Undo?"
 msgstr "Скасувати?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr "Трапилася неочікувана помилка, перевірте журнал для подробиць"
+
 msgid "Unexpected error"
 msgstr "Неочікувана помилка"
 
@@ -16253,6 +16284,10 @@ msgstr "Чи показувати найменше чи найбільше зн
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "Чи показувати найменше чи найбільше значення на осі Y"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "Чи показувати динаміку"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "Чи показувати числові значення у комірках"
 
@@ -17780,6 +17815,10 @@ msgstr "значення за зростанням"
 msgid "value descending"
 msgstr "значення за спаданням"
 
+#, fuzzy
+msgid "valuename"
+msgstr "Назва таблиці"
+
 msgid "var"
 msgstr "дисперсія"
 
@@ -17828,25 +17867,8 @@ msgstr "your-project-1234-a1"
 msgid "zoom area"
 msgstr "ділянка масштабування"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
-msgstr ""
-
 msgid "© Layer attribution"
 msgstr "© Атрибут шару"
+
+msgid "№"
+msgstr ""
diff --git a/superset/translations/zh/LC_MESSAGES/messages.po b/superset/translations/zh/LC_MESSAGES/messages.po
index 226010d83b0..f45d80889ae 100644
--- a/superset/translations/zh/LC_MESSAGES/messages.po
+++ b/superset/translations/zh/LC_MESSAGES/messages.po
@@ -18,7 +18,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Apache Superset 0.22.1\n"
 "Report-Msgid-Bugs-To: zhouyao94@qq.com\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2019-01-04 22:19+0800\n"
 "Last-Translator: cdmikechen \n"
 "Language: zh\n"
@@ -27,7 +27,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1178,6 +1178,10 @@ msgstr "增加新的的颜色格式化器"
 msgid "Add new formatter"
 msgstr "新增格式化"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr "添加计算列"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "范围过滤"
@@ -1724,7 +1728,7 @@ msgstr "获取结构信息时出错:%s"
 msgid "An error occurred while fetching semantic layer types"
 msgstr "获取可用的CSS模板时出错"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "获取结构信息时出错:%s"
 
@@ -1797,7 +1801,7 @@ msgstr "更新值时出错。"
 msgid "An error occurred while pruning logs "
 msgstr "精简日志时出错 "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "渲染可视化时发生错误:%s"
 
@@ -4192,6 +4196,12 @@ msgstr "自定义SQL"
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr "此数据集无法启用自定义SQL即席查询、"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+msgid "Custom SQL fields cannot contain set operations."
+msgstr ""
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr ""
 
@@ -5623,7 +5633,7 @@ msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr "时长(毫秒)(1.40008 => 1ms 400µs 80ns)"
 
 #, fuzzy
-msgid "Duration in ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
 msgstr "时长(毫秒)(66000 => 1m 6s)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
@@ -9389,7 +9399,7 @@ msgstr "没有发现这样的列。若要在度量值上筛选,请尝试自定
 msgid "No table columns"
 msgstr "没有列"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "还没有 %s"
 
@@ -9486,6 +9496,10 @@ msgstr "未定义"
 msgid "Not equal to (≠)"
 msgstr "不等于(≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "图表 %(id)s 没有找到"
+
 #, fuzzy
 msgid "Not in"
 msgstr "Not In"
@@ -10533,6 +10547,12 @@ msgstr "过时"
 msgid "Proportional"
 msgstr "比例"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "已发布"
 
@@ -10803,9 +10823,6 @@ msgstr "预过滤"
 msgid "Registration date"
 msgstr "开始时间"
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -11320,6 +11337,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL 工具箱"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 #, fuzzy
 msgid "SQL Lab queries"
 msgstr "已保存查询"
@@ -15451,6 +15474,9 @@ msgstr "请输入值"
 msgid "Type is required"
 msgstr "类型是必需的"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -15594,6 +15620,10 @@ msgstr "撤销这个动作"
 msgid "Undo?"
 msgstr "撤消?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr "发生意外错误,请检查日志以了解详细信息"
+
 msgid "Unexpected error"
 msgstr "意外错误。"
 
@@ -16500,6 +16530,10 @@ msgstr "是否显示X轴的最小值和最大值"
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "是否显示Y轴的最小值和最大值"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "是否显示趋势线"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "是否在单元格内显示数值"
 
@@ -18106,6 +18140,10 @@ msgstr "升序"
 msgid "value descending"
 msgstr "降序"
 
+#, fuzzy
+msgid "valuename"
+msgstr "表名"
+
 #, fuzzy
 msgid "var"
 msgstr "变量"
@@ -18161,25 +18199,8 @@ msgstr ""
 msgid "zoom area"
 msgstr "缩放面积"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
+msgid "© Layer attribution"
 msgstr ""
 
-msgid "© Layer attribution"
+msgid "№"
 msgstr ""
diff --git a/superset/translations/zh_TW/LC_MESSAGES/messages.po b/superset/translations/zh_TW/LC_MESSAGES/messages.po
index 19f8694b271..851a3a6e415 100644
--- a/superset/translations/zh_TW/LC_MESSAGES/messages.po
+++ b/superset/translations/zh_TW/LC_MESSAGES/messages.po
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Apache Superset 0.22.1\n"
 "Report-Msgid-Bugs-To: bestlong168@gmail.com\n"
-"POT-Creation-Date: 2026-05-31 07:03-0700\n"
+"POT-Creation-Date: 2026-06-05 12:59+0300\n"
 "PO-Revision-Date: 2019-01-04 22:19+0800\n"
 "Last-Translator: Shao Yu-Lung <be...@gmail.com>\n"
 "Language: zh_TW\n"
@@ -26,7 +26,7 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.18.0\n"
+"Generated-By: Babel 2.17.0\n"
 
 msgid ""
 "\n"
@@ -1176,6 +1176,10 @@ msgstr "增加新的的顏色格式化器"
 msgid "Add new formatter"
 msgstr "新增格式化"
 
+#, fuzzy
+msgid "Add numbered column"
+msgstr "增加計算列"
+
 #, fuzzy
 msgid "Add or edit display controls"
 msgstr "範圍過濾"
@@ -1724,7 +1728,7 @@ msgstr "獲取結構訊息時出錯:%s"
 msgid "An error occurred while fetching semantic layer types"
 msgstr "獲取可用的CSS模板時出錯"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while fetching semantic layers"
 msgstr "獲取結構訊息時出錯:%s"
 
@@ -1797,7 +1801,7 @@ msgstr "更新值時出錯。"
 msgid "An error occurred while pruning logs "
 msgstr "精简日誌時出錯 "
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "An error occurred while refreshing the configuration schema"
 msgstr "渲染可視化時發生錯誤:%s"
 
@@ -4194,6 +4198,12 @@ msgstr "自定義 SQL"
 msgid "Custom SQL ad-hoc metrics are not enabled for this dataset"
 msgstr "此數據集無法啟用自定義 SQL 即席查詢、"
 
+msgid "Custom SQL fields cannot be parsed as a single SQL statement."
+msgstr ""
+
+msgid "Custom SQL fields cannot contain set operations."
+msgstr ""
+
 msgid "Custom SQL fields cannot contain sub-queries."
 msgstr ""
 
@@ -5627,7 +5637,7 @@ msgid "Duration in ms (100.40008 => 100ms 400µs 80ns)"
 msgstr "時長(毫秒)(1.40008 => 1ms 400µs 80ns)"
 
 #, fuzzy
-msgid "Duration in ms (10500 => 0:10.5)"
+msgid "Duration in ms (10500 => 0:00:10.5)"
 msgstr "時長(毫秒)(66000 => 1m 6s)"
 
 msgid "Duration in ms (66000 => 1m 6s)"
@@ -9395,7 +9405,7 @@ msgstr "没有發現這樣的列。若要在度量值上篩選,請嘗試自定
 msgid "No table columns"
 msgstr "没有列"
 
-#, fuzzy, python-format
+#, fuzzy
 msgid "No tasks yet"
 msgstr "還没有 %s"
 
@@ -9492,6 +9502,10 @@ msgstr "未定義"
 msgid "Not equal to (≠)"
 msgstr "不等於(≠)"
 
+#, fuzzy
+msgid "Not found"
+msgstr "圖表 %(id)s 没有找到"
+
 #, fuzzy
 msgid "Not in"
 msgstr "Not In"
@@ -10541,6 +10555,12 @@ msgstr "過時"
 msgid "Proportional"
 msgstr "比例"
 
+msgid "Public and privately shared sheets"
+msgstr ""
+
+msgid "Publicly shared sheets only"
+msgstr ""
+
 msgid "Published"
 msgstr "已發布"
 
@@ -10813,9 +10833,6 @@ msgstr "預過濾"
 msgid "Registration date"
 msgstr "開始時間"
 
-msgid "Registration hash"
-msgstr ""
-
 msgid "Registration successful"
 msgstr ""
 
@@ -11333,6 +11350,12 @@ msgstr "SQL"
 msgid "SQL Lab"
 msgstr "SQL 工具箱"
 
+msgid ""
+"SQL Lab cannot authorise a statement that could not be fully parsed. "
+"Qualify tables explicitly and avoid dynamic SQL inside stored-procedure "
+"or vendor-specific calls."
+msgstr ""
+
 #, fuzzy
 msgid "SQL Lab queries"
 msgstr "已保存查詢"
@@ -15464,6 +15487,9 @@ msgstr "請输入值"
 msgid "Type is required"
 msgstr "類型是必需的"
 
+msgid "Type of Google Sheets allowed"
+msgstr ""
+
 msgid "Type of chart to display in sparkline"
 msgstr ""
 
@@ -15607,6 +15633,10 @@ msgstr "還原這個動作"
 msgid "Undo?"
 msgstr "還原?"
 
+#, fuzzy
+msgid "Unexpected HTTP 401 response. Check your credentials."
+msgstr "發生意外錯誤,請檢查日誌以了解詳細訊息"
+
 msgid "Unexpected error"
 msgstr "意外錯誤。"
 
@@ -16513,6 +16543,10 @@ msgstr "是否顯示 X 軸的最小值和最大值"
 msgid "Whether to display the min and max values of the Y-axis"
 msgstr "是否顯示 Y 軸的最小值和最大值"
 
+#, fuzzy
+msgid "Whether to display the numbered column"
+msgstr "是否顯示趋势線"
+
 msgid "Whether to display the numerical values within the cells"
 msgstr "是否在單元格内顯示數值"
 
@@ -18118,6 +18152,10 @@ msgstr "升序"
 msgid "value descending"
 msgstr "降序"
 
+#, fuzzy
+msgid "valuename"
+msgstr "表名"
+
 #, fuzzy
 msgid "var"
 msgstr "變量"
@@ -18173,25 +18211,8 @@ msgstr ""
 msgid "zoom area"
 msgstr "縮放面積"
 
-#, python-brace-format
-msgid ""
-"{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;"
-"\n"
-"\n"
-"/** The classic emailregex.com regex for RFC 5322-compliant emails */\n"
-"export const rfc5322Email =\n"
-"  "
-"/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;"
-"\n"
-"\n"
-"/** A loose regex that allows Unicode characters, enforces length limits,"
-" and that's about it. */\n"
-"export const unicodeEmail = /^[^s@\"]{1,64}@[^s@]{1,255}$/u;\n"
-"export const idnEmail = unicodeEmail;\n"
-"\n"
-"export const browserEmail: RegExp =\n"
-"  /^[a-zA-Z0-9.!#$%&'*+/=?^_"
+msgid "© Layer attribution"
 msgstr ""
 
-msgid "© Layer attribution"
+msgid "№"
 msgstr ""