Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
4d184c6
fix view for many tags
steveahnahn Sep 13, 2025
523986d
fixup! fix view for many tags
potiuk Sep 13, 2025
aa85ad1
Update airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/componen…
steveahnahn Sep 15, 2025
a06243a
Update airflow-core/src/airflow/ui/public/i18n/locales/ar/components.…
steveahnahn Sep 15, 2025
e51cf8c
Update airflow-core/src/airflow/ui/public/i18n/locales/de/components.…
steveahnahn Sep 15, 2025
cb2cbd2
Update airflow-core/src/airflow/ui/public/i18n/locales/es/components.…
steveahnahn Sep 15, 2025
e6db120
Update airflow-core/src/airflow/ui/public/i18n/locales/hi/components.…
steveahnahn Sep 15, 2025
64c7c2f
Update airflow-core/src/airflow/ui/public/i18n/locales/it/components.…
steveahnahn Sep 15, 2025
67ce686
Update airflow-core/src/airflow/ui/public/i18n/locales/ko/components.…
steveahnahn Sep 15, 2025
3a116f9
Update airflow-core/src/airflow/ui/public/i18n/locales/ar/components.…
steveahnahn Sep 15, 2025
89ccb1e
Update airflow-core/src/airflow/ui/public/i18n/locales/hu/components.…
steveahnahn Sep 15, 2025
a283034
Update airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/componen…
steveahnahn Sep 15, 2025
2a21c05
Update airflow-core/src/airflow/ui/public/i18n/locales/tr/components.…
steveahnahn Sep 15, 2025
426818a
Update airflow-core/src/airflow/ui/public/i18n/locales/tr/components.…
steveahnahn Sep 15, 2025
e0a27e8
Update airflow-core/src/airflow/ui/public/i18n/locales/ca/components.…
steveahnahn Sep 16, 2025
0cc7dc5
Update airflow-core/src/airflow/ui/public/i18n/locales/he/components.…
steveahnahn Sep 16, 2025
72caac6
Update airflow-core/src/airflow/ui/public/i18n/locales/en/components.…
steveahnahn Sep 16, 2025
47e434a
Update airflow-core/src/airflow/ui/public/i18n/locales/pl/components.…
steveahnahn Sep 16, 2025
9a85005
Update airflow-core/src/airflow/ui/public/i18n/locales/pt/components.…
steveahnahn Sep 16, 2025
3538734
Update airflow-core/src/airflow/ui/public/i18n/locales/nl/components.…
steveahnahn Sep 16, 2025
ad334f0
Update airflow-core/src/airflow/ui/public/i18n/locales/fr/components.…
steveahnahn Sep 16, 2025
6451bf7
plurals & render fixes
steveahnahn Sep 16, 2025
6cc73cc
fixup! plurals & render fixes
potiuk Sep 17, 2025
77abb52
disable tooltip & enable modal, fix dutch translation
steveahnahn Sep 19, 2025
05d81c9
modal to popver, rmv subtitle, rmv tooltip comp
steveahnahn Sep 25, 2025
eb1c41b
Update airflow-core/src/airflow/ui/src/components/LimitedItemsList.tsx
steveahnahn Sep 30, 2025
4643c10
Apply suggestion from @Lee-W
bbovenzi Oct 1, 2025
d88c0aa
Update airflow-core/src/airflow/ui/src/components/LimitedItemsList.tsx
bbovenzi Oct 1, 2025
f9085b7
Update airflow-core/src/airflow/ui/src/components/LimitedItemsList.tsx
bbovenzi Oct 1, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,11 @@
"taskGroup": "مجموعة المهام"
},
"limitedList": "+{{count}} المزيد",
"limitedList.allItems": "جميع العناصر {{count}}:",
"limitedList.clickToInteract": "انقر على علامة لتصفية Dags",
"limitedList.clickToOpenFull": "انقر \"+{{count}} المزيد\" لعرض القائمة الكاملة",
"limitedList.copyPasteText": "يمكنك نسخ ولصق النص أعلاه",
"limitedList.showingItems": "عرض {{count}} عنصرًا",
"logs": {
"file": "ملف",
"location": "سطر {{line}} في {{name}}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,11 @@
"taskGroup": "Grup de tasques"
},
"limitedList": "+{{count}} més",
"limitedList.allItems": "Tots els {{count}} elements:",
"limitedList.clickToInteract": "Fes clic en una etiqueta per filtrar els Dags",
"limitedList.clickToOpenFull": "Fes clic a \"+{{count}} més\" per veure la llista completa",
"limitedList.copyPasteText": "Pots copiar i enganxar el text de dalt",
"limitedList.showingItems": "Mostrant {{count}} elements",
"logs": {
"file": "Fitxer",
"location": "línia {{line}} a {{name}}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,11 @@
"taskGroup": "Task Gruppe"
},
"limitedList": "+{{count}} mehr",
"limitedList.allItems": "Alle {{count}} Einträge:",
"limitedList.clickToInteract": "Klicken Sie auf eine Markierung, um Dags zu filtern",
"limitedList.clickToOpenFull": "Klicken Sie auf \"+{{count}} mehr\" für die vollständige Ansicht",
"limitedList.copyPasteText": "Sie können den obigen Text kopieren und einfügen",
"limitedList.showingItems": "{{count}} Einträge werden angezeigt",
"logs": {
"file": "Datei",
"location": "Zeile {{line}} in {{name}}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,14 @@
"taskGroup": "Task Group"
},
"limitedList": "+{{count}} more",
"limitedList.allItems": "All {{count}} items:",
"limitedList.allTags_one": "All Tags (1)",
"limitedList.allTags_other": "All Tags ({{count}})",
"limitedList.clickToInteract": "Click a tag to filter Dags",
"limitedList.clickToOpenFull": "Click \"+{{count}} more\" to open full view",
"limitedList.copyPasteText": "You can copy and paste the text above",
"limitedList.showingItems_one": "Showing 1 item",
"limitedList.showingItems_other": "Showing {{count}} items",
"logs": {
"file": "File",
"location": "line {{line}} in {{name}}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,11 @@
"taskGroup": "Grupo de Tareas"
},
"limitedList": "+{{count}} más",
"limitedList.allItems": "Todos los {{count}} elementos:",
"limitedList.clickToInteract": "Haz clic en una etiqueta para filtrar Dags",
"limitedList.clickToOpenFull": "Haz clic en \"+{{count}} más\" para ver la lista completa",
"limitedList.copyPasteText": "Puedes copiar y pegar el texto de arriba",
"limitedList.showingItems": "Mostrando {{count}} elementos",
"logs": {
"file": "Archivo",
"location": "línea {{line}} en {{name}}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,11 @@
"taskGroup": "Groupe de tâches"
},
"limitedList": "+{{count}} supplémentaires",
"limitedList.allItems": "Tous les {{count}} éléments :",
"limitedList.clickToInteract": "Cliquez sur une étiquette pour filtrer les Dags",
"limitedList.clickToOpenFull": "Cliquez sur \"+{{count}} supplémentaires\" pour ouvrir la vue complète",
"limitedList.copyPasteText": "Vous pouvez copier et coller le texte ci-dessus",
"limitedList.showingItems": "Affichage de {{count}} éléments",
"logs": {
"file": "Fichier",
"location": "ligne {{line}} dans {{name}}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,11 @@
"taskGroup": "קבוצת משימות"
},
"limitedList": "+ {{count}} נוספים",
"limitedList.allItems": "כל {{count}} הפריטים:",
"limitedList.clickToInteract": "לחץ על תגית כדי לסנן Dags",
"limitedList.clickToOpenFull": "לחץ על \"+{{count}} נוספים\" כדי לפתוח את התצוגה המלאה",
"limitedList.copyPasteText": "ניתן להעתיק ולהדביק את הטקסט שמעל",
"limitedList.showingItems": "מציג {{count}} פריטים",
"logs": {
"file": "קובץ",
"location": "שורה {{line}} ב{{name}}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,11 @@
"taskGroup": "टास्क ग्रुप"
},
"limitedList": "+{{count}} और",
"limitedList.allItems": "सभी {{count}} आइटम:",
"limitedList.clickToInteract": "टैग पर क्लिक करके Dags फ़िल्टर करें",
"limitedList.clickToOpenFull": "\"+{{count}} और\" पर क्लिक करके पूरी सूची खोलें",
"limitedList.copyPasteText": "आप ऊपर दिए गए पाठ को कॉपी और पेस्ट कर सकते हैं",
"limitedList.showingItems": "{{count}} आइटम दिखाए जा रहे हैं",
"logs": {
"file": "फ़ाइल",
"location": "{{name}} में लाइन {{line}}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,11 @@
"taskGroup": "Feladatcsoport"
},
"limitedList": "+{{count}} további",
"limitedList.allItems": "Összes {{count}} elem:",
"limitedList.clickToInteract": "Kattintson egy címkére a Dag-ok szűréséhez",
"limitedList.clickToOpenFull": "Kattintson a \"+{{count}} további\" gombra a teljes nézethez",
"limitedList.copyPasteText": "A fenti szöveg másolható és beilleszthető",
"limitedList.showingItems": "{{count}} elem megjelenítése",
"logs": {
"file": "Fájl",
"location": "{{name}} fájl {{line}}. sora"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,11 @@
"taskGroup": "Task Group"
},
"limitedList": "+{{count}} altro",
"limitedList.allItems": "Tutti i {{count}} elementi:",
"limitedList.clickToInteract": "Fai clic su un'etichetta per filtrare i Dag",
"limitedList.clickToOpenFull": "Fai clic su \"+{{count}} altro\" per visualizzare tutto",
"limitedList.copyPasteText": "Puoi copiare e incollare il testo sopra",
"limitedList.showingItems": "Visualizzazione di {{count}} elementi",
"logs": {
"file": "File",
"location": "linea {{line}} in {{name}}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,11 @@
"taskGroup": "작업 그룹"
},
"limitedList": "+{{count}}개 더 보기",
"limitedList.allItems": "모든 {{count}}개 항목:",
"limitedList.clickToInteract": "태그를 클릭하여 Dag를 필터링하세요",
"limitedList.clickToOpenFull": "\"+{{count}}개 더 보기\"를 클릭하여 전체 보기 열기",
"limitedList.copyPasteText": "위의 텍스트를 복사하여 붙여넣을 수 있습니다",
"limitedList.showingItems": "{{count}}개 항목 표시 중",
"logs": {
"file": "파일",
"location": "{{name}}의 {{line}}번째 줄"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"backfill": {
"affected_one": "1 run zal getriggered worden.",
"affected_other": "{{count}} Runs zullen getriggered worden.",
"affected_one": "1 run zal getriggerd worden.",
"affected_other": "{{count}} Runs zullen getriggerd worden.",
"affectedNone": "Geen Runs komen overeen met de geselecteerde criteria.",
"allRuns": "Alle Runs",
"backwards": "Run achterstevoren",
Expand Down Expand Up @@ -88,6 +88,11 @@
"taskGroup": "Task Group"
},
"limitedList": "+{{count}} meer",
"limitedList.allItems": "Alle {{count}} items:",
"limitedList.clickToInteract": "Klik op een label om Dags te filteren",
"limitedList.clickToOpenFull": "Klik op \"+{{count}} meer\" om de volledige lijst te openen",
"limitedList.copyPasteText": "Je kunt de bovenstaande tekst kopiëren en plakken",
"limitedList.showingItems": "{{count}} items weergegeven",
"logs": {
"file": "Bestand",
"location": "regel {{line}} in {{name}}"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
{
"allTags_few": "Wszystkie tagi ({{count}})",
"allTags_many": "Wszystkie tagi ({{count}})",
"allTags_one": "Wszystkie tagi ({{count}})",
"allTags_other": "Wszystkie tagi ({{count}})",
"backfill": {
"affected_few": "{{count}} wykonania zostaną uruchomione.",
"affected_many": "{{count}} wykonań zostanie uruchomionych.",
Expand Down Expand Up @@ -102,11 +106,20 @@
"taskGroup": "Grupa zadań"
},
"limitedList": "+{{count}} więcej",
"limitedList.allItems": "Wszystkie {{count}} elementy:",
"limitedList.clickToInteract": "Kliknij etykietę, aby przefiltrować Dagi",
"limitedList.clickToOpenFull": "Kliknij \"+{{count}} więcej\", aby zobaczyć pełną listę",
"limitedList.copyPasteText": "Możesz skopiować i wkleić powyższy tekst",
"limitedList.showingItems": "Wyświetlanie {{count}} elementów",
"logs": {
"file": "Plik",
"location": "linia {{line}} w {{name}}"
},
"reparseDag": "Ponowne przetworznie Daga",
"showingItems_few": "Wyświetlanie {{count}} elementy",
"showingItems_many": "Wyświetlanie {{count}} elementów",
"showingItems_one": "Wyświetlanie {{count}} elementu",
"showingItems_other": "Wyświetlanie {{count}} elementów",
"sortedAscending": "posortowane rosnąco",
"sortedDescending": "posortowane malejąco",
"sortedUnsorted": "nieposortowane",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,11 @@
"taskGroup": "Grupo de Tarefas"
},
"limitedList": "+{{count}} mais",
"limitedList.allItems": "Todos os {{count}} itens:",
"limitedList.clickToInteract": "Clique em uma etiqueta para filtrar os Dags",
"limitedList.clickToOpenFull": "Clique em \"+{{count}} mais\" para ver a lista completa",
"limitedList.copyPasteText": "Você pode copiar e colar o texto acima",
"limitedList.showingItems": "Exibindo {{count}} itens",
"logs": {
"file": "Arquivo",
"location": "linha {{line}} em {{name}}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,11 @@
"taskGroup": "Görev Grubu"
},
"limitedList": "+{{count}} daha",
"limitedList.allItems": "Tüm {{count}} öğeler:",
"limitedList.clickToInteract": "Bir etikete tıklayarak Dag'leri filtreleyin",
"limitedList.clickToOpenFull": "\"+{{count}} daha\" tıklayarak tam görünümü açın",
"limitedList.copyPasteText": "Yukarıdaki metni kopyalayıp yapıştırabilirsiniz",
"limitedList.showingItems": "{{count}} öğe gösteriliyor",
"logs": {
"file": "Dosya",
"location": "{{name}} içinde satır {{line}}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,11 @@
"taskGroup": "任务分组"
},
"limitedList": "+ 其他 {{count}} 项",
"limitedList.allItems": "所有 {{count}} 项:",
"limitedList.clickToInteract": "点击标签以筛选 DAGs",
"limitedList.clickToOpenFull": "点击 \"+{{count}} 更多\" 打开完整视图",
"limitedList.copyPasteText": "你可以复制并粘贴上方文本",
"limitedList.showingItems": "显示 {{count}} 项",
"logs": {
"file": "文件",
"location": "第 {{line}} 行,位于 {{name}}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,11 @@
"taskGroup": "任務群組"
},
"limitedList": "+ 其他 {{count}} 項",
"limitedList.allItems": "所有 {{count}} 個項目:",
"limitedList.clickToInteract": "點擊標籤以篩選 Dags",
"limitedList.clickToOpenFull": "點擊 \"+{{count}} 更多\" 以開啟完整檢視",
"limitedList.copyPasteText": "你可以複製並貼上上方文字",
"limitedList.showingItems": "顯示 {{count}} 個項目",
"logs": {
"file": "檔案",
"location": "第 {{line}} 行,位於 {{name}}"
Expand Down
70 changes: 58 additions & 12 deletions airflow-core/src/airflow/ui/src/components/LimitedItemsList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
import { Box, Text, HStack, StackSeparator } from "@chakra-ui/react";
import { Box, Text, HStack, Stack } from "@chakra-ui/react";
import React, { type ReactNode } from "react";
import { useTranslation } from "react-i18next";

import { Tooltip } from "./ui";
import { Popover, Button } from "./ui";

type ListProps = {
readonly icon?: ReactNode;
Expand All @@ -41,11 +41,6 @@ export const LimitedItemsList = ({
const shouldTruncate = maxItems !== undefined && items.length > maxItems;
const displayItems = shouldTruncate ? items.slice(0, maxItems) : items;
const remainingItems = shouldTruncate ? items.slice(maxItems) : [];
const remainingItemsList = interactive ? (
<HStack separator={<StackSeparator />}>{remainingItems}</HStack>
) : (
`More items: ${remainingItems.map((item) => (typeof item === "string" ? item : "item")).join(", ")}`
);

if (!items.length) {
return undefined;
Expand All @@ -69,11 +64,62 @@ export const LimitedItemsList = ({
remainingItems.length === 1 ? (
<Text as="span">{remainingItems[0]}</Text>
) : (
<Tooltip content={remainingItemsList} interactive={interactive}>
<Text as="span" cursor="help">
{translate("limitedList", { count: remainingItems.length })}
</Text>
</Tooltip>
<Popover.Root lazyMount unmountOnExit>
<Popover.Trigger asChild>
<Button
colorPalette="brand"
cursor="pointer"
fontSize="sm"
minH="auto"
px={1}
py={0}
size="xs"
variant="ghost"
>
{translate("limitedList", { count: remainingItems.length })}
</Button>
</Popover.Trigger>
<Popover.Content maxW="400px" width="fit-content">
<Popover.Arrow />
<Popover.Body>
<Text fontSize="sm" fontWeight="medium" mb={3}>
{translate("limitedList.allItems", { count: items.length })}
</Text>

<Box maxH="300px" overflowY="auto">
{interactive ? (
<HStack flexWrap="wrap" gap={2}>
{items.map((item, index) => (
<Box
bg="bg.subtle"
borderRadius="sm"
key={typeof item === "string" ? item : index}
px={2}
py={1}
>
{item}
</Box>
))}
</HStack>
) : (
<Stack gap={1}>
{items.map((item, index) => (
<Text fontSize="sm" key={typeof item === "string" ? item : index} userSelect="text">
{item}
</Text>
))}
</Stack>
)}
</Box>

<Text fontSize="xs" mt={3}>
{interactive
? translate("limitedList.clickToInteract")
: translate("limitedList.copyPasteText")}
</Text>
</Popover.Body>
</Popover.Content>
</Popover.Root>
)
) : undefined}
</Box>
Expand Down
25 changes: 17 additions & 8 deletions dev/i18n/check_translations_completeness.py
Original file line number Diff line number Diff line change
Expand Up @@ -454,20 +454,31 @@ def print_translation_progress(console, locale_files, missing_counts, summary):
"--add-missing",
is_flag=True,
default=False,
help="Add missing translations for the selected language, prefixed with 'TODO: translate:'.",
help="Add missing translations for all languages except English, prefixed with 'TODO: translate:'.",
)
def cli(language: str | None = None, add_missing: bool = False):
if add_missing:
if not language:
raise ValueError("--language is required when passing --add_missing")
locale_path = LOCALES_DIR / language
locale_path.mkdir(exist_ok=True)
locale_files = get_locale_files()
console = Console(force_terminal=True, color_system="auto")
print_locale_file_table(locale_files, console, language)
found_difference = print_file_set_differences(locale_files, console, language)
summary, missing_counts = compare_keys(locale_files, console)
console.print("\n[bold underline]Summary of differences by language:[/bold underline]", style="cyan")
if add_missing and language != "en":
# Loop through all languages except 'en' and add missing translations
if language:
language_files = [lf for lf in locale_files if lf.locale == language]
else:
language_files = [lf for lf in locale_files if lf.locale != "en"]
for lf in language_files:
filtered_summary = {}
for filename, diff in summary.items():
filtered_summary[filename] = LocaleSummary(
missing_keys={lf.locale: diff.missing_keys.get(lf.locale, [])},
extra_keys={lf.locale: diff.extra_keys.get(lf.locale, [])},
)
add_missing_translations(lf.locale, filtered_summary, console)
# After adding, re-run the summary for all languages
summary, missing_counts = compare_keys(get_locale_files(), console)
if language:
locales = [lf.locale for lf in locale_files]
if language not in locales:
Expand All @@ -487,8 +498,6 @@ def cli(language: str | None = None, add_missing: bool = False):
[lf for lf in locale_files if lf.locale == language], filtered_summary, console
)
found_difference = found_difference or lang_diff
if add_missing:
add_missing_translations(language, filtered_summary, console)
else:
lang_diff = print_language_summary(locale_files, summary, console)
found_difference = found_difference or lang_diff
Expand Down
Loading