This is an automated email from the ASF dual-hosted git repository.
jscheffl pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new a14b7381398 Fix translations for toasts (#51674)
a14b7381398 is described below
commit a14b7381398fe868738279a8b165fac062eb93fa
Author: Brent Bovenzi <[email protected]>
AuthorDate: Fri Jun 13 00:39:27 2025 -0400
Fix translations for toasts (#51674)
---
.../ui/src/components/Clear/Run/ClearRunButton.tsx | 4 +-
.../ui/src/components/Clear/Run/ClearRunDialog.tsx | 5 ++-
.../Clear/TaskInstance/ClearTaskInstanceButton.tsx | 4 +-
.../Clear/TaskInstance/ClearTaskInstanceDialog.tsx | 5 ++-
.../src/airflow/ui/src/components/DeleteDialog.tsx | 2 +-
.../src/components/MarkAs/Run/MarkRunAsButton.tsx | 4 +-
.../src/components/MarkAs/Run/MarkRunAsDialog.tsx | 7 +++-
.../TaskInstance/MarkTaskInstanceAsButton.tsx | 6 ++-
.../TaskInstance/MarkTaskInstanceAsDialog.tsx | 6 ++-
.../src/airflow/ui/src/i18n/locales/en/admin.json | 21 ++++++++++-
.../src/airflow/ui/src/i18n/locales/en/common.json | 37 +++++++++++++++++++
.../airflow/ui/src/i18n/locales/en/components.json | 18 ++++++++-
.../src/airflow/ui/src/i18n/locales/en/dag.json | 13 +++++++
.../src/airflow/ui/src/i18n/locales/en/dags.json | 1 +
.../src/airflow/ui/src/pages/DeleteRunButton.tsx | 12 +++---
.../TaskInstances/DeleteTaskInstanceButton.tsx | 16 +++++---
.../src/airflow/ui/src/queries/useAddConnection.ts | 11 +++++-
.../src/airflow/ui/src/queries/useAddPool.ts | 11 ++++--
.../src/airflow/ui/src/queries/useAddVariable.ts | 11 ++++--
.../ui/src/queries/useBulkDeleteConnections.tsx | 10 ++++-
.../ui/src/queries/useBulkDeleteVariables.ts | 10 ++++-
.../src/airflow/ui/src/queries/useClearRun.ts | 18 +++++----
.../ui/src/queries/useClearTaskInstances.ts | 18 +++++----
.../ui/src/queries/useConnectionTypeMeta.ts | 43 ++++++++++++++++++----
.../airflow/ui/src/queries/useCreateBackfill.ts | 10 +++--
.../src/airflow/ui/src/queries/useDagParams.ts | 7 +++-
.../src/airflow/ui/src/queries/useDagParsing.ts | 22 ++++++-----
.../airflow/ui/src/queries/useDeleteConnection.ts | 28 +++++++++-----
.../src/airflow/ui/src/queries/useDeleteDag.ts | 28 +++++++++-----
.../src/airflow/ui/src/queries/useDeleteDagRun.ts | 8 ++--
.../src/airflow/ui/src/queries/useDeletePool.ts | 28 +++++++++-----
.../ui/src/queries/useDeleteTaskInstance.ts | 12 ++++--
.../airflow/ui/src/queries/useDeleteVariable.ts | 28 +++++++++-----
.../airflow/ui/src/queries/useEditConnection.tsx | 11 ++++--
.../src/airflow/ui/src/queries/useEditPool.ts | 10 ++++-
.../src/airflow/ui/src/queries/useEditVariable.ts | 10 ++++-
.../airflow/ui/src/queries/useImportVariables.ts | 12 +++++-
.../src/airflow/ui/src/queries/usePatchDagRun.ts | 20 ++++++----
.../airflow/ui/src/queries/usePatchTaskInstance.ts | 20 ++++++----
.../src/airflow/ui/src/queries/useTrigger.ts | 7 ++--
40 files changed, 400 insertions(+), 154 deletions(-)
diff --git
a/airflow-core/src/airflow/ui/src/components/Clear/Run/ClearRunButton.tsx
b/airflow-core/src/airflow/ui/src/components/Clear/Run/ClearRunButton.tsx
index 0124598fd20..6d5fe9f1b60 100644
--- a/airflow-core/src/airflow/ui/src/components/Clear/Run/ClearRunButton.tsx
+++ b/airflow-core/src/airflow/ui/src/components/Clear/Run/ClearRunButton.tsx
@@ -54,10 +54,10 @@ const ClearRunButton = ({ dagRun, isHotkeyEnabled = false,
withText = true }: Pr
>
<Box>
<ActionButton
- actionName={translate("dags:runAndTaskActions.clear.button", { type:
"Run" })}
+ actionName={translate("dags:runAndTaskActions.clear.button", { type:
translate("dagRun_one") })}
icon={<CgRedo />}
onClick={onOpen}
- text={translate("dags:runAndTaskActions.clear.button", { type: "Run"
})}
+ text={translate("dags:runAndTaskActions.clear.button", { type:
translate("dagRun_one") })}
withText={withText}
/>
diff --git
a/airflow-core/src/airflow/ui/src/components/Clear/Run/ClearRunDialog.tsx
b/airflow-core/src/airflow/ui/src/components/Clear/Run/ClearRunDialog.tsx
index 0dda538103e..696ada0ee38 100644
--- a/airflow-core/src/airflow/ui/src/components/Clear/Run/ClearRunDialog.tsx
+++ b/airflow-core/src/airflow/ui/src/components/Clear/Run/ClearRunDialog.tsx
@@ -68,7 +68,10 @@ const ClearRunDialog = ({ dagRun, onClose, open }: Props) =>
{
<Dialog.Header>
<VStack align="start" gap={4}>
<Heading size="xl">
- <strong>{translate("dags:runAndTaskActions.clear.title", { type:
"Run" })}: </strong> {dagRunId}
+ <strong>
+ {translate("dags:runAndTaskActions.clear.title", { type:
translate("dagRun_one") })}:{" "}
+ </strong>{" "}
+ {dagRunId}
</Heading>
</VStack>
</Dialog.Header>
diff --git
a/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceButton.tsx
b/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceButton.tsx
index e9a4bdc9885..4f55f8480fa 100644
---
a/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceButton.tsx
+++
b/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceButton.tsx
@@ -54,10 +54,10 @@ const ClearTaskInstanceButton = ({ isHotkeyEnabled = false,
taskInstance, withTe
>
<Box>
<ActionButton
- actionName={translate("runAndTaskActions.clear.button", { type:
"Task Instance" })}
+ actionName={translate("runAndTaskActions.clear.button", { type:
translate("taskInstance_one") })}
icon={<CgRedo />}
onClick={onOpen}
- text={translate("runAndTaskActions.clear.button", { type: "Task
Instance" })}
+ text={translate("runAndTaskActions.clear.button", { type:
translate("taskInstance_one") })}
withText={withText}
/>
diff --git
a/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceDialog.tsx
b/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceDialog.tsx
index 6f53c07d647..3f0906d8725 100644
---
a/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceDialog.tsx
+++
b/airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceDialog.tsx
@@ -95,7 +95,10 @@ const ClearTaskInstanceDialog = ({ onClose, open,
taskInstance }: Props) => {
<VStack align="start" gap={4}>
<Heading size="xl">
<strong>
- {translate("dags:runAndTaskActions.clear.dialog.title", {
type: "Task Instance" })}:
+ {translate("dags:runAndTaskActions.clear.dialog.title", {
+ type: translate("taskInstance_one"),
+ })}
+ :
</strong>{" "}
{taskInstance.task_display_name} <Time
datetime={taskInstance.start_date} />
</Heading>
diff --git a/airflow-core/src/airflow/ui/src/components/DeleteDialog.tsx
b/airflow-core/src/airflow/ui/src/components/DeleteDialog.tsx
index b77262838bf..01db1ada889 100644
--- a/airflow-core/src/airflow/ui/src/components/DeleteDialog.tsx
+++ b/airflow-core/src/airflow/ui/src/components/DeleteDialog.tsx
@@ -55,7 +55,7 @@ const DeleteDialog: React.FC<DeleteDialogProps> = ({
<Dialog.CloseTrigger />
<Dialog.Body>
<Text>{translate("modal.delete.confirmation", { resourceName
})}</Text>
- <Text color="red.500" fontWeight="bold" mt={4}>
+ <Text color="fg.error" fontWeight="bold" mt={4}>
{warningText}
</Text>
</Dialog.Body>
diff --git
a/airflow-core/src/airflow/ui/src/components/MarkAs/Run/MarkRunAsButton.tsx
b/airflow-core/src/airflow/ui/src/components/MarkAs/Run/MarkRunAsButton.tsx
index 72e2c9a434a..aaff49bd35a 100644
--- a/airflow-core/src/airflow/ui/src/components/MarkAs/Run/MarkRunAsButton.tsx
+++ b/airflow-core/src/airflow/ui/src/components/MarkAs/Run/MarkRunAsButton.tsx
@@ -64,10 +64,10 @@ const MarkRunAsButton = ({ dagRun, isHotkeyEnabled = false,
withText = true }: P
<Menu.Root positioning={{ gutter: 0, placement: "bottom" }}>
<Menu.Trigger asChild>
<ActionButton
- actionName={translate("dags:runAndTaskActions.markAs.button", {
type: "Run" })}
+ actionName={translate("dags:runAndTaskActions.markAs.button", {
type: translate("dagRun_one") })}
flexDirection="row-reverse"
icon={<MdArrowDropDown />}
- text={translate("dags:runAndTaskActions.markAs.button", { type:
"Run" })}
+ text={translate("dags:runAndTaskActions.markAs.button", { type:
translate("dagRun_one") })}
withText={withText}
/>
</Menu.Trigger>
diff --git
a/airflow-core/src/airflow/ui/src/components/MarkAs/Run/MarkRunAsDialog.tsx
b/airflow-core/src/airflow/ui/src/components/MarkAs/Run/MarkRunAsDialog.tsx
index 48c4ac64fd7..c91f05d4e95 100644
--- a/airflow-core/src/airflow/ui/src/components/MarkAs/Run/MarkRunAsDialog.tsx
+++ b/airflow-core/src/airflow/ui/src/components/MarkAs/Run/MarkRunAsDialog.tsx
@@ -47,8 +47,11 @@ const MarkRunAsDialog = ({ dagRun, onClose, open, state }:
Props) => {
<Dialog.Header>
<VStack align="start" gap={4}>
<Heading size="xl">
- {translate("dags:runAndTaskActions.markAs.title", { state, type:
"Run" })}: {dagRunId}{" "}
- <StateBadge state={state} />
+ {translate("dags:runAndTaskActions.markAs.title", {
+ state,
+ type: translate("dagRun_one"),
+ })}
+ : {dagRunId} <StateBadge state={state} />
</Heading>
</VStack>
</Dialog.Header>
diff --git
a/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsButton.tsx
b/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsButton.tsx
index f75607d5a3f..aa8ab4995c6 100644
---
a/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsButton.tsx
+++
b/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsButton.tsx
@@ -65,10 +65,12 @@ const MarkTaskInstanceAsButton = ({ isHotkeyEnabled =
false, taskInstance, withT
<Menu.Root positioning={{ gutter: 0, placement: "bottom" }}>
<Menu.Trigger asChild>
<ActionButton
- actionName={translate("dags:runAndTaskActions.markAs.button", {
type: "Task Instance" })}
+ actionName={translate("dags:runAndTaskActions.markAs.button", {
+ type: translate("taskInstance_one"),
+ })}
flexDirection="row-reverse"
icon={<MdArrowDropDown />}
- text={translate("dags:runAndTaskActions.markAs.button", { type:
"Task Instance" })}
+ text={translate("dags:runAndTaskActions.markAs.button", { type:
translate("taskInstance_one") })}
withText={withText}
/>
</Menu.Trigger>
diff --git
a/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsDialog.tsx
b/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsDialog.tsx
index 21ebb1d12a6..afde1862458 100644
---
a/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsDialog.tsx
+++
b/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsDialog.tsx
@@ -90,7 +90,11 @@ const MarkTaskInstanceAsDialog = ({ onClose, open, state,
taskInstance }: Props)
<VStack align="start" gap={4}>
<Heading size="xl">
<strong>
- {translate("dags:runAndTaskActions.markAs.title", { state,
type: "Task Instance" })}:
+ {translate("dags:runAndTaskActions.markAs.title", {
+ state,
+ type: translate("taskInstance_one"),
+ })}
+ :
</strong>{" "}
{taskInstance.task_display_name} <Time
datetime={taskInstance.start_date} />{" "}
<StateBadge state={state} />
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/en/admin.json
b/airflow-core/src/airflow/ui/src/i18n/locales/en/admin.json
index c8684c15927..aeb93b92c76 100644
--- a/airflow-core/src/airflow/ui/src/i18n/locales/en/admin.json
+++ b/airflow-core/src/airflow/ui/src/i18n/locales/en/admin.json
@@ -19,6 +19,8 @@
"host": "Host",
"port": "Port"
},
+ "connection_one": "Connection",
+ "connection_other": "Connections",
"delete":{
"deleteConnection_one": "Delete 1 connection",
"deleteConnection_other": "Delete {{count}} connections",
@@ -40,7 +42,18 @@
"noRowMessage": "No connections found",
"searchPlaceholder": "Search Connections",
"test": "Test Connection",
- "testDisabled": "Test connection feature is disabled. Please contact an
administrator to enable it."
+ "testDisabled": "Test connection feature is disabled. Please contact an
administrator to enable it.",
+ "typeMeta": {
+ "error": "Failed to retrieve Connection Type Meta",
+ "standardFields": {
+ "description": "Description",
+ "host": "Host",
+ "login": "Login",
+ "password": "Password",
+ "port": "Port",
+ "url_schema": "Schema"
+ }
+ }
},
"deleteActions":{
"button": "Delete",
@@ -81,6 +94,8 @@
"slots": "Slots"
},
"noPoolsFound": "No pools found",
+ "pool_one": "Pool",
+ "pool_other": "Pools",
"searchPlaceholder": "Search Pools",
"sort": {
"asc": "Name (A-Z)",
@@ -139,6 +154,8 @@
"uploadPlaceholder": "Upload a JSON file containing variables (e.g.,
{\"key\": \"value\", ...})"
},
"noRowsMessage": "No variables found",
- "searchPlaceholder": "Search Keys"
+ "searchPlaceholder": "Search Keys",
+ "variable_one": "Variable",
+ "variable_other": "Variables"
}
}
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/en/common.json
b/airflow-core/src/airflow/ui/src/i18n/locales/en/common.json
index 0cebcabf44a..6cebff264bd 100644
--- a/airflow-core/src/airflow/ui/src/i18n/locales/en/common.json
+++ b/airflow-core/src/airflow/ui/src/i18n/locales/en/common.json
@@ -223,6 +223,43 @@
"title": "Select Timezone",
"utc": "UTC (Coordinated Universal Time)"
},
+ "toaster": {
+ "bulkDelete": {
+ "error": "Bulk Delete {{resourceName}} Request Failed",
+ "success": {
+ "description": "{{count}} {{resourceName}} have been successfully
deleted. Keys: {{keys}}",
+ "title": "Bulk Delete {{resourceName}} Request Submitted"
+ }
+ },
+ "create": {
+ "error": "Create {{resourceName}} Request Failed",
+ "success": {
+ "description": "{{resourceName}} has been successfully created.",
+ "title": "Create {{resourceName}} Request Submitted"
+ }
+ },
+ "delete": {
+ "error": "Delete {{resourceName}} Request Failed",
+ "success": {
+ "description": "{{resourceName}} has been successfully deleted.",
+ "title": "Delete {{resourceName}} Request Submitted"
+ }
+ },
+ "import": {
+ "error": "Import {{resourceName}} Request Failed",
+ "success": {
+ "description": "{{count}} {{resourceName}} have been successfully
imported.",
+ "title": "Import {{resourceName}} Request Submitted"
+ }
+ },
+ "update": {
+ "error": "Update {{resourceName}} Request Failed",
+ "success": {
+ "description": "{{resourceName}} has been successfully updated.",
+ "title": "Update {{resourceName}} Request Submitted"
+ }
+ }
+ },
"triggered": "Triggered",
"tryNumber": "Try Number",
"user": "User",
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/en/components.json
b/airflow-core/src/airflow/ui/src/i18n/locales/en/components.json
index e1e5b3973df..1e48b630632 100644
--- a/airflow-core/src/airflow/ui/src/i18n/locales/en/components.json
+++ b/airflow-core/src/airflow/ui/src/i18n/locales/en/components.json
@@ -14,8 +14,18 @@
"selectDescription": "Run this Dag for a range of dates",
"selectLabel": "Backfill",
"title": "Run Backfill",
+ "toaster": {
+ "success": {
+ "description": "Backfill jobs have been successfully triggered.",
+ "title": "Backfill generated"
+ }
+ },
"tooltip": "Backfill requires a schedule",
- "unpause": "Unpause {{dag_display_name}} on trigger"
+ "unpause": "Unpause {{dag_display_name}} on trigger",
+ "validation": {
+ "datesRequired": "Both Data Interval Start Date and End Date must be
provided.",
+ "startBeforeEnd": "Data Interval Start Date must be less than or equal
to Data Interval End Date."
+ }
},
"banner": {
"backfillInProgress": "Backfill in progress",
@@ -95,6 +105,12 @@
"selectDescription": "Trigger a single run of this Dag",
"selectLabel": "Single Run",
"title": "Trigger Dag",
+ "toaster": {
+ "success": {
+ "description": "Dag run has been successfully triggered.",
+ "title": "Dag Run Triggered"
+ }
+ },
"unpause": "Unpause {{dagDisplayName}} on trigger"
},
"trimText": {
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/en/dag.json
b/airflow-core/src/airflow/ui/src/i18n/locales/en/dag.json
index 3c3cd336341..314a6861dbd 100644
--- a/airflow-core/src/airflow/ui/src/i18n/locales/en/dag.json
+++ b/airflow-core/src/airflow/ui/src/i18n/locales/en/dag.json
@@ -66,6 +66,19 @@
"label": "Graph Direction"
}
},
+ "paramsFailed": "Failed to load params",
+ "parse": {
+ "toaster": {
+ "error": {
+ "description": "Dag parsing request failed. There could be pending
parsing requests yet to be processed.",
+ "title": "Dag Failed to Reparse"
+ },
+ "success": {
+ "description": "Dag should reparse soon.",
+ "title": "Reparsing request submitted successfully"
+ }
+ }
+ },
"tabs": {
"assetEvents": "Asset Events",
"auditLog": "Audit Log",
diff --git a/airflow-core/src/airflow/ui/src/i18n/locales/en/dags.json
b/airflow-core/src/airflow/ui/src/i18n/locales/en/dags.json
index 75dc4d692b8..c804a985fb5 100644
--- a/airflow-core/src/airflow/ui/src/i18n/locales/en/dags.json
+++ b/airflow-core/src/airflow/ui/src/i18n/locales/en/dags.json
@@ -24,6 +24,7 @@
"clear": {
"button": "Clear {{type}}",
"buttonTooltip": "Press shift+c to clear",
+ "error": "Failed to clear {{type}}",
"title": "Clear {{type}}"
},
"delete": {
diff --git a/airflow-core/src/airflow/ui/src/pages/DeleteRunButton.tsx
b/airflow-core/src/airflow/ui/src/pages/DeleteRunButton.tsx
index 175d1fabc56..1ecf39c991d 100644
--- a/airflow-core/src/airflow/ui/src/pages/DeleteRunButton.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/DeleteRunButton.tsx
@@ -45,11 +45,11 @@ const DeleteRunButton = ({ dagRun, withText = true }:
DeleteRunButtonProps) => {
return (
<>
<ActionButton
- actionName={translate("dags:runAndTaskActions.delete.button", { type:
"Run" })}
+ actionName={translate("dags:runAndTaskActions.delete.button", { type:
translate("dagRun_one") })}
colorPalette="red"
icon={<FiTrash2 />}
onClick={onOpen}
- text={translate("dags:runAndTaskActions.delete.button", { type: "Run"
})}
+ text={translate("dags:runAndTaskActions.delete.button", { type:
translate("dagRun_one") })}
variant="solid"
withText={withText}
/>
@@ -66,10 +66,12 @@ const DeleteRunButton = ({ dagRun, withText = true }:
DeleteRunButtonProps) => {
open={open}
resourceName={translate("dags:runAndTaskActions.delete.dialog.resourceName", {
id: dagRun.dag_run_id,
- type: "Run",
+ type: translate("dagRun_one"),
+ })}
+ title={translate("dags:runAndTaskActions.delete.dialog.title", { type:
translate("dagRun_one") })}
+ warningText={translate("dags:runAndTaskActions.delete.dialog.warning",
{
+ type: translate("dagRun_one"),
})}
- title={translate("dags:runAndTaskActions.delete.dialog.title", { type:
"Run" })}
- warningText={translate("dags:runAndTaskActions.delete.dialog.warning",
{ type: "Run" })}
/>
</>
);
diff --git
a/airflow-core/src/airflow/ui/src/pages/TaskInstances/DeleteTaskInstanceButton.tsx
b/airflow-core/src/airflow/ui/src/pages/TaskInstances/DeleteTaskInstanceButton.tsx
index c220b4f5f46..7759d8d628f 100644
---
a/airflow-core/src/airflow/ui/src/pages/TaskInstances/DeleteTaskInstanceButton.tsx
+++
b/airflow-core/src/airflow/ui/src/pages/TaskInstances/DeleteTaskInstanceButton.tsx
@@ -47,11 +47,13 @@ const DeleteTaskInstanceButton = ({ taskInstance, withText
= true }: DeleteTaskI
return (
<>
<ActionButton
- actionName={translate("dags:runAndTaskActions.delete.button", { type:
"Task Instance" })}
+ actionName={translate("dags:runAndTaskActions.delete.button", {
+ type: translate("taskInstance_one"),
+ })}
colorPalette="red"
icon={<FiTrash2 />}
onClick={onOpen}
- text={translate("dags:runAndTaskActions.delete.button", { type: "Task
Instance" })}
+ text={translate("dags:runAndTaskActions.delete.button", { type:
translate("taskInstance_one") })}
variant="solid"
withText={withText}
/>
@@ -70,10 +72,14 @@ const DeleteTaskInstanceButton = ({ taskInstance, withText
= true }: DeleteTaskI
open={open}
resourceName={translate("dags:runAndTaskActions.delete.dialog.resourceName", {
id: taskInstance.task_id,
- type: "Task Instance",
+ type: translate("taskInstance_one"),
+ })}
+ title={translate("dags:runAndTaskActions.delete.dialog.title", {
+ type: translate("taskInstance_one"),
+ })}
+ warningText={translate("dags:runAndTaskActions.delete.dialog.warning",
{
+ type: translate("taskInstance_one"),
})}
- title={translate("dags:runAndTaskActions.delete.dialog.title", { type:
"Task Instance" })}
- warningText={translate("dags:runAndTaskActions.delete.dialog.warning",
{ type: "Task Instance" })}
/>
</>
);
diff --git a/airflow-core/src/airflow/ui/src/queries/useAddConnection.ts
b/airflow-core/src/airflow/ui/src/queries/useAddConnection.ts
index 24aa2715883..f5c9bc1f8a5 100644
--- a/airflow-core/src/airflow/ui/src/queries/useAddConnection.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useAddConnection.ts
@@ -18,6 +18,7 @@
*/
import { useQueryClient } from "@tanstack/react-query";
import { useState } from "react";
+import { useTranslation } from "react-i18next";
import { useConnectionServiceGetConnectionsKey,
useConnectionServicePostConnection } from "openapi/queries";
import { toaster } from "src/components/ui";
@@ -26,6 +27,7 @@ import type { ConnectionBody } from
"src/pages/Connections/Connections";
export const useAddConnection = ({ onSuccessConfirm }: { onSuccessConfirm: ()
=> void }) => {
const queryClient = useQueryClient();
const [error, setError] = useState<unknown>(undefined);
+ const { t: translate } = useTranslation(["common", "admin"]);
const onSuccess = async () => {
await queryClient.invalidateQueries({
@@ -33,8 +35,13 @@ export const useAddConnection = ({ onSuccessConfirm }: {
onSuccessConfirm: () =>
});
toaster.create({
- description: "Connection has been added successfully",
- title: "Connection Add Request Submitted",
+ description: translate("toaster.success.description", {
+ resourceName: translate("admin:connections.connection_one"),
+ }),
+ title: translate("toaster.success.title", {
+ action: translate("toaster.create"),
+ resourceName: translate("admin:connections.connection_one"),
+ }),
type: "success",
});
diff --git a/airflow-core/src/airflow/ui/src/queries/useAddPool.ts
b/airflow-core/src/airflow/ui/src/queries/useAddPool.ts
index 31d8e98986a..e96085bc565 100644
--- a/airflow-core/src/airflow/ui/src/queries/useAddPool.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useAddPool.ts
@@ -18,6 +18,7 @@
*/
import { useQueryClient } from "@tanstack/react-query";
import { useState } from "react";
+import { useTranslation } from "react-i18next";
import { usePoolServiceGetPoolsKey, usePoolServicePostPool } from
"openapi/queries";
import { toaster } from "src/components/ui";
@@ -26,15 +27,19 @@ import type { PoolBody } from "src/pages/Pools/PoolForm";
export const useAddPool = ({ onSuccessConfirm }: { onSuccessConfirm: () =>
void }) => {
const queryClient = useQueryClient();
const [error, setError] = useState<unknown>(undefined);
-
+ const { t: translate } = useTranslation(["common", "admin"]);
const onSuccess = async () => {
await queryClient.invalidateQueries({
queryKey: [usePoolServiceGetPoolsKey],
});
toaster.create({
- description: "Pool has been added successfully",
- title: "Pool Add Request Submitted",
+ description: translate("toaster.create.success.description", {
+ resourceName: translate("admin:pools.pool_one"),
+ }),
+ title: translate("toaster.create.success.title", {
+ resourceName: translate("admin:pools.pool_one"),
+ }),
type: "success",
});
diff --git a/airflow-core/src/airflow/ui/src/queries/useAddVariable.ts
b/airflow-core/src/airflow/ui/src/queries/useAddVariable.ts
index acc88788248..07248b27617 100644
--- a/airflow-core/src/airflow/ui/src/queries/useAddVariable.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useAddVariable.ts
@@ -18,6 +18,7 @@
*/
import { useQueryClient } from "@tanstack/react-query";
import { useState } from "react";
+import { useTranslation } from "react-i18next";
import { useVariableServiceGetVariablesKey, useVariableServicePostVariable }
from "openapi/queries";
import { toaster } from "src/components/ui";
@@ -26,15 +27,19 @@ import type { VariableBody } from
"src/pages/Variables/ManageVariable/VariableFo
export const useAddVariable = ({ onSuccessConfirm }: { onSuccessConfirm: () =>
void }) => {
const queryClient = useQueryClient();
const [error, setError] = useState<unknown>(undefined);
-
+ const { t: translate } = useTranslation(["common", "admin"]);
const onSuccess = async () => {
await queryClient.invalidateQueries({
queryKey: [useVariableServiceGetVariablesKey],
});
toaster.create({
- description: "Variable has been added successfully",
- title: "Variable Add Request Submitted",
+ description: translate("toaster.create.success.description", {
+ resourceName: translate("admin:variables.variable_one"),
+ }),
+ title: translate("toaster.create.success.title", {
+ resourceName: translate("admin:variables.variable_one"),
+ }),
type: "success",
});
diff --git
a/airflow-core/src/airflow/ui/src/queries/useBulkDeleteConnections.tsx
b/airflow-core/src/airflow/ui/src/queries/useBulkDeleteConnections.tsx
index f2cd7d7361a..d56f8e0fa0b 100644
--- a/airflow-core/src/airflow/ui/src/queries/useBulkDeleteConnections.tsx
+++ b/airflow-core/src/airflow/ui/src/queries/useBulkDeleteConnections.tsx
@@ -18,6 +18,7 @@
*/
import { useQueryClient } from "@tanstack/react-query";
import { useState } from "react";
+import { useTranslation } from "react-i18next";
import { useConnectionServiceBulkConnections,
useConnectionServiceGetConnectionsKey } from "openapi/queries";
import { toaster } from "src/components/ui";
@@ -30,6 +31,7 @@ type Props = {
export const useBulkDeleteConnections = ({ clearSelections, onSuccessConfirm
}: Props) => {
const queryClient = useQueryClient();
const [error, setError] = useState<unknown>(undefined);
+ const { t: translate } = useTranslation(["common", "admin"]);
const onSuccess = async (responseData: { delete?: { errors: Array<unknown>;
success: Array<string> } }) => {
await queryClient.invalidateQueries({
@@ -47,8 +49,12 @@ export const useBulkDeleteConnections = ({ clearSelections,
onSuccessConfirm }:
});
} else if (Array.isArray(success) && success.length > 0) {
toaster.create({
- description: `${success.length} variables deleted successfully.
Keys: ${success.join(", ")}`,
- title: "Delete Variables Request Successful",
+ description: translate("toaster.bulkDelete.success.description", {
+ count: success.length,
+ keys: success.join(", "),
+ resourceName: translate("admin:connections.connection_other"),
+ }),
+ title: translate("toaster.bulkDelete.success.title"),
type: "success",
});
clearSelections();
diff --git a/airflow-core/src/airflow/ui/src/queries/useBulkDeleteVariables.ts
b/airflow-core/src/airflow/ui/src/queries/useBulkDeleteVariables.ts
index 7fa1447436d..dd197a237bc 100644
--- a/airflow-core/src/airflow/ui/src/queries/useBulkDeleteVariables.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useBulkDeleteVariables.ts
@@ -18,6 +18,7 @@
*/
import { useQueryClient } from "@tanstack/react-query";
import { useState } from "react";
+import { useTranslation } from "react-i18next";
import { useVariableServiceBulkVariables, useVariableServiceGetVariablesKey }
from "openapi/queries";
import { toaster } from "src/components/ui";
@@ -30,6 +31,7 @@ type Props = {
export const useBulkDeleteVariables = ({ clearSelections, onSuccessConfirm }:
Props) => {
const queryClient = useQueryClient();
const [error, setError] = useState<unknown>(undefined);
+ const { t: translate } = useTranslation(["common", "admin"]);
const onSuccess = async (responseData: { delete?: { errors: Array<unknown>;
success: Array<string> } }) => {
await queryClient.invalidateQueries({
@@ -47,8 +49,12 @@ export const useBulkDeleteVariables = ({ clearSelections,
onSuccessConfirm }: Pr
});
} else if (Array.isArray(success) && success.length > 0) {
toaster.create({
- description: `${success.length} variables deleted successfully.
Keys: ${success.join(", ")}`,
- title: "Delete Variables Request Successful",
+ description: translate("toaster.bulkDelete.success.description", {
+ count: success.length,
+ keys: success.join(", "),
+ resourceName: translate("admin:variables.variable_other"),
+ }),
+ title: translate("toaster.bulkDelete.success.title"),
type: "success",
});
clearSelections();
diff --git a/airflow-core/src/airflow/ui/src/queries/useClearRun.ts
b/airflow-core/src/airflow/ui/src/queries/useClearRun.ts
index 1c7a80d2a99..2fe1dd10478 100644
--- a/airflow-core/src/airflow/ui/src/queries/useClearRun.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useClearRun.ts
@@ -17,6 +17,7 @@
* under the License.
*/
import { useQueryClient } from "@tanstack/react-query";
+import { useTranslation } from "react-i18next";
import {
useDagRunServiceClearDagRun,
@@ -30,14 +31,6 @@ import { toaster } from "src/components/ui";
import { useClearDagRunDryRunKey } from "./useClearDagRunDryRun";
-const onError = () => {
- toaster.create({
- description: "Clear Dag Run request failed",
- title: "Failed to clear the Dag Run",
- type: "error",
- });
-};
-
export const useClearDagRun = ({
dagId,
dagRunId,
@@ -48,6 +41,15 @@ export const useClearDagRun = ({
onSuccessConfirm: () => void;
}) => {
const queryClient = useQueryClient();
+ const { t: translate } = useTranslation("dags");
+
+ const onError = (error: Error) => {
+ toaster.create({
+ description: error.message,
+ title: translate("dags:runAndTaskActions.clear.error", { type:
translate("dagRun_one") }),
+ type: "error",
+ });
+ };
const onSuccess = async () => {
const queryKeys = [
diff --git a/airflow-core/src/airflow/ui/src/queries/useClearTaskInstances.ts
b/airflow-core/src/airflow/ui/src/queries/useClearTaskInstances.ts
index 205f6faa072..b4e8f38c05b 100644
--- a/airflow-core/src/airflow/ui/src/queries/useClearTaskInstances.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useClearTaskInstances.ts
@@ -17,6 +17,7 @@
* under the License.
*/
import { useQueryClient } from "@tanstack/react-query";
+import { useTranslation } from "react-i18next";
import {
UseDagRunServiceGetDagRunKeyFn,
@@ -31,14 +32,6 @@ import { toaster } from "src/components/ui";
import { useClearTaskInstancesDryRunKey } from "./useClearTaskInstancesDryRun";
import { usePatchTaskInstanceDryRunKey } from "./usePatchTaskInstanceDryRun";
-const onError = () => {
- toaster.create({
- description: "Clear Task Instance request failed",
- title: "Failed to clear the Task Instance",
- type: "error",
- });
-};
-
export const useClearTaskInstances = ({
dagId,
dagRunId,
@@ -49,6 +42,15 @@ export const useClearTaskInstances = ({
onSuccessConfirm: () => void;
}) => {
const queryClient = useQueryClient();
+ const { t: translate } = useTranslation("dags");
+
+ const onError = (error: Error) => {
+ toaster.create({
+ description: error.message,
+ title: translate("dags:runAndTaskActions.clear.error", { type:
translate("taskInstance_one") }),
+ type: "error",
+ });
+ };
const onSuccess = async (
_: TaskInstanceCollectionResponse,
diff --git a/airflow-core/src/airflow/ui/src/queries/useConnectionTypeMeta.ts
b/airflow-core/src/airflow/ui/src/queries/useConnectionTypeMeta.ts
index 5f6f5c88267..f24f2d303a4 100644
--- a/airflow-core/src/airflow/ui/src/queries/useConnectionTypeMeta.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useConnectionTypeMeta.ts
@@ -16,6 +16,8 @@
* specific language governing permissions and limitations
* under the License.
*/
+import { useTranslation } from "react-i18next";
+
import { useConnectionServiceHookMetaData } from "openapi/queries";
import { toaster } from "src/components/ui";
@@ -41,6 +43,7 @@ export type ConnectionMetaEntry = {
type ConnectionMeta = Array<ConnectionMetaEntry>;
export const useConnectionTypeMeta = () => {
+ const { t: translate } = useTranslation("admin");
const { data, error, isPending }: { data?: ConnectionMeta; error?: unknown;
isPending: boolean } =
useConnectionServiceHookMetaData();
@@ -51,8 +54,8 @@ export const useConnectionTypeMeta = () => {
: String(Boolean(error) ? error : ""); // Convert other types (e.g.,
numbers, strings) to string
toaster.create({
- description: `Connection Type Meta request failed. Error:
${errorDescription}`,
- title: "Failed to retrieve Connection Type Meta",
+ description: errorDescription,
+ title: translate("admin:connections.typeMeta.error"),
type: "error",
});
}
@@ -62,12 +65,36 @@ export const useConnectionTypeMeta = () => {
const keysList: Array<string> = [];
const defaultStandardFields: StandardFieldSpec | undefined = {
- description: { hidden: false, placeholder: undefined, title: "Description"
},
- host: { hidden: false, placeholder: undefined, title: "Host" },
- login: { hidden: false, placeholder: undefined, title: "Login" },
- password: { hidden: false, placeholder: undefined, title: "Password" },
- port: { hidden: false, placeholder: undefined, title: "Port" },
- url_schema: { hidden: false, placeholder: undefined, title: "Schema" },
+ description: {
+ hidden: false,
+ placeholder: undefined,
+ title:
translate("admin:connections.typeMeta.standardFields.description"),
+ },
+ host: {
+ hidden: false,
+ placeholder: undefined,
+ title: translate("admin:connections.typeMeta.standardFields.host"),
+ },
+ login: {
+ hidden: false,
+ placeholder: undefined,
+ title: translate("admin:connections.typeMeta.standardFields.login"),
+ },
+ password: {
+ hidden: false,
+ placeholder: undefined,
+ title: translate("admin:connections.typeMeta.standardFields.password"),
+ },
+ port: {
+ hidden: false,
+ placeholder: undefined,
+ title: translate("admin:connections.typeMeta.standardFields.port"),
+ },
+ url_schema: {
+ hidden: false,
+ placeholder: undefined,
+ title: translate("admin:connections.typeMeta.standardFields.url_schema"),
+ },
};
const mergeWithDefaults = (
diff --git a/airflow-core/src/airflow/ui/src/queries/useCreateBackfill.ts
b/airflow-core/src/airflow/ui/src/queries/useCreateBackfill.ts
index faebe834a16..673f7d5a82d 100644
--- a/airflow-core/src/airflow/ui/src/queries/useCreateBackfill.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useCreateBackfill.ts
@@ -18,6 +18,7 @@
*/
import { useQueryClient } from "@tanstack/react-query";
import { useState } from "react";
+import { useTranslation } from "react-i18next";
import { useBackfillServiceCreateBackfill,
useBackfillServiceListBackfillsUiKey } from "openapi/queries";
import type { CreateBackfillData } from "openapi/requests/types.gen";
@@ -27,14 +28,15 @@ export const useCreateBackfill = ({ onSuccessConfirm }: {
onSuccessConfirm: () =
const [dateValidationError, setDateValidationError] =
useState<unknown>(undefined);
const [error, setError] = useState<unknown>(undefined);
const queryClient = useQueryClient();
+ const { t: translate } = useTranslation("components");
const onSuccess = async () => {
await queryClient.invalidateQueries({
queryKey: [useBackfillServiceListBackfillsUiKey],
});
toaster.create({
- description: "Backfill jobs have been successfully triggered.",
- title: "Backfill generated",
+ description: translate("backfill.toaster.success.description"),
+ title: translate("backfill.toaster.success.title"),
type: "success",
});
onSuccessConfirm();
@@ -50,7 +52,7 @@ export const useCreateBackfill = ({ onSuccessConfirm }: {
onSuccessConfirm: () =
if (data.requestBody.from_date === "" || data.requestBody.to_date === "") {
setDateValidationError({
body: {
- detail: "Both Data Interval Start Date and End Date must be
provided.",
+ detail: translate("backfill.validation.datesRequired"),
},
});
@@ -64,7 +66,7 @@ export const useCreateBackfill = ({ onSuccessConfirm }: {
onSuccessConfirm: () =
if (dataIntervalStart > dataIntervalEnd) {
setDateValidationError({
body: {
- detail: "Data Interval Start Date must be less than or equal to Data
Interval End Date.",
+ detail: translate("backfill.validation.startBeforeEnd"),
},
});
diff --git a/airflow-core/src/airflow/ui/src/queries/useDagParams.ts
b/airflow-core/src/airflow/ui/src/queries/useDagParams.ts
index 64a7f0915af..798ed692b97 100644
--- a/airflow-core/src/airflow/ui/src/queries/useDagParams.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useDagParams.ts
@@ -16,6 +16,8 @@
* specific language governing permissions and limitations
* under the License.
*/
+import { useTranslation } from "react-i18next";
+
import { useDagServiceGetDagDetails } from "openapi/queries";
import { toaster } from "src/components/ui";
@@ -46,6 +48,7 @@ export type ParamSchema = {
};
export const useDagParams = (dagId: string, open: boolean) => {
+ const { t: translate } = useTranslation("dag");
const { data, error }: { data?: Record<string, ParamsSpec>; error?: unknown
} = useDagServiceGetDagDetails(
{ dagId },
undefined,
@@ -61,8 +64,8 @@ export const useDagParams = (dagId: string, open: boolean) =>
{
: String(Boolean(error) ? error : ""); // Convert other types (e.g.,
numbers, strings) to string
toaster.create({
- description: `Dag params request failed. Error: ${errorDescription}`,
- title: "Getting Dag Params Failed",
+ description: errorDescription,
+ title: translate("paramsFailed"),
type: "error",
});
}
diff --git a/airflow-core/src/airflow/ui/src/queries/useDagParsing.ts
b/airflow-core/src/airflow/ui/src/queries/useDagParsing.ts
index 0ddab03c69a..914799dfc54 100644
--- a/airflow-core/src/airflow/ui/src/queries/useDagParsing.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useDagParsing.ts
@@ -17,6 +17,7 @@
* under the License.
*/
import { useQueryClient } from "@tanstack/react-query";
+import { useTranslation } from "react-i18next";
import {
useDagParsingServiceReparseDagFile,
@@ -25,16 +26,17 @@ import {
} from "openapi/queries";
import { toaster } from "src/components/ui";
-const onError = () => {
- toaster.create({
- description: "Dag parsing request failed. There could be pending parsing
requests yet to be processed.",
- title: "Dag Failed to Reparse",
- type: "error",
- });
-};
-
export const useDagParsing = ({ dagId }: { readonly dagId: string }) => {
const queryClient = useQueryClient();
+ const { t: translate } = useTranslation("dag");
+
+ const onError = () => {
+ toaster.create({
+ description: translate("parse.toaster.error.description"),
+ title: translate("parse.toaster.error.title"),
+ type: "error",
+ });
+ };
const onSuccess = async () => {
await queryClient.invalidateQueries({
@@ -46,8 +48,8 @@ export const useDagParsing = ({ dagId }: { readonly dagId:
string }) => {
});
toaster.create({
- description: "Dag should reparse soon.",
- title: "Reparsing request submitted successfully",
+ description: translate("parse.toaster.success.description"),
+ title: translate("parse.toaster.success.title"),
type: "success",
});
};
diff --git a/airflow-core/src/airflow/ui/src/queries/useDeleteConnection.ts
b/airflow-core/src/airflow/ui/src/queries/useDeleteConnection.ts
index 9f2f82b3d9b..c7823e9e302 100644
--- a/airflow-core/src/airflow/ui/src/queries/useDeleteConnection.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useDeleteConnection.ts
@@ -17,20 +17,24 @@
* under the License.
*/
import { useQueryClient } from "@tanstack/react-query";
+import { useTranslation } from "react-i18next";
import { useConnectionServiceDeleteConnection,
useConnectionServiceGetConnectionsKey } from "openapi/queries";
import { toaster } from "src/components/ui";
-const onError = () => {
- toaster.create({
- description: "Delete connection request failed.",
- title: "Failed to delete the connection",
- type: "error",
- });
-};
-
export const useDeleteConnection = ({ onSuccessConfirm }: { onSuccessConfirm:
() => void }) => {
const queryClient = useQueryClient();
+ const { t: translate } = useTranslation("admin");
+
+ const onError = (error: Error) => {
+ toaster.create({
+ description: error.message,
+ title: translate("toaster.delete.error.title", {
+ resourceName: translate("admin:connections.connection_one"),
+ }),
+ type: "error",
+ });
+ };
const onSuccess = async () => {
await queryClient.invalidateQueries({
@@ -38,8 +42,12 @@ export const useDeleteConnection = ({ onSuccessConfirm }: {
onSuccessConfirm: ()
});
toaster.create({
- description: "The connection deletion request was successful.",
- title: "Connection Deleted Successfully",
+ description: translate("toaster.delete.success.description", {
+ resourceName: translate("admin:connections.connection_one"),
+ }),
+ title: translate("toaster.delete.success.title", {
+ resourceName: translate("admin:connections.connection_one"),
+ }),
type: "success",
});
diff --git a/airflow-core/src/airflow/ui/src/queries/useDeleteDag.ts
b/airflow-core/src/airflow/ui/src/queries/useDeleteDag.ts
index 0de86a85357..6d4c4399f19 100644
--- a/airflow-core/src/airflow/ui/src/queries/useDeleteDag.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useDeleteDag.ts
@@ -17,19 +17,12 @@
* under the License.
*/
import { useQueryClient } from "@tanstack/react-query";
+import { useTranslation } from "react-i18next";
import { useDagServiceDeleteDag } from "openapi/queries";
import { useDagServiceGetDagKey } from "openapi/queries";
import { toaster } from "src/components/ui";
-const onError = () => {
- toaster.create({
- description: "Delete DAG request failed",
- title: "Failed to delete DAG",
- type: "error",
- });
-};
-
export const useDeleteDag = ({
dagId,
onSuccessConfirm,
@@ -38,6 +31,17 @@ export const useDeleteDag = ({
onSuccessConfirm: () => void;
}) => {
const queryClient = useQueryClient();
+ const { t: translate } = useTranslation();
+
+ const onError = (error: Error) => {
+ toaster.create({
+ description: error.message,
+ title: translate("toaster.delete.error.title", {
+ resourceName: translate("dag_one"),
+ }),
+ type: "error",
+ });
+ };
const onSuccess = async () => {
const queryKeys = [[useDagServiceGetDagKey, { dagId }]];
@@ -45,8 +49,12 @@ export const useDeleteDag = ({
await Promise.all(queryKeys.map((key) => queryClient.invalidateQueries({
queryKey: key })));
toaster.create({
- description: "The DAG deletion request was successful.",
- title: "DAG Deleted Successfully",
+ description: translate("toaster.delete.success.description", {
+ resourceName: translate("dag_one"),
+ }),
+ title: translate("toaster.delete.success.title", {
+ resourceName: translate("dag_one"),
+ }),
type: "success",
});
diff --git a/airflow-core/src/airflow/ui/src/queries/useDeleteDagRun.ts
b/airflow-core/src/airflow/ui/src/queries/useDeleteDagRun.ts
index c9120e66b73..7f5c9e670ea 100644
--- a/airflow-core/src/airflow/ui/src/queries/useDeleteDagRun.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useDeleteDagRun.ts
@@ -40,7 +40,7 @@ export const useDeleteDagRun = ({ dagId, dagRunId,
onSuccessConfirm }: DeleteDag
const onError = (error: Error) => {
toaster.create({
description: error.message,
- title: translate("dags:runAndTaskActions.delete.error", { type: "Run" }),
+ title: translate("dags:runAndTaskActions.delete.error", { type:
translate("dagRun_one") }),
type: "error",
});
};
@@ -55,8 +55,10 @@ export const useDeleteDagRun = ({ dagId, dagRunId,
onSuccessConfirm }: DeleteDag
await Promise.all(queryKeys.map((key) => queryClient.invalidateQueries({
queryKey: key })));
toaster.create({
- description:
translate("dags:runAndTaskActions.delete.success.description", { type: "Run" }),
- title: translate("dags:runAndTaskActions.delete.success.title", { type:
"Run" }),
+ description:
translate("dags:runAndTaskActions.delete.success.description", {
+ type: translate("dagRun_one"),
+ }),
+ title: translate("dags:runAndTaskActions.delete.success.title", { type:
translate("dagRun_one") }),
type: "success",
});
diff --git a/airflow-core/src/airflow/ui/src/queries/useDeletePool.ts
b/airflow-core/src/airflow/ui/src/queries/useDeletePool.ts
index f12f1921bb8..bf5fbbbffe9 100644
--- a/airflow-core/src/airflow/ui/src/queries/useDeletePool.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useDeletePool.ts
@@ -17,20 +17,24 @@
* under the License.
*/
import { useQueryClient } from "@tanstack/react-query";
+import { useTranslation } from "react-i18next";
import { usePoolServiceDeletePool, usePoolServiceGetPoolsKey } from
"openapi/queries";
import { toaster } from "src/components/ui";
-const onError = () => {
- toaster.create({
- description: "Delete pool request failed.",
- title: "Failed to delete the pool",
- type: "error",
- });
-};
-
export const useDeletePool = ({ onSuccessConfirm }: { onSuccessConfirm: () =>
void }) => {
const queryClient = useQueryClient();
+ const { t: translate } = useTranslation(["common", "admin"]);
+
+ const onError = (error: Error) => {
+ toaster.create({
+ description: error.message,
+ title: translate("toaster.delete.error.title", {
+ resourceName: translate("admin:pools.pool_one"),
+ }),
+ type: "error",
+ });
+ };
const onSuccess = async () => {
await queryClient.invalidateQueries({
@@ -38,8 +42,12 @@ export const useDeletePool = ({ onSuccessConfirm }: {
onSuccessConfirm: () => vo
});
toaster.create({
- description: "The pool deletion request was successful.",
- title: "Pool Deleted Successfully",
+ description: translate("toaster.delete.success.description", {
+ resourceName: translate("admin:pools.pool_one"),
+ }),
+ title: translate("toaster.delete.success.title", {
+ resourceName: translate("admin:pools.pool_one"),
+ }),
type: "success",
});
diff --git a/airflow-core/src/airflow/ui/src/queries/useDeleteTaskInstance.ts
b/airflow-core/src/airflow/ui/src/queries/useDeleteTaskInstance.ts
index f43133a3c6a..cf84f7cc068 100644
--- a/airflow-core/src/airflow/ui/src/queries/useDeleteTaskInstance.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useDeleteTaskInstance.ts
@@ -45,12 +45,12 @@ export const useDeleteTaskInstance = ({
taskId,
}: DeleteTaskInstanceParams) => {
const queryClient = useQueryClient();
- const { t: translate } = useTranslation();
+ const { t: translate } = useTranslation(["common", "dags"]);
const onError = (error: Error) => {
toaster.create({
description: error.message,
- title: translate("dags:runAndTaskActions.delete.error", { type: "Task
Instance" }),
+ title: translate("dags:runAndTaskActions.delete.error", { type:
translate("taskInstance_one") }),
type: "error",
});
};
@@ -67,8 +67,12 @@ export const useDeleteTaskInstance = ({
await Promise.all(queryKeys.map((key) => queryClient.invalidateQueries({
queryKey: key })));
toaster.create({
- description:
translate("dags:runAndTaskActions.delete.success.description", { type: "Task
Instance" }),
- title: translate("dags:runAndTaskActions.delete.success.title", { type:
"Task Instance" }),
+ description:
translate("dags:runAndTaskActions.delete.success.description", {
+ type: translate("taskInstance_one"),
+ }),
+ title: translate("dags:runAndTaskActions.delete.success.title", {
+ type: translate("taskInstance_one"),
+ }),
type: "success",
});
diff --git a/airflow-core/src/airflow/ui/src/queries/useDeleteVariable.ts
b/airflow-core/src/airflow/ui/src/queries/useDeleteVariable.ts
index 10b3abb7c6f..c07681679fe 100644
--- a/airflow-core/src/airflow/ui/src/queries/useDeleteVariable.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useDeleteVariable.ts
@@ -17,20 +17,24 @@
* under the License.
*/
import { useQueryClient } from "@tanstack/react-query";
+import { useTranslation } from "react-i18next";
import { useVariableServiceDeleteVariable, useVariableServiceGetVariablesKey }
from "openapi/queries";
import { toaster } from "src/components/ui";
-const onError = () => {
- toaster.create({
- description: "Delete variable request failed.",
- title: "Failed to delete the variable",
- type: "error",
- });
-};
-
export const useDeleteVariable = ({ onSuccessConfirm }: { onSuccessConfirm: ()
=> void }) => {
const queryClient = useQueryClient();
+ const { t: translate } = useTranslation(["common", "admin"]);
+
+ const onError = (error: Error) => {
+ toaster.create({
+ description: error.message,
+ title: translate("toaster.delete.error.title", {
+ resourceName: translate("admin:variables.variable_one"),
+ }),
+ type: "error",
+ });
+ };
const onSuccess = async () => {
await queryClient.invalidateQueries({
@@ -38,8 +42,12 @@ export const useDeleteVariable = ({ onSuccessConfirm }: {
onSuccessConfirm: () =
});
toaster.create({
- description: "The variable key deletion request was successful.",
- title: "Variable Deleted Successfully",
+ description: translate("toaster.delete.success.description", {
+ resourceName: translate("admin:variables.variable_one"),
+ }),
+ title: translate("toaster.delete.success.title", {
+ resourceName: translate("admin:variables.variable_one"),
+ }),
type: "success",
});
diff --git a/airflow-core/src/airflow/ui/src/queries/useEditConnection.tsx
b/airflow-core/src/airflow/ui/src/queries/useEditConnection.tsx
index 6f7face3a32..60c813aa644 100644
--- a/airflow-core/src/airflow/ui/src/queries/useEditConnection.tsx
+++ b/airflow-core/src/airflow/ui/src/queries/useEditConnection.tsx
@@ -18,6 +18,7 @@
*/
import { useQueryClient } from "@tanstack/react-query";
import { useState } from "react";
+import { useTranslation } from "react-i18next";
import { useConnectionServiceGetConnectionsKey,
useConnectionServicePatchConnection } from "openapi/queries";
import { toaster } from "src/components/ui";
@@ -33,15 +34,19 @@ export const useEditConnection = (
) => {
const queryClient = useQueryClient();
const [error, setError] = useState<unknown>(undefined);
-
+ const { t: translate } = useTranslation(["common", "admin"]);
const onSuccess = async () => {
await queryClient.invalidateQueries({
queryKey: [useConnectionServiceGetConnectionsKey],
});
toaster.create({
- description: "Connection has been edited successfully",
- title: "Connection Edit Request Submitted",
+ description: translate("toaster.edit.success.description", {
+ resourceName: translate("admin:connections.connection_one"),
+ }),
+ title: translate("toaster.edit.success.title", {
+ resourceName: translate("admin:connections.connection_one"),
+ }),
type: "success",
});
diff --git a/airflow-core/src/airflow/ui/src/queries/useEditPool.ts
b/airflow-core/src/airflow/ui/src/queries/useEditPool.ts
index 402bba155f5..6cafe2b696e 100644
--- a/airflow-core/src/airflow/ui/src/queries/useEditPool.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useEditPool.ts
@@ -18,6 +18,7 @@
*/
import { useQueryClient } from "@tanstack/react-query";
import { useState } from "react";
+import { useTranslation } from "react-i18next";
import { usePoolServiceGetPoolsKey, usePoolServicePatchPool } from
"openapi/queries";
import type { PoolBody } from "openapi/requests/types.gen";
@@ -33,6 +34,7 @@ export const useEditPool = (
) => {
const queryClient = useQueryClient();
const [error, setError] = useState<unknown>(undefined);
+ const { t: translate } = useTranslation(["common", "admin"]);
const onSuccess = async () => {
await queryClient.invalidateQueries({
@@ -40,8 +42,12 @@ export const useEditPool = (
});
toaster.create({
- description: "Pool has been edited successfully",
- title: "Pool Edit Request Submitted",
+ description: translate("toaster.update.success.description", {
+ resourceName: translate("admin:pools.pool_one"),
+ }),
+ title: translate("toaster.update.success.title", {
+ resourceName: translate("admin:pools.pool_one"),
+ }),
type: "success",
});
diff --git a/airflow-core/src/airflow/ui/src/queries/useEditVariable.ts
b/airflow-core/src/airflow/ui/src/queries/useEditVariable.ts
index befdeab0d53..e02501cc6a8 100644
--- a/airflow-core/src/airflow/ui/src/queries/useEditVariable.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useEditVariable.ts
@@ -18,6 +18,7 @@
*/
import { useQueryClient } from "@tanstack/react-query";
import { useState } from "react";
+import { useTranslation } from "react-i18next";
import { useVariableServiceGetVariablesKey, useVariableServicePatchVariable }
from "openapi/queries";
import { toaster } from "src/components/ui";
@@ -33,6 +34,7 @@ export const useEditVariable = (
) => {
const queryClient = useQueryClient();
const [error, setError] = useState<unknown>(undefined);
+ const { t: translate } = useTranslation(["common", "admin"]);
const onSuccess = async () => {
await queryClient.invalidateQueries({
@@ -40,8 +42,12 @@ export const useEditVariable = (
});
toaster.create({
- description: "Variable has been edited successfully",
- title: "Variable Edit Request Submitted",
+ description: translate("toaster.edit.success.description", {
+ resourceName: translate("admin:variables.variable_one"),
+ }),
+ title: translate("toaster.edit.success.title", {
+ resourceName: translate("admin:variables.variable_one"),
+ }),
type: "success",
});
diff --git a/airflow-core/src/airflow/ui/src/queries/useImportVariables.ts
b/airflow-core/src/airflow/ui/src/queries/useImportVariables.ts
index 212d9c83e19..64f608ac027 100644
--- a/airflow-core/src/airflow/ui/src/queries/useImportVariables.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useImportVariables.ts
@@ -18,6 +18,7 @@
*/
import { useQueryClient } from "@tanstack/react-query";
import { useState } from "react";
+import { useTranslation } from "react-i18next";
import { useVariableServiceBulkVariables, useVariableServiceGetVariablesKey }
from "openapi/queries";
import { toaster } from "src/components/ui";
@@ -25,6 +26,7 @@ import { toaster } from "src/components/ui";
export const useImportVariables = ({ onSuccessConfirm }: { onSuccessConfirm:
() => void }) => {
const queryClient = useQueryClient();
const [error, setError] = useState<unknown>(undefined);
+ const { t: translate } = useTranslation(["common", "admin"]);
const onSuccess = async (responseData: { create?: { errors: Array<unknown>;
success: Array<string> } }) => {
await queryClient.invalidateQueries({
@@ -42,8 +44,14 @@ export const useImportVariables = ({ onSuccessConfirm }: {
onSuccessConfirm: ()
});
} else if (Array.isArray(success) && success.length > 0) {
toaster.create({
- description: `${success.length} variables created successfully.
Keys: ${success.join(", ")}`,
- title: "Import Variables Request Successful",
+ description: translate("toaster.import.success.description", {
+ count: success.length,
+ keys: success.join(", "),
+ resourceName: translate("admin:variables.variable_other"),
+ }),
+ title: translate("toaster.import.success.title", {
+ resourceName: translate("admin:variables.variable_other"),
+ }),
type: "success",
});
onSuccessConfirm();
diff --git a/airflow-core/src/airflow/ui/src/queries/usePatchDagRun.ts
b/airflow-core/src/airflow/ui/src/queries/usePatchDagRun.ts
index 6ca008b6dc1..f7f37c33a95 100644
--- a/airflow-core/src/airflow/ui/src/queries/usePatchDagRun.ts
+++ b/airflow-core/src/airflow/ui/src/queries/usePatchDagRun.ts
@@ -17,6 +17,7 @@
* under the License.
*/
import { useQueryClient } from "@tanstack/react-query";
+import { useTranslation } from "react-i18next";
import {
UseDagRunServiceGetDagRunKeyFn,
@@ -29,14 +30,6 @@ import { toaster } from "src/components/ui";
import { useClearDagRunDryRunKey } from "./useClearDagRunDryRun";
-const onError = () => {
- toaster.create({
- description: "Patch Dag Run request failed",
- title: "Failed to patch the Dag Run",
- type: "error",
- });
-};
-
export const usePatchDagRun = ({
dagId,
dagRunId,
@@ -47,6 +40,17 @@ export const usePatchDagRun = ({
onSuccess?: () => void;
}) => {
const queryClient = useQueryClient();
+ const { t: translate } = useTranslation();
+
+ const onError = (error: Error) => {
+ toaster.create({
+ description: error.message,
+ title: translate("toaster.update.error.title", {
+ resourceName: translate("dagRun_one"),
+ }),
+ type: "error",
+ });
+ };
const onSuccessFn = async () => {
const queryKeys = [
diff --git a/airflow-core/src/airflow/ui/src/queries/usePatchTaskInstance.ts
b/airflow-core/src/airflow/ui/src/queries/usePatchTaskInstance.ts
index 8cd6a7c36cb..fc99136c457 100644
--- a/airflow-core/src/airflow/ui/src/queries/usePatchTaskInstance.ts
+++ b/airflow-core/src/airflow/ui/src/queries/usePatchTaskInstance.ts
@@ -17,6 +17,7 @@
* under the License.
*/
import { useQueryClient } from "@tanstack/react-query";
+import { useTranslation } from "react-i18next";
import {
UseGridServiceGridDataKeyFn,
@@ -30,14 +31,6 @@ import { toaster } from "src/components/ui";
import { useClearTaskInstancesDryRunKey } from "./useClearTaskInstancesDryRun";
import { usePatchTaskInstanceDryRunKey } from "./usePatchTaskInstanceDryRun";
-const onError = () => {
- toaster.create({
- description: "Patch Task Instance request failed",
- title: "Failed to patch the Task Instance",
- type: "error",
- });
-};
-
export const usePatchTaskInstance = ({
dagId,
dagRunId,
@@ -52,6 +45,17 @@ export const usePatchTaskInstance = ({
taskId: string;
}) => {
const queryClient = useQueryClient();
+ const { t: translate } = useTranslation();
+
+ const onError = (error: Error) => {
+ toaster.create({
+ description: error.message,
+ title: translate("toaster.update.error.title", {
+ resourceName: translate("taskInstance_one"),
+ }),
+ type: "error",
+ });
+ };
const onSuccessFn = async () => {
const queryKeys = [
diff --git a/airflow-core/src/airflow/ui/src/queries/useTrigger.ts
b/airflow-core/src/airflow/ui/src/queries/useTrigger.ts
index 27f27df1058..3009ecbfc81 100644
--- a/airflow-core/src/airflow/ui/src/queries/useTrigger.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useTrigger.ts
@@ -18,6 +18,7 @@
*/
import { useQueryClient } from "@tanstack/react-query";
import { useState } from "react";
+import { useTranslation } from "react-i18next";
import {
UseDagRunServiceGetDagRunsKeyFn,
@@ -32,7 +33,7 @@ import { toaster } from "src/components/ui";
export const useTrigger = ({ dagId, onSuccessConfirm }: { dagId: string;
onSuccessConfirm: () => void }) => {
const queryClient = useQueryClient();
const [error, setError] = useState<unknown>(undefined);
-
+ const { t: translate } = useTranslation("components");
const onSuccess = async () => {
const queryKeys = [
[useDagServiceGetDagsUiKey],
@@ -44,8 +45,8 @@ export const useTrigger = ({ dagId, onSuccessConfirm }: {
dagId: string; onSucce
await Promise.all(queryKeys.map((key) => queryClient.invalidateQueries({
queryKey: key })));
toaster.create({
- description: "DAG run has been successfully triggered.",
- title: "DAG Run Request Submitted",
+ description: translate("triggerDag.toaster.success.description"),
+ title: translate("triggerDag.toaster.success.title"),
type: "success",
});
onSuccessConfirm();