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

bbovenzi pushed a commit to branch v3-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/v3-1-test by this push:
     new 85a889e5e61 [v3-1-test] Fix language selector state not updating on 
change (#61060) (#61263)
85a889e5e61 is described below

commit 85a889e5e61ee3b489acf6d649fbc29da0a15f1a
Author: Guan-Ming (Wesley) Chiu <[email protected]>
AuthorDate: Sat Jan 31 05:31:43 2026 +0800

    [v3-1-test] Fix language selector state not updating on change (#61060) 
(#61263)
    
    (cherry picked from commit 975cfe62cd2bd35b795052104d94af497eab388d)
---
 .../ui/src/layouts/Nav/LanguageSelector.tsx        | 37 ++++++++++++----------
 1 file changed, 20 insertions(+), 17 deletions(-)

diff --git a/airflow-core/src/airflow/ui/src/layouts/Nav/LanguageSelector.tsx 
b/airflow-core/src/airflow/ui/src/layouts/Nav/LanguageSelector.tsx
index f270eb0f62d..e4581aebc7e 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Nav/LanguageSelector.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Nav/LanguageSelector.tsx
@@ -18,30 +18,33 @@
  */
 import { Field, VStack, Box, Text } from "@chakra-ui/react";
 import { Select, type SingleValue } from "chakra-react-select";
-import React, { useMemo } from "react";
+import React, { useState, useCallback } from "react";
 import { useTranslation } from "react-i18next";
 
 import { supportedLanguages } from "src/i18n/config";
 
 const LanguageSelector: React.FC = () => {
   const { i18n, t: translate } = useTranslation();
-  const options = useMemo(
-    () =>
-      supportedLanguages.map((lang) => ({
-        label: lang.name,
-        value: lang.code,
-      })),
-    [],
-  );
+  const [selectedLang, setSelectedLang] = useState(i18n.resolvedLanguage ?? 
i18n.language);
+
+  const options = supportedLanguages.map((lang) => ({
+    label: lang.name,
+    value: lang.code,
+  }));
 
-  const handleLanguageChange = (selectedOption: SingleValue<{ label: string; 
value: string }>) => {
-    if (selectedOption) {
-      void i18n.changeLanguage(selectedOption.value);
-    }
-  };
+  const handleLanguageChange = useCallback(
+    (selectedOption: SingleValue<{ label: string; value: string }>) => {
+      if (selectedOption) {
+        void i18n.changeLanguage(selectedOption.value).then(() => {
+          setSelectedLang(selectedOption.value);
+        });
+      }
+    },
+    [i18n],
+  );
 
-  const currentLang = options.find((option) => option.value === i18n.language);
-  const langDir = i18n.dir(i18n.language);
+  const currentLang = options.find((option) => option.value === selectedLang);
+  const langDir = i18n.dir(selectedLang);
 
   return (
     <VStack align="stretch" gap={6}>
@@ -65,7 +68,7 @@ const LanguageSelector: React.FC = () => {
       </Field.Root>
       <Box borderRadius="md" boxShadow="sm" display="flex" 
flexDirection="column" gap={2} p={6}>
         <Text fontSize="lg" fontWeight="bold">
-          {currentLang?.label} ({i18n.language})
+          {currentLang?.label} ({selectedLang})
         </Text>
         <Text>{`${translate("direction")}: ${langDir.toUpperCase()}`}</Text>
       </Box>

Reply via email to