diff --git a/src/components/BlockCategories/Logic.jsx b/src/components/BlockCategories/Logic.jsx
index 811ca6b..758cd53 100644
--- a/src/components/BlockCategories/Logic.jsx
+++ b/src/components/BlockCategories/Logic.jsx
@@ -4,3 +4,5 @@ export const Logic = `
`;
+
+// Temp change
\ No newline at end of file
diff --git a/src/components/BlocklyComponent.jsx b/src/components/BlocklyComponent.jsx
index dd76345..97e6694 100644
--- a/src/components/BlocklyComponent.jsx
+++ b/src/components/BlocklyComponent.jsx
@@ -1,5 +1,7 @@
// Updated BlocklyComponent.jsx
import React, { useEffect, useRef } from 'react';
+import { useDispatch, useSelector } from 'react-redux';
+
import Blockly from 'blockly';
import { Logic } from './BlockCategories/Logic';
import { Loops } from './BlockCategories/Loops';
@@ -7,10 +9,36 @@ import { Math } from './BlockCategories/Math';
import { Text } from './BlockCategories/Text';
import initializeBlockly from './InitializeBlockly'; // import the function
+import * as en from 'blockly/msg/en'; // Import English messages
+import * as fr from 'blockly/msg/fr'; // Import French messages
+// import countryFlagEmoji from "country-flag-emoji";
+
const BlocklyComponent = () => {
+
+ const language = useSelector(state => state.language);
+ // const ukEmoji = countryFlagEmoji.get('GB');
+ // const franceEmoji = countryFlagEmoji.get('FR');
+
const blocklyRef = useRef(null);
+ const toggleLanguage = (selectedLanguage) => {
+ dispatch(setLanguage(selectedLanguage));
+ updateBlocklyLocale(selectedLanguage);
+ };
+
+ const updateBlocklyLocale = (lang) => {
+ const languageMap = {
+ en,
+ fr,
+ };
+ Blockly.setLocale(languageMap[lang]);
+ };
+
useEffect(() => {
+
+ updateBlocklyLocale(language); // Update Blockly locale based on the initial language
+
+
if (blocklyRef.current === null) {
// Initialize Blockly with English
Blockly.setLocale('en');
@@ -21,17 +49,22 @@ const BlocklyComponent = () => {
${Loops}
${Math}
${Text}
+
`;
initializeBlockly(toolboxXml); // Initialize Blockly using the separate function
blocklyRef.current = true;
}
- }, []);
+ }, [language]);
return (
-
Blockly Toolbox
-
Blockly Workspace
+
+ {language === 'en' ? 'Blockly Toolbox' : ' Boîte à outils Blockly'}
+
+
+ {language === 'en' ? 'Blockly Workspace' : 'Espace de travail Blockly'}
+
);
diff --git a/src/components/Canvas.jsx b/src/components/Canvas.jsx
index b219d0d..00c133e 100644
--- a/src/components/Canvas.jsx
+++ b/src/components/Canvas.jsx
@@ -2,6 +2,7 @@ import React from 'react';
import { Card } from '@mui/material';
import Draggable from 'react-draggable';
import { Resizable } from 're-resizable';
+import { useSelector, useDispatch } from 'react-redux';
// Import the button components
import FlagButton from './Canvas/FlagButton';
@@ -13,9 +14,13 @@ import ZoomOut from './Canvas/ZoomOut';
import FullScreen from './Canvas/FullScreen';
const Canvas = () => {
+
+ const language = useSelector(state => state.language); // Language
+ const dispatch = useDispatch(); //dispatch fore event click
+
return (
- Canvas
+ {language === 'en' ? 'Canvas' : 'Toile'}
state.language);
+ const [projectName, setProjectName] = useState('Project_Name');
+ const [isDropdownOpen, setDropdownOpen] = useState(false);
+ const dispatch = useDispatch(); // Add this line to get access to dispatch function
const handleProjectNameChange = (event) => {
setProjectName(event.target.value);
};
+ const toggleLanguage = (selectedLanguage) => {
+ dispatch(setLanguage(selectedLanguage));
+ updateBlocklyLocale(selectedLanguage);
+ };
+
+ const toggleDropdown = () => {
+ setDropdownOpen(!isDropdownOpen);
+ };
+
+ const handleLanguageChange = (selectedLanguage) => {
+ toggleDropdown();
+ toggleLanguage(selectedLanguage);
+ };
+
+ const updateBlocklyLocale = (lang) => {
+ const languageMap = {
+ en,
+ fr,
+ };
+ Blockly.setLocale(languageMap[lang]);
+ };
+
+ const [anchorEl, setAnchorEl] = useState(null);
+
+ const handleClick = (event) => {
+ setAnchorEl(event.currentTarget);
+ };
+
+ const handleClose = () => {
+ setAnchorEl(null);
+ };
+
+ const handleLanguageItemClick = (selectedLanguage) => {
+ handleClose();
+ handleLanguageChange(selectedLanguage);
+ };
+
return (
-
+
{/* LogicBlocks Title */}
- LogicBlocks
+ {language === 'en' ? 'LogicBlocks' : 'Blocs Logiques'}
{/* Navigation Buttons */}
-
-
-
-
-
+
+
+
+
+
+
+
{/* Editable Project Name */}
|,
endAdornment: |,
}}
/>
+ {/* Language Dropdown */}
+
+ }
+ >
+ {language === 'en' ? 'English' : 'Français'}
+
+
+ {/* */}
+ {/* {isDropdownOpen && (
+
+ )} */}
+
+
{/* Spacing Element */}
@@ -61,9 +148,12 @@ export default function Header() {
{/* Sign In Button */}
-
+
);
}
+
diff --git a/src/features/languageSlice.js b/src/features/languageSlice.js
new file mode 100644
index 0000000..8633668
--- /dev/null
+++ b/src/features/languageSlice.js
@@ -0,0 +1,16 @@
+// languageSlice.js
+
+import { createSlice } from '@reduxjs/toolkit';
+
+const languageSlice = createSlice({
+ name: 'language',
+ initialState: 'en',
+ reducers: {
+ setLanguage: (state, action) => {
+ return action.payload;
+ },
+ },
+});
+
+export const { setLanguage } = languageSlice.actions;
+export default languageSlice.reducer;
diff --git a/src/store/store.js b/src/store/store.js
index d3a3e50..a5796c2 100644
--- a/src/store/store.js
+++ b/src/store/store.js
@@ -1,5 +1,10 @@
import { configureStore } from "@reduxjs/toolkit";
+import languageReducer from "../features/languageSlice";
+
export const store = configureStore({
- reducer: {},
+ reducer: {
+ language: languageReducer,
+ },
+ devTools: process.env.NODE_ENV !== 'production',
});