From 2a45af3d23bedc5654c876c91447191d564e6a48 Mon Sep 17 00:00:00 2001 From: pawel Date: Thu, 13 Feb 2025 02:40:03 +0100 Subject: [PATCH 1/4] Added translations, created good looking folder --- src/18n.ts | 50 ------ src/App.tsx | 2 +- src/components/navbar/navbar.tsx | 2 +- .../partnersCompanies/partnersCompanies.tsx | 2 +- .../workshops/WorkshopsList/WorkshopsList.tsx | 151 +++++++++--------- .../templates/sections/caseweekOverview.tsx | 46 +++--- src/i18n/homepage/en.json | 9 ++ src/i18n/homepage/pl.json | 9 ++ src/i18n/i18n.ts | 47 ++++++ src/i18n/navbar/en.json | 14 ++ src/i18n/navbar/pl.json | 16 ++ src/i18n/partners/en.json | 3 + src/i18n/partners/pl.json | 3 + src/i18n/workshopsList/en.json | 10 ++ src/i18n/workshopsList/pl.json | 10 ++ 15 files changed, 226 insertions(+), 148 deletions(-) delete mode 100644 src/18n.ts create mode 100644 src/i18n/homepage/en.json create mode 100644 src/i18n/homepage/pl.json create mode 100644 src/i18n/i18n.ts create mode 100644 src/i18n/navbar/en.json create mode 100644 src/i18n/navbar/pl.json create mode 100644 src/i18n/partners/en.json create mode 100644 src/i18n/partners/pl.json create mode 100644 src/i18n/workshopsList/en.json create mode 100644 src/i18n/workshopsList/pl.json diff --git a/src/18n.ts b/src/18n.ts deleted file mode 100644 index c9920d2..0000000 --- a/src/18n.ts +++ /dev/null @@ -1,50 +0,0 @@ -type Translations = { - [key: string]: string; -}; - -type Locale = { - [key: string]: Translations; -}; - -const translations: Locale = { - pl: { - "O Projekcie": "O Projekcie", - "O IAESTE": "O IAESTE", - "Warsztaty": "Warsztaty", - "Partnerzy": "Partnerzy", - "Firmy": "Firmy", - "Kontakt": "Kontakt", - "Moje konto": "Moje konto", - "Moje warsztaty": "Moje warsztaty", - "Panel administracyjny": "Panel administracyjny", - "Wyloguj się": "Wyloguj się", - "Zaloguj się": "Zaloguj się", - "Menu": "Menu", - "Honorary Status": "Status Honorowy" - }, - en: { - "O Projekcie": "About the Project", - "O IAESTE": "About IAESTE", - "Warsztaty": "Workshops", - "Partnerzy": "Partners", - "Firmy": "Companies", - "Kontakt": "Contact", - "Moje konto": "My Account", - "Moje warsztaty": "My Workshops", - "Panel administracyjny": "Admin Panel", - "Wyloguj się": "Log Out", - "Zaloguj się": "Log In", - "Menu": "Menu", - "Honorary Status": "Honorary Status" - } -}; - -let currentLanguage: 'pl' | 'en' = 'pl'; - -export const setLanguage = (language: 'pl' | 'en') => { - currentLanguage = language; -}; - -export const t = (key: string) => { - return translations[currentLanguage][key] || key; -}; \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index 368c689..c839494 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,6 +1,6 @@ import logo from "./logo.svg" import "./App.css" -import "./18n"; +import "./i18n/i18n"; import "react-toastify/dist/ReactToastify.css" function App() { diff --git a/src/components/navbar/navbar.tsx b/src/components/navbar/navbar.tsx index 68cc497..f4d1bcc 100644 --- a/src/components/navbar/navbar.tsx +++ b/src/components/navbar/navbar.tsx @@ -7,7 +7,7 @@ import logo from "@/assets/img/logo_horizontal.png"; import { useState } from "react"; import { HomeRepairService, AdminPanelSettings, Logout } from "@mui/icons-material"; import { isAdmin } from "@/utils/isAdmin"; -import { t } from '../../18n'; +import { t } from '../../i18n/i18n'; const NAVLINK_STYLE: React.CSSProperties = { color: "inherit", diff --git a/src/components/pages/landing/partnersCompanies/partnersCompanies.tsx b/src/components/pages/landing/partnersCompanies/partnersCompanies.tsx index c448642..0405a2a 100644 --- a/src/components/pages/landing/partnersCompanies/partnersCompanies.tsx +++ b/src/components/pages/landing/partnersCompanies/partnersCompanies.tsx @@ -3,7 +3,7 @@ import { Company } from "@/@types/API"; import styles from './partnersCompanies.module.css'; import naTeraz from '@/assets/img/temp.png'; import { PartnersPageProps } from './partnersCompanies.type'; -import { t } from '@/18n'; +import { t } from '@/i18n/i18n'; const PartnersCompanies: React.FC = ({ companies, title }) => { return ( diff --git a/src/components/pages/landing/workshops/WorkshopsList/WorkshopsList.tsx b/src/components/pages/landing/workshops/WorkshopsList/WorkshopsList.tsx index 2338ff0..3553f39 100644 --- a/src/components/pages/landing/workshops/WorkshopsList/WorkshopsList.tsx +++ b/src/components/pages/landing/workshops/WorkshopsList/WorkshopsList.tsx @@ -1,24 +1,23 @@ -import { WORKSHOPS_MOCKS } from "@/mocks/workshops" -import { Link } from "react-router-dom" +import { WORKSHOPS_MOCKS } from "@/mocks/workshops"; +import { Link } from "react-router-dom"; import { useState } from "react"; -import s from "./WorkshopsList.module.css" +import s from "./WorkshopsList.module.css"; +import { t } from "@/i18n/i18n"; const WorkshopsList = () => { const [selectedUniversity, setSelectedUniversity] = useState(""); const [selectedField, setSelectedField] = useState(""); - // Pobieranie unikalnych uczelni const universities = [ - ...new Set(WORKSHOPS_MOCKS.map((workshop) => workshop.university.name)), + ...new Set(WORKSHOPS_MOCKS.map((workshop) => workshop.university.name)) ]; - // Pobieranie unikalnych kierunków studiów const fields = [ ...new Set( WORKSHOPS_MOCKS.flatMap((workshop) => workshop.preferableFieldsOfStudy.map((field) => field.name) ) - ), + ) ]; const filteredWorkshops = WORKSHOPS_MOCKS.filter((workshop) => { @@ -32,79 +31,87 @@ const WorkshopsList = () => { return matchesUniversity && matchesField; }); - + return (
-

Warsztaty:

+

{t("workshops_title")}

-
  • - - -
  • - -
  • - - -
  • -
    +
  • + + +
  • + +
  • + + +
  • +
      - {filteredWorkshops.map((workshop) => ( //outputs every workshop that fits in filters -
    • -
      - Workshop -

      {workshop.company.name}

      -
      -
      - -

      {workshop.title}

      - -

      {workshop.shortDescription}

      - -
        -
      • 📅 Data i godzina: {workshop.startsAt}
      • -
      • ⏱ Czas trwania: {workshop.durationMinutes}
      • -
      • 🏫 Uczelnia: {workshop.university.name}
      • -
      -
      -
    • - ))} + {filteredWorkshops.map((workshop) => ( +
    • +
      + Workshop +

      {workshop.company.name}

      +
      +
      + +

      {workshop.title}

      + +

      {workshop.shortDescription}

      + +
        +
      • + 📅 {t("date_label")} {workshop.startsAt} +
      • +
      • + ⏱ {t("duration_label")} {workshop.durationMinutes} +
      • +
      • + 🏫 {t("university_colon_label")} {workshop.university.name} +
      • +
      +
      +
    • + ))}
    ); - }; -export default WorkshopsList +export default WorkshopsList; diff --git a/src/components/templates/sections/caseweekOverview.tsx b/src/components/templates/sections/caseweekOverview.tsx index b4d94b2..e0ff1b6 100644 --- a/src/components/templates/sections/caseweekOverview.tsx +++ b/src/components/templates/sections/caseweekOverview.tsx @@ -1,11 +1,12 @@ -import { Box, Stack } from "@mui/material" -import { BaseSection } from "./baseSection" -import icw_logotype from "@/assets/img/icw_logotype.svg" -import overview_1 from "@/assets/img/overview_1.png" -import overview_2 from "@/assets/img/overview_2.png" -import cogwheel_light_icon from "@/assets/icons/cogwheel_light_icon.svg" -import AnimatedNumbers from "react-animated-numbers" -import React from "react" +import React from "react"; +import { Box, Stack } from "@mui/material"; +import { BaseSection } from "./baseSection"; +import icw_logotype from "@/assets/img/icw_logotype.svg"; +import overview_1 from "@/assets/img/overview_1.png"; +import overview_2 from "@/assets/img/overview_2.png"; +import cogwheel_light_icon from "@/assets/icons/cogwheel_light_icon.svg"; +import AnimatedNumbers from "react-animated-numbers"; +import { t } from "@/i18n/i18n"; const AN_STYLE: React.CSSProperties = { fontFamily: "Inter, sans-serif", @@ -13,15 +14,14 @@ const AN_STYLE: React.CSSProperties = { fontWeight: "bold", color: "#5A4C32", width: "1.2ch", -} +}; -// Statistics on the main page, that are animated const STATISTICS = { workshops: 160, universities: 10, companies: 60, cities: 9, -} +}; export function CaseWeekOverview() { return ( @@ -40,8 +40,7 @@ export function CaseWeekOverview() { IAESTE CASEWEEK logotype

    - Największy cykl warsztatów inżynierskich w Polsce. Założeniem projektu jest zbliżenie do siebie środowiska akademickiego i biznesowego. Praktyczna forma case study umożliwia - studentom zapoznanie się z realnymi problemami występującymi w codziennej pracy oraz doskonalenie swoich umiejętności zarówno zawodowych jak i miękkich. + {t("test1")}

    @@ -55,7 +54,7 @@ export function CaseWeekOverview() { }} > - Warsztatów + {t("workshops")} @@ -63,29 +62,30 @@ export function CaseWeekOverview() { - Uczelni + {t("universities")}

    - Projekt umożliwia studentom i pracodawcy wspólną pracę nad przygotowanymi zagadnieniami. Podczas cyklu warsztatów wiodące marki z rynku polskiego i światowego przeprowadzają - warsztaty na najlepszych uczelniach technicznych w kraju. Studenci stają przed możliwością zmierzenia się z realnymi problemami spotykanymi na co dzień w pracy zawodowej. - Pracodawcy podczas casów mają okazję poznać zachowania studentów w atmosferze pracy, wyłonić talenty i nawiązać współpracę z potencjalnymi kandydatami. Dzięki udziale w - projekcie IAESTE CaseWeek tysiące polskich studentów zdobyło wymarzoną pracę. + {t("test2")}

    - Firm + {t("companies")} - Miast + {t("cities")} - + cogwheel - ) + ); } diff --git a/src/i18n/homepage/en.json b/src/i18n/homepage/en.json new file mode 100644 index 0000000..9e3491c --- /dev/null +++ b/src/i18n/homepage/en.json @@ -0,0 +1,9 @@ +{ + "test1": "The largest cycle of engineering workshops in Poland. The goal of the project is to bring the academic and business environment closer together. The practical case-study form allows students to get acquainted with real-world problems encountered in everyday work and to improve both their professional and soft skills.", + "test2": "The project enables students and employers to work together on prepared topics. During a series of workshops, leading Polish and global brands conduct sessions at top technical universities in the country. Students have the opportunity to face real problems that occur daily in professional work. Employers can discover talents and establish cooperation with potential candidates. Thanks to IAESTE CaseWeek, thousands of Polish students have gained their dream jobs.", + "workshops": "Workshops", + "universities": "Universities", + "companies": "Companies", + "cities": "Cities" + } + \ No newline at end of file diff --git a/src/i18n/homepage/pl.json b/src/i18n/homepage/pl.json new file mode 100644 index 0000000..721dd49 --- /dev/null +++ b/src/i18n/homepage/pl.json @@ -0,0 +1,9 @@ +{ + "test1": "Największy cykl warsztatów inżynierskich w Polsce. Założeniem projektu jest zbliżenie do siebie środowiska akademickiego i biznesowego. Praktyczna forma case study umożliwia studentom zapoznanie się z realnymi problemami występującymi w codziennej pracy oraz doskonalenie swoich umiejętności zarówno zawodowych jak i miękkich.", + "tekst2": "Projekt umożliwia studentom i pracodawcom wspólną pracę nad przygotowanymi zagadnieniami. Podczas cyklu warsztatów wiodące marki z rynku polskiego i światowego przeprowadzają warsztaty na najlepszych uczelniach technicznych w kraju. Studenci stają przed możliwością zmierzenia się z realnymi problemami spotykanymi na co dzień w pracy zawodowej. Pracodawcy mają okazję wyłonić talenty i nawiązać współpracę z potencjalnymi kandydatami. Dzięki udziale w projekcie IAESTE CaseWeek tysiące polskich studentów zdobyło wymarzoną pracę.", + "workshops": "Warsztatów", + "universities": "Uczelni", + "companies": "Firm", + "cities": "Miast" + } + \ No newline at end of file diff --git a/src/i18n/i18n.ts b/src/i18n/i18n.ts new file mode 100644 index 0000000..773ac46 --- /dev/null +++ b/src/i18n/i18n.ts @@ -0,0 +1,47 @@ + import plNavbar from './navbar/pl.json'; + import enNavbar from './navbar/en.json'; + import plPartners from './partners/pl.json'; + import enPartners from './partners/en.json'; + import plHomepage from './homepage/pl.json'; + import enHomepage from './homepage/en.json'; + import plWorkshopsList from './workshopsList/pl.json'; + import enWorkshopsList from './workshopsList/en.json'; + + + + type Translations = { + [key: string]: string; + }; + + type Locale = { + [key: string]: Translations; + }; + + + const translations: Locale = { + pl: { + + ...plNavbar, + ...plPartners, + ...plHomepage, + ...plWorkshopsList + }, + en: { + + ...enNavbar, + ...enPartners, + ...enHomepage, + ...enWorkshopsList + } + }; + + + let currentLanguage: 'pl' | 'en' = 'pl'; + + export const setLanguage = (language: 'pl' | 'en') => { + currentLanguage = language; + }; + + export const t = (key: string) => { + return translations[currentLanguage][key] || key; + }; \ No newline at end of file diff --git a/src/i18n/navbar/en.json b/src/i18n/navbar/en.json new file mode 100644 index 0000000..19af55d --- /dev/null +++ b/src/i18n/navbar/en.json @@ -0,0 +1,14 @@ +{ + "O Projekcie": "About the Project", + "O IAESTE": "About IAESTE", + "Warsztaty": "Workshops", + "Partnerzy": "Partners", + "Firmy": "Companies", + "Kontakt": "Contact", + "Moje konto": "My Account", + "Moje warsztaty": "My Workshops", + "Panel administracyjny": "Admin Panel", + "Wyloguj się": "Log Out", + "Zaloguj się": "Log In", + "Menu": "Menu" + } \ No newline at end of file diff --git a/src/i18n/navbar/pl.json b/src/i18n/navbar/pl.json new file mode 100644 index 0000000..de730cc --- /dev/null +++ b/src/i18n/navbar/pl.json @@ -0,0 +1,16 @@ + + { + "O Projekcie": "O Projekcie", + "O IAESTE": "O IAESTE", + "Warsztaty": "Warsztaty", + "Partnerzy": "Partnerzy", + "Firmy": "Firmy", + "Kontakt": "Kontakt", + "Moje konto": "Moje konto", + "Moje warsztaty": "Moje warsztaty", + "Panel administracyjny": "Panel administracyjny", + "Wyloguj się": "Wyloguj się", + "Zaloguj się": "Zaloguj się", + "Menu": "Menu" + + } diff --git a/src/i18n/partners/en.json b/src/i18n/partners/en.json new file mode 100644 index 0000000..1f0074c --- /dev/null +++ b/src/i18n/partners/en.json @@ -0,0 +1,3 @@ +{ + "Honorary Status": "Honorary Status" +} \ No newline at end of file diff --git a/src/i18n/partners/pl.json b/src/i18n/partners/pl.json new file mode 100644 index 0000000..b247539 --- /dev/null +++ b/src/i18n/partners/pl.json @@ -0,0 +1,3 @@ +{ + "Honorary Status": "Status Honorowy" +} \ No newline at end of file diff --git a/src/i18n/workshopsList/en.json b/src/i18n/workshopsList/en.json new file mode 100644 index 0000000..3caadeb --- /dev/null +++ b/src/i18n/workshopsList/en.json @@ -0,0 +1,10 @@ +{ + "workshops_title": "Workshops:", + "university_label": "University:", + "all_label": "All", + "field_label": "Field of study:", + "date_label": "Date & time:", + "duration_label": "Duration:", + "university_colon_label": "University:" + } + \ No newline at end of file diff --git a/src/i18n/workshopsList/pl.json b/src/i18n/workshopsList/pl.json new file mode 100644 index 0000000..5cb9b70 --- /dev/null +++ b/src/i18n/workshopsList/pl.json @@ -0,0 +1,10 @@ +{ + "workshops_title": "Warsztaty:", + "university_label": "Uczelnia:", + "all_label": "Wszystkie", + "field_label": "Kierunek studiów:", + "date_label": "Data i godzina:", + "duration_label": "Czas trwania:", + "university_colon_label": "Uczelnia:" + } + \ No newline at end of file From 45094b1dbae171295e0b3544d4142c28ffa7c85e Mon Sep 17 00:00:00 2001 From: pawel Date: Mon, 24 Feb 2025 13:05:14 +0100 Subject: [PATCH 2/4] partners-design --- src/assets/img/PSRP_logo.png | Bin 0 -> 27398 bytes .../partnersCompanies.module.css | 75 +++++++++++++++--- .../partnersCompanies/partnersCompanies.tsx | 9 ++- src/mocks/companies.ts | 51 +++++++++++- src/pages/companiesPage.tsx | 2 +- src/pages/partnersPage.tsx | 2 +- 6 files changed, 120 insertions(+), 19 deletions(-) create mode 100644 src/assets/img/PSRP_logo.png diff --git a/src/assets/img/PSRP_logo.png b/src/assets/img/PSRP_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..657453fe74219754eb6b2d3a9a03cd60bdea1184 GIT binary patch literal 27398 zcmeFY=UbCm_XdjNjEFRqDhRQRq9`CLAT^_iC$b9Jd?C{UHp-AO(DZFmR;5FH;44w#>ZR zxYXhvA)!b4X9onAsDcR`FPjH^7yA4Wu^b12cko4a7e8RLsK~Pvfh6$dQU1NxR{Pnz zYd)XvQi+e*UGTT;tQ6i5_;ld{YE^`$41AJ*W3n9&+x>-DPXYWIW_QCGW*Eq=G4FuR15mqZANEW*vvv8ZxRB5lG1O{j zU;<~lCEcAy(-nTNRJG-{G+sbK^7dvc?!q0}*|doR>=e%BxdaUti7L9Zx*XO7_@%_> z0(giq4I9bzY&pnjf5>W3Ax>4wF!2Bq6#g67F&_rz`Po^~a+j_eMssh~oSR6fy8@sh zJz&SGc#d5rBNW(?FyG4XbHhXe;ONHgIn!Z~mH+`nz{_mPH8{t=BJ+y+mqKbsGn<^I zA=sJj?*pszb4BG?dxSoJ2QEnG5Ys=CA+xw9)-YCrCxj+`k2D~i1MeifYMa}hpb8F= z2xox{l7DNm{qrkYDXMvvLJw$iaJ={d?5s9f0s$7zoi>iwVe!b;LCoBk45V(Xy4u zchg+8nP~w3U6BU_T_MCq5^gXoqffPZkjj>q-<=x*4p^9n47k)*8NR}&W#j5}0UafJ zSR3g^Vg$W|VCf_3a>#K6Ak2*w5+_ei-$#}07UOZr1dn2yao@G>5qfk8z=;ydOhWgj zWJYzrHiDU)M0a_b+c7gVq&{_SePY)nW&q;q48%_vu z(5l5vLP!W^2;6*WP7zj+zY7#&p34b=pE(!zS%#u08{X~D>PqkZIm&$$mgr=lKZ z^|^A_2Ku)`)Fk_w9}R+1r3P} z6Q5xquP?pqpFM4BZX2RG1_t!o%7*+8r3+=1u?ChmW7N1#j6{|jATUJ)xb}X0EF57>W0!>$<2UnlwzeP zFQlQuf6Zz1N7MGQnlAxm#lMHBhk>Tj>R5XNUvDcws%L4sEn5qVa*oHiAK*AI>K0<dGHRy*1Tm-Z&1B9ZZsubML1&kuUe?}>{ z?C>;Am;Qan@P{E_MuZ%|-2c9_>t*pAvY~DXH+;BY*VU(jR1JbW;{csY?*taFMJ~@J z5%tSkH<*q_X8>~^dkLK43XOjo=h{&EuqZ2uUfGW@AT@(UL?$G?eSmnm131NVDJBSe z$R%oWwyA;)c(}R(q+pW$B~y!>O61Jp8Fs+BuK(5%e74pHd3lx7vD+J{8(2D)p-gLb zRF~t_j4jKFZIw9zc0LPOuCNGu*UVmahBS|Pj+SgVn_(L6TQka=yDB6Ro|kf{&a8dZ z_gAQLwLk?I?hd%|O^hVypQuikty#zndaZoEFbMK2SK#>AdhUph|ZnG&yff5b`#_B9U_G2`oo(JBs`@LvE zII(CUnwn;_fnZQadvKe_S;VPLxz1jsQg$z@9WcXqAc~d|PUlezJMyHVhUw<}2Ky&t z7`Lornq5}qzTi167zR+7x?BQm@DQFiIR&F)j?=4DxW5k^fFO9&Bq&J)+Co3q58T(= z-TOMoBsiZ{4{vA)Hzxg|T!S=VwaUFKnGLCdh%Kwg@1QIIi^doMT0I%hSq^{RO;OsORBhaP>UbpXSoE1F#qwV5JkVl17MS9GaK=HUf!tjpd%g!RxcaeHe2w zyh$&;64O+$`jkV063}R<&M?`2umza(D! zTK0z!WxukJ;R!&ZWttIJo534J`lt03ANtGg$_2~*t>>$|**kPJa4Y5kyhK(ACc1i% zyPMz7soO{p3*Z;w7)hK(40ExiE3<*sKNnI1MJf*vbd1g~gt`Gf{B=%W5o;qVgt-cd z<#{CQ{N&UC8cdXA(|F@_{&qQ;?Nd@<{11vfaekz#s~IL+#op?(2mWmW5-%eJ^ki}2gdaRSnC zT$!Oy&&(0C&#qB)ULPG)bMZ%Rb-4L&5hr$i{bD#q5}Cb8iMUe_RmhT)cxpElv(r)V zo8oL`Dp3sg?aNe;5r+ps03ZSsyOY4TmgZTf6~ChE_Lyiz#H_2NQ+y~RtDCr)$(jHjia|@W?5m- z*L7~Kqglo);i?7~O#cmb8Mz^>4y)I3GByEc@82y|ZA8IRC(q`W7nS+84RD<@qq{la z?Y|raUU68E1}1b>n$|I=7dQRd_t<|M0l?)PxuDC@ltT85$+3=)5QO5KB$0U#b%m)g zzN~#^*S7jpl4MWw=aX-$spV1^Aa1c+i@}n@cteuK9)H5|@NAH(Z2J3a80xbJNU{GO z8mALi8jCfZ9a5hFZ-qZYuCM)Y3nbb;9o?9UqSMv593zgc?y}4#|s@2~D zS>Fl6E7)XF`=t@r3q!CdHtjF}!JvEA$4#PUO$9Hzr-wUsQKVY%Q6tKlyF|D(=T~hV zWzMzVZcT(hl*)Yowd-Vf#ZbMqhtws;=v>(XsFhF;+%ya^zQij67GN*dLGSICL^_E0N~`GX>MiFQ)fcAnNhiM<5A;?f~mSU zHYSVV&)go$xyzIdsVll{O~-CszAav=y=^ZeQ{W->cA=!@d*&%a{vUr9Dgru~{8oyRB9mrsQS zBGks4OtsoBv_>MICuPKg&M%j80BuLBAN8W;SngF4jpry@ALV#YcJohMV+{VVk!IUX zK!kOu1ug;jt1=Gq&0P|GfVyB9N$9&PrX*2~>GE|r#*y+pqnn_!3F&;iZlGLpx-}C0 z6&G_u3<{v^B$I^F^;FF~6R>#rb1PR;JPdgiIX;^?fHJ0e5&zh<&rR`RP!gI{fvQbFqflYbug`S&RR|vuU30X3UDLYJ4+rcKb=( zB72g2W(}xl-i4ef$vju6gE;3PI%+^`3w4lTu0{K$+b&tjq^S9Q)3DYpYHS|Gr`MWNy(G8$ z729}xx)T|m${B>V^ji;sC;==u7htNy+p_9AB)f3|GUy#KU)O<*o{qASWNsh(rZPX zDy97B@H0}LtzGDN6n59P)j*CnIXCvys$gL&fLx`jdfjt4Q*b#zT7yk9N;(YoE?j?h zj;Q%2>9YY|hTyD@fN(}yQN# zty9vb?NklXU3%Fy8k;+(47*ukImD3S$G4&RU1ItfQNAD>TGIhJRE94a{mWp=u3jX? z?0c|74>i<{CRv~BAfp)&DAc0#pOZwwnfw>%kAo0SPRX(uZT+$Pl?D4`vu~b^OV9Dp zixfd83B32Hn?{XqQ+cU)x}E7euonu3zJj@OBGClxXKIBM#Mu|~+%~(QRpRWf??i5n zrzTZyxU^~vruX51wd00rn>CUNSJ|<&tvVA3_z4^{N-Ilt8g}x-NxLm(%66;AVyM3} za-`N`BWL|<;%QS&FLKwS1m&dX1(zZciL%xuO0JytObxQeS|9tGi6QjLVa1NutlDTZ zeTtkMNe*R?-sBjR_Y}-8fCHTpSl2>*BPQQE_24+-3P}J8K2B*WWvOT6b(dG9V|~jh zOJ&|$zaLMBD^;iAyxte&noOqj)+Bv=%;3lp&iWa94j-cTWhTQQ`qRNWf#xL9@ zpTo_rdFoTp3NxqyIj(s0 zS1fH@!q()Rr7Zq1tZ|?CM>SbLLC>61qSBOeU8X4fb^?Lo;p=kNrg3V7IdzqNZT^#|PkSeoaP!3oM%O-22>s}`D=!4)=pUBAN_9VXCR_IwvnYod~ z7^I9@3-(RPq>S_)b5Z!#T#{2t>+vXOCQyBUJhhmbB9*Q$##TkqY3{YilS1!F% zP+Oa?)3C)u&&(E#WGns*gC$r5pf~EqCpz#5>hYA5M*#HokwN-7EREe2*H8 z>{pc!!PvjAnQMuUNhfO-iH{=67}u3--j-Xu$%LtxZRMA0Z&s=Ft*dW0=&9PN5Dl8+ z(|_D&H&z^Ga6(Xz?=1#M{QzJwkSqBaKIyrLk~E1#4_b5S)rq4@c*T$~>G7Z0AD&m1 zzHqTO34JI`?6$MdIez|tK9hKSVJw+^XCB%^^RC4jt$FJ!+`s&NWS?sPqn{mHH}?9( z$Fya(e>-dF)A@EBnpwOfN3Orgcb$4?snGBtP%P%@jl`g&n1|1zJGM)yHzS*WroU6Y zTJeE*cn&Jl>$`YpWu{H`u(B2{akP=_z;FFIa<>&V^0nkh`i;WF44wxfJydWSH)7yo zCu1^Tck(%1*o<*#xWvM()&T>>skSPb4!cb_(o{Zct4%wT^;txMg;4-KR69ET1}0B} zyM5ZnG^t}~dW_x&ADL2I>I<|@(q?$l9-}iSejW*Q(sVvq%*iS#_*9#9g7`LXCh3?2 z0VvbzVbHmAc|Ird}4x(zV&Mj7Kdd8L3Ic>N4-vLty^=RxvIOwLK( zYK6ndIhtEHwEi=!VnQi$>joopso*8c&hqINwxROVvyjIymav(fNy~lf?z3(M9)m}5 z+|4sf*%no+1WgZurVL`jorLQz&%reA!<%vw3|~o%Z5u?VTfqEuDD(oorfs)5bj{S( zK?*R`JaUDS6~loC~8HvsN&~xb#w}hCDV{U;CP%y z|GNYvffXORcwL_9kmJi4Yr2m?{tS8*^o;F3YTI&HcLfyQkQOl)XL+Byd88mC`859& z?E>o@WESWJR-2SQWqFg;wBaYS!@c-#gRL7);8Z93haPhK*@*W`<2}=-RJFgXsJzq8 zulCVy2(<*?2+%K<4NX86+Nrr4i*Jd-XpdQ(;pO{!E3TB*p?%B(q)(X9!GDn$0^42U zF=#34CVyuhT!2@!0>l`q{xCxN(e|;fbOWy#?~ieZ8NMpew$;lHi=^MOGV@sjQHK*V zV9;u(J-sfi@D7+@^DRAx^K&Tlt*uy^s$r%oKKG+Nlz6H$SB#bkn%bN>2PyJqZ}X-Q zF15&$e*khIy4WB$z6S-8I`gGrnjP0B)G)rcS`rN@2Je#~iS7h&8H7_pKj$ zk;Rwi2M?2GID^eN{!4SZk<)by8}L9!u>*Rt+?(jTEi<9%{2$ZoIkFG)KJ__mD&k57 zKGv#k{jB$j*Q1`is|i;-BBFEhdZfE03F~t`jB|~y4%t*6Q>bCoT&SJ(ZYfw-IFUh8 znQ&u5Jf+?RrZ^@$l#Rt_Za*$And1I9T%F!W$x*Q+@?8V&m&C_F2svsU>@4?G>j3jN zI27qB9ZHmYT>k=AWqWCDe5Ywg8$jVe!zyAafgqZ~yT8rL`zkp&tdP4UG;{xZzT46I zwSlM=x7e#!erG=9N-^62y(rKt%+eGb39%nYZK02R*Bs(@2(jMvIa^~9Bj?yD3D9n1 zBT7UyPLl0@%3mpYTo3KJH9HZXr9_D3klOtBvsY(FHDq!7CUxHinA6h&HQ4A{5e*xa zJ3Ylre6iYDw^9!&H~Y$4-r4NlW8A-dLoqDf{2cvL6giD0Rs;8lB_<+yumqMneW9m> zNBsVyBUVuJxx6?g4gf*%oO^F>>Pf1A-}RuTzp2-F`7o@0?Xd4})ps@IS0(=IAq6K* zWU2$omr4tE`f(d_L^jYx_8Cx*4cpqjhs2CR0-QkLDV98wHylsHx8bgn*JR$pRCbgH z91z|bw3wMq1eJS({#|NC4wM(vr^CTK9prc7o!uH*3y>Qfi^8nlZ zSnkA8CeIp_TQszF>?a!w7GBnDlP_EAl0&Yavp?FZzu9E!xtrUCxhpTsz4J7!?ySwAM*Sqp_dG&QsF)Hj^&)DQ;Tsm+ocnmn<$#u`}Uurlnj@lj{x? zD%>F~kDhUmXEq!^@Y-MJPcf;iRa4D1t@s%5#GJ?f1kh2n*T(fXH=w6=LQ6`wi+ zHCXU;!LNo(N6lBR$z)%!X|Zg|kDnxNB*jo!8>1h$l%%oH6}9DQR4CEyO~Gpr7Io=! zL0_fe`8`s*6ceK#`lr)3H*%kjc9es`t zoQKykW^>Sbo|DOPC2*j>L+qG6QL69?9mHr8j>x&(+co@h4h>`8@hG5 zJeIC#2VW@gf=b;1#yYyT7>Bf4-;%Sk+2(!6X~KtPl=};H(CSYMSrYE)xL>+@FVBA9ACV@W!75l?>_BZQW5R=I{@@ zOGNYHSLZC8^Ak#?ZR`?7*+heE^GL61d)uByz*_W^dZA&ruuZmQ4RmJ-Htk7k{x2VK zhb0f%6!d1_aSas!kyh9DDsWSz#FLAPL<`!0yFQ-Xj_xO z(%l}O(gaLx{9NLK!57?1=p~24On-5=bCq?D;1?W>whM+`=X(dh=UFkyb3^JQ;DBHa zn-m#QRu9EUrlBc%P0{tu^A-<7|D37ggtkxr?0RqD>7z1!SpB(j#hEo}7kDm=niv?dFNdb`UL8duh^o*)u;d?OGcFr{5im~AS zWJl5SD`I-+R(R0NjDyu|d|Rs-{aF8B|0aX+nm%#RyMh}7@)|q~$A&Bo02+JGtA63E zrS(Ke2=8a>BQBN^n(u9;Byltf<4!HDYYYDhnCRAr%z7_EFA+uU0`SiS7))Jngn}jo z{mFY6*E&LzQ(6ielAe5y7EJ%v8`g>2is7Fm|Lb(Gz;w%;a13Lc@C-Gb6BF>>8d@z`s5>!}g-bY3jKm zF>L>_U-t~aCq}hDV)mh5HI@Dv=laR=yW*b-m%B`mJA%cZ&GhY!28F5#aL%A4BRObGJT(%zz|h8}e)KV;quI zWv7&vzk;f?zcfF7Xf1sh9d7c|8&TOQL~<*btxR}K`JytnS*E?G{!&Z zfKd_o(DoeROtib*6AS0VZXZ7SzAPvYEkEn@516L$3Cj(RUFlGYd3FE4QYMz2Ut2!0 ziXW-0#oR;o*92D|nd9V|4-xult^r=^<$JPcJo!ry&l-(t%B_bBJWKbz6Pn%6OM#lE zP4#+A^SuzO_4WH7EMV$Km^`f|qSIS`#zoUqkd>GC5fu{tMYL}hh^}Id;)I2Elmo_JycTj-sfS3 z)6)M+uh^2p5Ra4lQ{z9HkP=FMXWSn~A}zh!3~}#t4%(q`egy@AO}Zzr8g63l{C2Z+ z{-P8RUeW)a_G`ons{ebQWa-#t`YRg3_}%KvFBr|OrSQtsMjpz0E{EGC#cc2(mM8Wu zeTCuFaN*c8bYME^*Ek?rQC_Z9oc^x`H~)&`cS)Z8F>0YyHeu!)Vh ztCanp_EXQLOBE(s38|vkG245gEAYSI)DPORZ{X+$tPbULVJO@u)OKsFBF4NUTz=Ko zKE*wkg|rKAO^Lh?#DsT|UoE(nE=z;FU;tshGf#}6YN<{2&NcxdScBgKM?+>d&r!3Q zV~N$`>=MZ7D@pvT9j5hm9hG2MbkK>7Lgy--&A?)n=tQ}p0CG1ztYwtQ0qRCx)9Q|X zsI6?@CxSwdWSP5NpLvy{*eFbu7vcBizZRh4^}b`HK>zro{BQ7NhJyb&$qs|Ru%lO% zPjhl#BAg*d_pL~=QYATM;jHjT;HXP7Od{)Rd(9pFnEFoADMB0W9wsvF4Gsh{cp%-A>GIlt*abMw>`$+>A^9$1W{Bb9ma*BG^>pdtH|SA0K|AJ+9aja}(y=pAV@ z>ya&zcf)h=C~}FVMRGe&;W#a{?x@q^(q%h5kkR%nS>dF-@?P^Q@vXQpxA3DL|7%~e zO)I;~gSywmor-b}5n`_Co%|akB7DV4JjN}ZqZYZ(q zxgi>K_Mt(d<~5|4q@7GQ0dO`*dT@hUsxtC!Pvu1qOy+X`J#q%|{06s=T2DWl5mgM+ zAaYgRZN^V2b+x*-?JSQb2bUknp7XgYpOe1f-&O%tqm>nFmxNc!XgKt{N$5Z(rom^v z6*WdX@z3=;e$uXMG?JulxoU>0YbQxz6Ucqj)`fC@s3q`;-IV#`S9Z;2WQ}Njqo2V_ znrZ>W(0~0VHqq|!PD`(~TyFX7z}BDk=IUO#W_=b1-~3lhW1A}~l|G6R2SR+QPib)h z^cQE{_y0OtU+q|9(){kO+QPR0CzCBrOJKB!9+@2b`Jd=CZ1|O)jvoe(=2M9QHZ|M3 zb|$ix9Fp2-(%oNLx!PX>DVUE=;|s~JaIJKNljP_AYchUpZc@DC94YQbJngV`@@h^35HOWRgtvBX zjtQ!xZL3%uc#>9$p2nPmZqaE%`yEAYkg4@?RsF;mUwC;1OscrOVC~4sevw6P%r6olj|l*TB$YO3%yPMPeE^t;c`4ZeVF8 zd$bUPA-slU)i zz}QBs3H)0F&tKwlV@DF7o3-rDTw)2lv&|PWofOwV@AI@M=3Ca0$Rj!w)aHE-bHd5@ z*(~v0Hi0)SpP$Z>yu0~UY6ySFTbF0~E2@k!E~Qv!rr+8%zda>u+oVRVFs&WcmlI_V z;8q)^{t|Bqf81(c&!BC)8LJgHnF`1v50GAu{vowIIfbUD#&juzAm5d#^hjTFuQKeW!WqHa={vFpC zs|4KJk7LSuYsndfceyni#z*uMI3!Y+@Jmuob%WEx@)1%Q(Jw4~LlNJ${`=XDn{RvF zV87WFQ#pnv=!Ivm3_D(Hm+(aXVr1K{6(snm_@QhWM3DiH$n@NOY1C`6F9qSIea=3U z_6@gsDLxE-i(57!w(m~ESl&7i?ksPaFx&}33hnE}>WfERWFZLv83IWD8YVV(bZ6V2 zEU_kjJ(csH%sm*dI98cN&R9ft+0oBpV*&~cYMTGrIrJW-{%w@rF3 zDYu)K4hLO}E{s9*YDBT7Uf~H?Hl_r0rt`pOWD- z`zCJ;tfthd+%5G=zF%Hfr%F0yE25nrx3j0M+vD9rXPFa;dn$+Sg{ZKL(XJ|MBs;ww z*#zhD-Hn;PcT5apH~UzB`_PC7`pgj#TIr;Ny8Wxe1zg#(Lvwq}y+aiqt}gdVqV%$K z6nnorx;B5=x(|k8HYe+k_Ub~8@bm?3rdHWQ`sKM36|U>5PR7|EKWzQ^0Xf?+7oEB7 z-;i5gUEmO4GweI)r}h31Ki`t;hj0(78Z9c;)MpNBbY zw7;=VR21~HsS$?_p$%&UKJ=C;L!Nb;z^0xE5X)wbt+A>H-1aP4T9^nEZSgBN)_lai zS3CAN>wiK&8w!~l_t6Z;d6-z4GlpQ=&6{X#p;KuopBANb7#yeCJcl?ai zVsoR>#^I{J_|(9S!U)PTzS-q5*>nNCfh+Iqt@5x$^~zLSbu^8pYaI(jxfN}PHicu) znF{YV%k(Kp5EC**k5HsFkl$YJ;niTC-S`#xwd|5_cK9(`uWrtvX3Uv_f}-*In~^&1 zNaopi@96AIfWHLWrCZbx+61rOb6*MSpYc?&*txywSicnXRnfbRy#4o+2mh+A-fou+ZF z?=IkPHtf=`xr)2QwibB8?ArutC8IeKx6sIGV#i=Dwq9`daxwA%weHV#huVxc0wkhGp#UU)ro=qOl?~`q z10^hb1kM<^6RZX&=R7$*kT{3==13MB%4laRNkv5__03JR0oO$80we{`#=p^e%vC{dq%u!ka%)V<^YsjXv;)7`eqnk9=gsMf`t1WH)t`21IV%mKXOQ zjpZ>;80tLWlq^!dd2#|Kh%rc&SjK^!=QJbu1Ean#04sD9=+*(-Q5PTURs=09>xQg2 zw;~Lo3$?Lx#%pawX(y0ocPbW^Cx(H52M+D_B(%8!d&vQe%OggVq?gq^o8o*sNXPmm z4Y$Xe>|fL$#)AZ5ay=`5)w(5Plz_et-Or|}2&HJO0$QY~0T&6-Wm-v}jwe?gVDm*Y z8F|DFNYUh`NngLO_clxQyirx{+M;+&0%uw5r#4&eKSCHl$kCuF4fsR7Au>!}lfgtL zjfdZm%MQQKjq0Bs_2coy{bSHD7RaHzcB>O$8Gd%%rQ02+a7wFcwGGk0R?3RmcdWk- z60gMkO;b^0lDH{w+E{6SoK1@=MQ$6NbBt%GtFvWC z))n0D*^Ky;OXM$?y>5Z$Ya6idIC8EY1a=|+tWG zK#ns~FLJrGtch~Nds6B@(>F2&0BuYCKhBf}Uq90y8atnw$e#}4=)NHu8aQcY!zyea zBam9mo)xRJ;<&gLbD&r|TzcM!E)9^QBz9Yphnc(_WmSgvd0D)V{L~PQ#R#JO_OtKz zAa3rv9u~U&QYcsDlKTVdDGCQ_Q@T7+|36k0@Ix6i>aXHj)wB(y(qPiJ_Ci~(oj3OF zSz3;+cJE5dX|CblxZCMOdVp+lCLIqQ1lWN7K-2&zW`Z8x^Rlk;2_^vsI&BGJDmJ~| zs(WsyBdU}x_{+Fx^NKY%G;%;Dkz+@#kU;Z76?bV@Awa~4i|1T8ubNS1HbCqSt?|8N zbX{A$U9NA~F(&id<8A#=g}i#{(8S03t*(gSwRu7xa?BGr?k;H#IPUEF1XJb+DzjqC z``8Y^F$*N*g;aie0S_=j>0q0jddfVcyzo9#TX%>viNMQH7k1fL!T8uW4Euz62gEuE znD=noP8g++0KLlII7Oxk-?F@2`~ttV`*aU?m&P_{J&%S7LVs@_3X%ov6LT0iF+dbt zZsaUyXKLkuEyy4y?_EWZlwRYqrK&*p)?8mp0RDF5WSgMnBTbECu=~E13;5q{+wdOr zSS>BdDelL}s$?9RV7f^rPEI>ryjAm~uh>tH9E)L>+yY2{f^pkOS{^+ExZTCwW|bvS z6Et%8F~tPM80p!-)h0LwodcE*2JnLF)&X`y&Nhs-*!t$UT=vLugG(+CyN!gFrt7Ez zlbqCKzB|%s6<{^^c=6CY_BVi8r5Gp*3X3VvqFgZASx1So7AdE-Zs35KKRwc)5fqq{ z%wtb>_OcX49_%_}KE93Ya)@NR1A1}lA-nFu}wPw_;qnc)YJN{*x32XAi}>51B%>=}j5nIPXK&-Ft9 zSw)A%O3r*f6IL&)^wMnRphVv9%fD7sw4=@})Fz8t_k#jged~|rXr293_6wx>T zf}1ma9_J8VLpOZ4QH4s&aM>iYcwuLHtzLyT|2#4@55xoDT+=r1&FDG0wC2Z_CjjMy zjmfRWQ_1Tk2jui6Ole7)kcn{*jHGD--}}_IvD55oPWOr7dzf;R33}j3Q6*ILH&{B} z{Y)$3_4ZKF-Nl;#fNrkZ(d>FlCVY=h_S-UR{|zj$3D%sxj?H3hj5N3w?&+SxNP`$5 zN6s_@ZU9hm36q0VeQAxJqAL+B;9^eaReah9J5_8oU3^&LJ_=wTVz1M0xdP1I_D9hU zeidZMWw;ydmgu8^K#a!RyJQPxQw&XYp*G;T)X_q^!2^sW>&=~Jt_qzNRog{W-QMNf z6((@{3WPn%!}cvM<8c|jX;R3SS14=~%F*?^UCrC3lz8t>q5<|Ifl#|8YI6zV4Y>jge&z-%{1AAncC1 zRh!qu&?^?R5^Fr5lbLuNY+H89#prGlVX-g|vU7As8W4Ohz}=QeA?b(WM`gWV@NGVP zWS^DT_wb1Jo=aGKtmncHjk&X`gMBYh7C{G6z0(&B93@9LbJ*o7)#XRDMuq!LrBvAv z!RNWXFeN-NUOfTOSqr{>g&NMso}XC%GC%3|B6pWJyB26Y=N}eS5l_QfTbJ8CY@~H2 zcA54u=eo_4#MlLG29VlvUUg8Y!|ObB=elnKzgi2>^PybD+b%$B9GB<#0`_$cG@Ks+}$uZt0)g;_FrkNsywpii(SdmLlxK zQ@ImsPh}r$Oac6OV5GKXy|ISg%@@(Amsq0`_wDUpNFL%efPx2_NT22rl{{N#n`l2d^cq8 z2})rvFxBh

    4xaZXIL!g8E_a;AaVY{Egz0^?*osM8J3eqzdIM@XTs6Cu_n*HpUI~ zI<$GtXz?oy^cwuOiX8%m; z8f(gbA7@d)2~^b@o|aKqG!DUO+2s@`cK2z$pgU4F?dpr1ysGc<&{H0n3H}KUxluLb zGd#2z9bZEJrXe{&vsK)IK=MkyPxwBLs>!a1HpYzF`-g_~w@g6JU0x&TARNv^Obl-Y zU2DdN_9MyNpUMu0^ec|%+20+W6&H!1YCCz=w5e)WS*KW`IX&}?ipB8oW)pyefqXc{B)Tk8B($D z*)A*aS4VQPTBCKL6ThWhcerW+W~3!o6&JoU7ra=3hWK>4v&su_{fWgcQ|K-vD%G|4|u^0yiPo)AZ57yO2g6NkDGk>9C0A(Skkb5AOd+m z8;Wu>0>8GT2`k8Ck8}tx5)~C1Xk;!h8|vguloMdim_FfvF`3(^(9bpt+uB#MyjQC1 z!2I|7A+zAmkOu06;XrxtPvGUUIrQ+Cfzq^d4}e%4fXOuNH(s=pW!p!Z_i=BkCmxic zM$39X+A1VddGo?z*)QVn4|@bA?O~=@fL}GZ67~Go0-cgz@q_LjY2J8fZl$VCSEWb` z0#g6j|Gp3XRp?6L6VTPsjO|8_TPc0+a}T)p)`Z>V{u5)q`?Ox&`0z$9T9($Ky78s5^AWoCVyjE(hu? zl$9hF32~ky^M@krEOrV~?25)~--ZnZlxF4r7(n7L$ix&$g-`NK z)T)r@Au`z^^CB1^UJJNHgPfw5G+T!XOL=8%&G#=m`>~@su^LC1I`!U4j)wiAfj|bw z`Mtgo2-G$1ru|!;7m#Bk3*nZ4iswqQmOZ;InazWjEpf5?YQ68b=s6y z23Acz60NW(4qz$P#Z~wGq5Pqw}(l);Vv=B_q2idFAee^4PBKR-}JD|woUV# z=6MkDgNv+9ro@8y{2=I!%G9f$*?H80Z5_NK++^FPmET#t{pI28j3v3L$TKZgA|{RjUOO>XSm@W&Rj@#sDryfKPBS_xK2a2WtRe&7+cWH3 zLED^9VKLD3t~TmXn<4uZ*5(MI40P_6h0(xTTGZ?Ct4+CML9EUW(Ux>liEt=kZ zD9Ef|NxqkCx%1(n*r!it{O$J(ZKjfB3g)8zvm2$^hIM=fN~Cz>wov;YM9C?zIl-$Q%eB&t7avs;$GlJuy$Z)qEx;K?Zx=7E}n_fLu|uI zYh!E8(EA@GHRNX9hvy<4Np8`i9M%TjDh2qfT{Wv&t^lCZNTuLaR1yC){5J4Q&F{ zo8nm89_m_TO>==<;LxLRd(Gc<_E9SUjN0O^O0@SeSXC1M_|5yGJ7KW8rt>BL*L+NB z``af9elfoC+Puo1VyOz zITiEpuJBAn&6Q=Y$W9pJIK@;or3M#n^j_L0)I|r^xo|tsDW_5I*&~H8l&G%%_KyP3 zkp-#))~nH1#wamSR5D_5dbYskmlDC;RC|0yao|Zr7S)r?(GG0y8wthFMYt5ksW#Tv zpf2Sp+2Q#k5u_ZQ^TS)OKaRD3MG6h?f1jd!_QR}?QgY^Hb&%UJ3MaF2K`8c){bqyj zA*!-p99kmTgVYv1Cq-zpO5=xp>l-wxkQO{1a~nF^|F!-Qdd7J^D3c@CO0Gm;FruE*`uLrTS8ul^X=a)ms}zl@2?C>NR?Prh$>FK)@NzJG@ z+Ir#Q3$D!9?V6#;J6>b7^2^WH$mY?}v~x85FD{p_`J9_0rXDeIY%L#>mB?Ut%C_O` z2Tl+92E4&tCql*#2!A8F$7I7a&X0K4yh0eyMJpf5-iA?|8CaxfYR>e2#<>4<#JgnB z9XXAcm9s57q(64#67|2a9Z-3nA7C5(&&}= z0jJ9DA`NkYwu~+SYm*_7;8Zt{G}q9x8TMh`YjPeJ(FHDZImKYpyyx3aJ>nhD&bN}w z4|}~`w4GS6GqG6t>c8nnr#>)$-!{b|!zpKC+%3GooJB%i~wr z0D}yx@?~RR?+1rK-aKWt!_d%`QKJ9^32Li$N*b?K<4av_=#MHtiMU*rGr9e!!ej7+ zKV44niZA9Gb~Q)qhvdLV!@OFLz!lpKg5y11nSK=>uDcPfp&zEOc-~1svV0VX-|0w+qGn zfg-$OX%(OB^;Sr4zxhLW&Sg`W!rdXTcr1{^w=CtO0k;>_)@e2t)WKXEB%* zqhq?k#3DCDVcs;&DRD4cHne=K{z)EA*5z~wh3w{Xn8`g|-8Vu*tW1QAz|gJ-b8q>1 zm;I4w{4AL|kDzbnZ9J8Hy>?7<6lBQjuPXRjyWP_)%j8{hcLzJ<-mZ)@M-B8l=nHMIb0>CC>o|9x`I0L}NVLlic;DGi@5v1lcH{m4z3^#v zg;C&{t;j=Dj<)^-6DJTYRzYiRvBCU#D+fKaf|rp_d`y?H3y_gk)-(Wi#(uW95BS-F zEkqO!l;(cIwd7}lIiIaVFQ^%Hi7_(6=_A+GEKDp+=z08rP`9CpE#uD`t@N1vQhC|_ z3_rVdu|ZUFW6jGbKdxE%r)h6|I4D?(Dl#NH-O@7u>hY#|Rm1@{)*|Kz4RO;?ofybRsQl_2jvexp$f`a~= zTDpNP1^He!t}=DA0QqCcH$9Qyk!2V~hCHIWBrCVRiN?m32eLc8hSmPcaRgi{rESi% zh2Q@T`rKm6o<3XsLOYP}lSV^u8x2 z45@w}eU!X&ikhw_>pb1PpKW}%!`6RK^1Sw7x1UC54&sU(vIm{+ahLI=%@I+b?eNk{ zZEz23t;p=;aKc)}kmbH=d!R0i1~uHJ8f|2XX9k|mhMI}!&x)Hsz0GgK$@jD>tEUw| zw3F;CzCk4R3tto5NQqdv#7173iAV;7)FgQLo$rBUqX5n|sB(4yv=VE%0F~r75VJ>^ zw|@<7|3B?r`8(9>-|y7<9+kBu9m>>kN?B8u$}*>fQdzQ(EmXD{M3x$6PA7~=DoL_T zQMSP(#u8?VhD0VA)L16#7|aX?W6bv4e4p!j{)Xqe&aX4`x#xawpL=<~-miBAB-|Me z`$$0(!#Pk#nrF*XPTizUOS4O16<$ys^oeBJbmvmP6(ySJ>cCkLQoM#O(I9c6Q^CZ) z_pAN#I@$!7(23)Oa`SE;HGM+iry?{Rxy#tNFM{%dmohPVt3$%RA!cMagyyv9JEfN~ zak&xWfqVrFS&d>XUIbfw2L_ufO6oS|dcCn>TslI=8D;ss;RRjkdqdNMTUxHpI?TzD z^x`_h7&*=Xn-j_5KIJTaOLLQwsEE?EbT$t1wN>GFngUyZgUKnd?e2f#ersUGfKwz$ zu$X(mPa=pu6^P}e=~D4WiA{*Z?aDD82AR2D(AZp_j=uxU3EQJSBwrr=heyaov7d)- zgGYL(HlN<}?u1&uTw43?HXgH}5K1e)P;36BgvyrL7N*{Dt?zx@K~R^mO*I@nmYrbu z1G=$0E&zcX zF{*tL*+br6AXmHNtnEE_bK^` zFt?H5zVkrt)$nZyrzU6iWBcFE&Gt|J7^_&3LIx~R9ljD1@ZZ#S0o6unwkQnKRv#@Rs4cAryY8SgK&;A(s}2vfeps!UwFMjEu^)J zG|VSOmGG^+G1d8|%xGGih3%BdCDuQ^@>1B}x^HlEptzoMKS-=dV*BAXCm#ySn6{Vg z%qL5Wtoz6^05%IQ1C(;U*6djzm;~!Eo`jR01x z05)KL2_V}V{8C#Cp$qrkD`GFXE}s!k5(XoTFao&#nDJt~`cN^qAfhVmE_GI(r*bpp zBtbDG>=lXPG3=zGWmOOH*wgPkr98}tvvSS8zEW{%JSKlaYSH=bhbq2r>`Z&>uUIK2 z%xz#tj*khW@xEv9Kw2fe_Jg76ORp%zk@Aiv>r;H+puX36DlDE~RU=)v+q^2EuU0ul zt#CRzMe!avy!zx2?@v>DLzJ#(i=Y~upQAtGm-_$&om6GHbsqb!eC^kAiNfLQj#b-s zptt7g4GH4kt$O2D5lqi2OJ7P*uk92R;n63}xAHJCKA}GpaQj{`!L8dV81aonNU{3X zw0Ts7O=H|w7Oq}a&5v7ULldV@*F$nt{Hi2HJEQx9&4{CA6ABzVr76mF%|m(PZ^vH5 z1?cai_&#yE)~`E=F+LY4{zK!^b+w7eg$k!j@2Wjy!alhp9Y5c5HB(I?2ZOwa zT6EKafU)CaHR^G(FgPx!wb@6OZo+?ADfzyDAaJv%Bh!+xjr10li`&HJ>_&Nj5zRl zmtJ`y68bPIIwo%`uT@&Lz(!{wfy-!ppZ<5294n`_Nye*u! z$&==HG-;}%(xZ3EIhZx)JhorZ%!En7=Kbw@DtPk{bj7=wA3qz%_cbEvyNuz;51iCe z%{Uz$;sBVi@fV1-*!D3^c1u2Ik1@KWK!w}!9h;KODKPKp3f=wuwGU4L zwD%4c+i!|Y0G>}=Eo%o?;c#!!(#WCwT4w;c6=g5-S~Uj8D-(5 zV0UWMKn)UXzg{$6yVWUj(-Uh`_+1y-(E=!%hK#k9vk$Fofvv<<*I6X zIX-D1-MM81>Y1Ff_Iw|vpi{aI7n$0UKTy<1$cces14FWs`xh~8jPsoZ!(pGYcR5_K zX(n%_Wx#bjk57u^>-7<{y!Zzn5 zKU*b`A_ccCikiX^4&|#@y}r5o+qI!^4*oDk1Dg+>l}`T%=Yc!cjH;u$yr!twNLxE7 zC;b5o!ft;gfNtA7cs)U&K3{QF(>Lt(FZIvBI`4j58SRvyZ`l;@PW z76aBD&aC68x~Z)Fk6Bfxn8_!A-6rZ){15*u)rdnx`kagvLaZ<=|3Y?D_9Vfl${qLV z#jQl=DYO%lsRaa+l!e!=IbUXOi!3&vKKBbMGsrnwturKmJ4m|`Wn=OS*TzeBsHB{9 zhM%$2uTHsCasp&S-+e2}L)BkXmg6BSYT@RxE7+sPr@luf2)f%NqgIZO_O>Y_W#}cr zqu$PCDLU89C$l`ZCkXDAh>jJ&(!+GqGVZ*Y_z7$yVbG+eFz=XGRx)nFln&`+hRamO zGiz^HUforEwdjop+&aT6^i%fgPlBuVSD4ZTwnW!8Eevxz%d6idF1csBz@fId4D6er zPs*s?lX~YzkO=128pEQ%m zDqrJ>wb7^iala>8JYNEJ=ggmQWZF1yt+ja_0`6yv(&ERknGimiOzJA>0AE&+{-fx@_WwPuKL9JV}ar$!jKV zPQg8Y3eS}dTi2ET5bUa~VlB<;j@n9?jab^mvatQ^DL4-SB_2PL#P4<+ml}@lr>ZU8 zDpaOFs?+Gc2 zdj6Pz6UBQ&6%8NzRUs3R5MO6F&9)^tDCQZ;GX!l^uQ>#jaE;Bpa6XvuY|*Is9Al6_ zh-UX}<-s06e~YrJ>Rd*)h;Agb$LXS+zLvOm^&WOi=E>HXt*PawKkE&gK`LDOHa#tW zT?zUdW;{^$uK9OjI5-8XhR3R@_Vbxr5cQjB*V4)h@1Apn5c!SKYTNCamfK!mbN0RY4}(aF*z8s%6(*5|xjKob9C} z9-KqhQ}UkC@-;mhzlmp7bN&&QJO}k0+f3@(+D*i75DCcAeRtE$9hGu&d{_+JG07K$ z7Sa1)V@63y8to!|`|-0C6Tg+YI15E>oUVmJFYzbuc>9GIrAsp;I48Z!bN6`X;TDGm z=+K4le~ZFr8zYoton|1;tkl=~C=4aQzNclmXuIO6V5cSdeTP(nrnohJ9|rVNKn)@} z_|7eIgrw4dPjd7zuPe=i*bY`ozJ%;~x>Bngtd)C#5h}}jVsu(*72rdspIz>OF`@B` z_C2STnjF5vmvqZyb$oKlC4HpUG9)N%t=(08Vj@!YtK4(fp!z$6zJ4J&R}+Rq%gta> zkMP%KASo52euT}e3l;9M<99v_y_^_4^vQ-{(o2 z58^Q=*C_mBsp_G&IVZoYu)11-vYb1ce5cWULg9xJlD3fyJusxlvCq3Jo0r=Er?SXo zPQl5cHaUx57m7#h!NtA!EcC^ZzSpF{;JqKb4WNj*CVmi3HNakE7?%f9c?kma%1z4{ zBPGKp1^W_;UlEQO7WxIkjq(1{<3VCrz@D*?j**zP(SsJ5`L>a}Q1gz=d+Hf)e!&T< zJIseQh*&yw@)R$yRia6mWf z+qspu4X^uP|JZF4S*8_p?P;E>w^Q@CLt_BY0Is90@+-?wZ!m5bj%w7-3-eDz{&3OB zL*SvejZpTr4mBz(w*wIM1Nvh~e@MwO^!FJ(ql(Z-pW#ol34+3)v(f16m(f2CY4Zz9 z>W1@9rqUr$P4r(=H=R9OJ+v(;iw+{2%O*P>kmXUDAxH?FQPzbw4wKfk4007D9eBg| z6JbHbLPI^b*y%@kFvB7U1eQ-rZ8-ijRrihMlEb6{>X?ysYFO0_tiwqqb$Bnk4~MBL zv^s8Vz9@S^Qc5ighZwx}lINM3>F;?GgZ$YFAZu}U2cyL$gYh@#v?-j>!sFFJ95V^))s-hS5zHeAa% zEm_sbGegPMTfXuz)Euyp#M%q?lF7@(j zul4M8l|69Mh@Yr6H1T@)!Myzdq?I&~a=U=PP^w$>bS|okck?fQ2R&0Dc}{+lxAxg< z=F}rMMv$y5vJB2f^03?spPiazXDNU=8sEgLc+ycEF3n|n?zPdgpg{p9ETrG?=a6 zukKFIa)g9m;T_m(TUeKm&ksJY1@G;?UiLJIGf`mEzfk|uH}DQO@3kgjTU77`7$&a9 zRw}FCdiG)ZKa#jLOn%{u`rWQm4jH-)q{Amb4f19 zmY-#uqtkPpyR)dov$zO;@)r0{?4If}kNLtLFInNhdyGKZ^99*kZZBK^S4sSFu%H@T zZj2Vj4Izfw##65o2XQtry24OFS;&eeS6xR~k?UDIT)x?JWKhp|oIu}sV2HAVjhSi{ ziJH+qn*(FX@$@plgcN!GTWA&m&kmMn4}eoxSY*U z+ZREmmQL^Oy1u#6`v$6U<;;#z)Pr!S0l54U{dmt`4Trj%*(fgaPeWQxQ6gXh0|Q8S z*u+?TtmHl(?0L`~MK^fVB+l5TnAfXIrS-GrQX3=G6thPi_!{p49WrI+TOZK9OmcvN}iEHlcLV|pUyYu2N{Uba6M0!@ojG&oWo^e0o9z70+ zGSJo;;b;PJZ8nvHk|?wG%NC9@**bMsb8~iPJ@*N{b1H3#>Gu&^SGPWN*75|>@JXB5 zn%U$-dU>C(BYcYXm{YUP<(K9)575fo!CwYCtmkhzyrt**Z{zpt`m?_0OQOaj*O(`wf+xGm* znR=}HP1I0)Ix%>yX@^g?^1%z@AjW6^0B2i3c%T9h<33YUT9 zXlJ@Ygee*No>o1sB_)lqvmMnhEfUw+*h#hmv4A6*R@N9vE?CSdM%Ngt_A~81-4ci> zgNEndwukRBpgc0n#E7{}h!fT1hJDFzpa#WW)zwxo4VX2kHndbe(cp)HMpApLq)y8=q~2 zj`67&BE+C&Wc{FEv7#eCvifl2Q2<8-jAO-d=zbiPzs+<@&vxaUH({ek)(QCY*Tq1W zDMHXcbhk_jA~lexUH~B84}b&*hB$vURG%v_c{)qsp#=gcjZ$t}701Is$Fl%e;-=sY z<;I)FuaNm_FS&q_)`yigLc7)NEh z0Fc?hjcN0i>PV9DxVoQOR_N$Uq!AvV8N)8$lElUD-n8ijW<$@Um=P2I8PWRbWN>I- zUTg01qpY%K$(Z#gFwELUcm>?}>2Y(Nr>G;F80cY(CFMsC2S zaJ!M%!5r||i}VfIy&1#=baud5F^ePl+HiJ(E!eI59UzC{0M~Y4$fw0!Zj&1#>(>ocuCiV8qz&>AtOKtDBAz zFZ7wWKmcdu)(wSN9?{2gbn`rkyh5MDljtR;vg#SGD>{B*MS#`n#V%it*TtK!Dy4q} zvpkWvF-xhD+lzCXneOWV7C`MI71k`c=q>?x(Mdj*_-$Z*A+??5k5g>J zl9z!2kQ;8pY0L5fR;Bu$KPYu;>4KcOrTNT0#^l0#m;KMC9Iu2;cv=dz0IG zt0xi{FImHTHi3=crlg{C_$!iqJ)jcAD|hc7$R4)MQevl>F&>5 R1o }v@~m1nN}^FQdhHnso& literal 0 HcmV?d00001 diff --git a/src/components/pages/landing/partnersCompanies/partnersCompanies.module.css b/src/components/pages/landing/partnersCompanies/partnersCompanies.module.css index 9a2e3dc..0e67773 100644 --- a/src/components/pages/landing/partnersCompanies/partnersCompanies.module.css +++ b/src/components/pages/landing/partnersCompanies/partnersCompanies.module.css @@ -1,12 +1,51 @@ @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@700&display=swap'); .partnersSection { + position: relative; + isolation: isolate; + overflow: hidden; margin: 0; padding: 0; box-sizing: border-box; font-family: Arial, sans-serif; - background-color: white; + background: linear-gradient(to top, #ffffff 20%, #DAB88B 90%, #cfa87a); + background-size: 100% 50%; + background-position: top; + background-repeat: no-repeat; color: #333; + +} + +/* lewo */ +.partnersSection::before { + content: ""; + position: absolute; + top: 50%; + left: -7%; + width: 35rem; + height: 35rem; + background-image: url('@/assets/icons/cogwheel_light_icon.svg'); + background-repeat: no-repeat; + background-size: contain; + opacity: 0.9; + pointer-events: none; + z-index: 0; +} + +/* prawo */ +.partnersSection::after { + content: ""; + position: absolute; + bottom: 50%; + right: 5%; + width: 19.875rem; + height: 19.875rem; + background-image: url('@/assets/icons/cogwheel_light_icon.svg'); + background-repeat: no-repeat; + background-size: contain; + opacity: 0.9; + pointer-events: none; + z-index: 0; } .container { @@ -16,15 +55,19 @@ } .title { - font-size: 3rem; - margin-top: 1.25rem; - margin-bottom: 1.25rem; - font-weight: bold; + display: flex; + justify-content: center; + font-size: 6rem; + margin-top: 2.75rem; + margin-bottom: 2.75rem; + padding-top: 2.75rem; + font-weight: 700; text-align: left; - font-family: 'Roboto', sans-serif; - color: #333; - text-transform: uppercase; + font-family: League Spartan, 'Roboto', sans-serif; + color: #2C2C2C; letter-spacing: 0.625rem; + margin-left: 3.75rem; + } .partnersGrid { @@ -33,32 +76,40 @@ gap: 1.25rem; justify-items: center; list-style-type: none; + } .partner { text-align: center; margin-top: 1.25rem; - margin-bottom: 1.25rem; + margin-bottom: 2rem; + z-index: 1; + } .partner img { - max-width: 9.375rem; - height: auto; + width: 31.38rem; + height: 19.25rem; + border: 0.125rem solid #000; transition: transform 0.3s ease-in-out; + object-fit: cover; + z-index: 1; } .partner img:hover { - transform: scale(1.1); + transform: scale(1.05); } .partnerName { margin-top: 0.625rem; font-size: 1rem; font-weight: 600; + z-index: 1; } .partnerStatus { margin-top: 0.375rem; font-size: 0.75rem; color: #1271FF; + z-index: 1; } \ No newline at end of file diff --git a/src/components/pages/landing/partnersCompanies/partnersCompanies.tsx b/src/components/pages/landing/partnersCompanies/partnersCompanies.tsx index 0405a2a..87b53f9 100644 --- a/src/components/pages/landing/partnersCompanies/partnersCompanies.tsx +++ b/src/components/pages/landing/partnersCompanies/partnersCompanies.tsx @@ -2,22 +2,23 @@ import React from 'react'; import { Company } from "@/@types/API"; import styles from './partnersCompanies.module.css'; import naTeraz from '@/assets/img/temp.png'; +import naTeraz2 from '@/assets/img/PSRP_logo.png'; import { PartnersPageProps } from './partnersCompanies.type'; import { t } from '@/i18n/i18n'; const PartnersCompanies: React.FC = ({ companies, title }) => { return (

    -

    {title}:

    +

    {title}

      {companies.map((company) => (
    • - {company.name} + {company.name} -

      {company.name}

      -

      {t("Honorary Status")}

      {/* tymczosowo poki nie ma w bazie tego statusu hardcodem jest */} + {/*

      {company.name}

      */} + {/*

      {t("Honorary Status")}

      {/* tymczosowo poki nie ma w bazie tego statusu hardcodem jest */}
    • ))} diff --git a/src/mocks/companies.ts b/src/mocks/companies.ts index 3069b99..3a62418 100644 --- a/src/mocks/companies.ts +++ b/src/mocks/companies.ts @@ -44,5 +44,54 @@ export const MOCK_COMPANIES: Company[] = [ "displayPriority": 4, - } + }, + + + { + "id": "c5", + "name": "5", + "logoUrl": "https://example.com/logo5.png", + "websiteUrl": "https://google.com", + "shortDescription": "Idaasd.", + "longDescription": "Hasdg innasd.", + "displayPriority": 5, + + + }, + + { + "id": "c6", + "name": "6", + "logoUrl": "https://example.com/logo5.png", + "websiteUrl": "https://google.com", + "shortDescription": "Idaasd.", + "longDescription": "Hasdg innasd.", + "displayPriority": 6, + + + }, + { + "id": "c7", + "name": "7", + "logoUrl": "https://example.com/logo5.png", + "websiteUrl": "https://google.com", + "shortDescription": "Idaasd.", + "longDescription": "Hasdg innasd.", + "displayPriority": 7, + + + }, + + { + "id": "c8", + "name": "8", + "logoUrl": "https://example.com/logo5.png", + "websiteUrl": "https://google.com", + "shortDescription": "Idaasd.", + "longDescription": "Hasdg innasd.", + "displayPriority": 8, + + + }, + ]; \ No newline at end of file diff --git a/src/pages/companiesPage.tsx b/src/pages/companiesPage.tsx index cda4645..9347c60 100644 --- a/src/pages/companiesPage.tsx +++ b/src/pages/companiesPage.tsx @@ -5,7 +5,7 @@ import PartnersCompanies from '@/components/pages/landing/partnersCompanies/part const companiesPage = () => { return ( - + ) } diff --git a/src/pages/partnersPage.tsx b/src/pages/partnersPage.tsx index 4033786..4fd49cd 100644 --- a/src/pages/partnersPage.tsx +++ b/src/pages/partnersPage.tsx @@ -4,7 +4,7 @@ import PartnersCompanies from '@/components/pages/landing/partnersCompanies/part const partnersPage = () => { return ( - + ) } From 72e70d8a86edb59eed20dcadc5a8f29941e929fa Mon Sep 17 00:00:00 2001 From: pawel Date: Wed, 26 Feb 2025 20:09:07 +0100 Subject: [PATCH 3/4] Refactor i18n structure, enhancing translation keys --- src/components/navbar/navbar.tsx | 24 ++--- .../partnersCompanies/partnersCompanies.tsx | 9 +- .../workshops/WorkshopsList/WorkshopsList.tsx | 18 ++-- .../templates/sections/caseweekOverview.tsx | 14 +-- src/i18n/homepage/en.json | 15 +-- src/i18n/homepage/pl.json | 15 +-- src/i18n/i18n.ts | 98 ++++++++++--------- src/i18n/navbar/en.json | 30 +++--- src/i18n/navbar/pl.json | 34 ++++--- src/i18n/partners/en.json | 4 +- src/i18n/partners/pl.json | 4 +- src/i18n/workshopsList/en.json | 17 ++-- src/i18n/workshopsList/pl.json | 17 ++-- 13 files changed, 158 insertions(+), 141 deletions(-) diff --git a/src/components/navbar/navbar.tsx b/src/components/navbar/navbar.tsx index f4d1bcc..24836fe 100644 --- a/src/components/navbar/navbar.tsx +++ b/src/components/navbar/navbar.tsx @@ -43,22 +43,22 @@ export default function Navbar() { - {t("O Projekcie")} + {t("menuOptions.aboutProject")} - {t("O IAESTE")} + {t("menuOptions.aboutIaeste")} - {t("Warsztaty")} + {t("menuOptions.workshops")} - {t("Partnerzy")} + {t("menuOptions.partners")} - {t("Firmy")} + {t("menuOptions.companies")} - {t("Kontakt")} + {t("menuOptions.contact")} @@ -66,7 +66,7 @@ export default function Navbar() { {(state) => ( <> - + handleClick(e) : () => navigate("/login")} sx={{ @@ -87,7 +87,7 @@ export default function Navbar() { padding: "8px 16px", }} > - {state.status === "authenticated" ? `${state.currentUser.firstName} ${state.currentUser.lastName}` : t("Zaloguj się")} + {state.status === "authenticated" ? `${state.currentUser.firstName} ${state.currentUser.lastName}` : t("accountOptions.logIn")} User icon @@ -138,28 +138,28 @@ export default function Navbar() { }} > navigate("/user")}> - User icon {t("Moje konto")} + User icon {t("accountOptions.myAccount")} navigate("/user/warsztaty")}> - {t("Moje warsztaty")} + {t("accountOptions.myWorkshops")} {isAdmin(state) ? ( navigate("/admin")}> - {t("Panel administracyjny")} + {t("accountOptions.adminPanel")} ) : null} navigate("/logout")}> - {t("Wyloguj się")} + {t("accountOptions.logOut")} diff --git a/src/components/pages/landing/partnersCompanies/partnersCompanies.tsx b/src/components/pages/landing/partnersCompanies/partnersCompanies.tsx index 87b53f9..33a4682 100644 --- a/src/components/pages/landing/partnersCompanies/partnersCompanies.tsx +++ b/src/components/pages/landing/partnersCompanies/partnersCompanies.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Company } from "@/@types/API"; import styles from './partnersCompanies.module.css'; import naTeraz from '@/assets/img/temp.png'; -import naTeraz2 from '@/assets/img/PSRP_logo.png'; +import temporaryCompaniesLogo from '@/assets/img/PSRP_logo.png'; import { PartnersPageProps } from './partnersCompanies.type'; import { t } from '@/i18n/i18n'; @@ -15,10 +15,9 @@ const PartnersCompanies: React.FC = ({ companies, title }) =>
    • - {company.name} - - {/*

      {company.name}

      */} - {/*

      {t("Honorary Status")}

      {/* tymczosowo poki nie ma w bazie tego statusu hardcodem jest */} + {company.name} + + {/*

      {t("partners.honoraryStatus")}

      */}
    • ))} diff --git a/src/components/pages/landing/workshops/WorkshopsList/WorkshopsList.tsx b/src/components/pages/landing/workshops/WorkshopsList/WorkshopsList.tsx index 3553f39..b6e0b01 100644 --- a/src/components/pages/landing/workshops/WorkshopsList/WorkshopsList.tsx +++ b/src/components/pages/landing/workshops/WorkshopsList/WorkshopsList.tsx @@ -34,11 +34,11 @@ const WorkshopsList = () => { return (
      -

      {t("workshops_title")}

      +

      {t("workshopsList.title")}

    • - + { onChange={(e) => setSelectedField(e.target.value)} className={s.filterSelect} > - + {/* "all_label" */} {fields.map((field) => (
    • @@ -114,4 +114,4 @@ const WorkshopsList = () => { ); }; -export default WorkshopsList; +export default WorkshopsList; \ No newline at end of file diff --git a/src/components/templates/sections/caseweekOverview.tsx b/src/components/templates/sections/caseweekOverview.tsx index e0ff1b6..71f0991 100644 --- a/src/components/templates/sections/caseweekOverview.tsx +++ b/src/components/templates/sections/caseweekOverview.tsx @@ -40,7 +40,7 @@ export function CaseWeekOverview() { IAESTE CASEWEEK logotype

      - {t("test1")} + {t("homepage.introText1")} {/* "test1" */}

      @@ -54,7 +54,7 @@ export function CaseWeekOverview() { }} > - {t("workshops")} + {t("homepage.workshopsCounterLabel")} @@ -62,21 +62,21 @@ export function CaseWeekOverview() { - {t("universities")} + {t("homepage.universitiesCounterLabel")}

      - {t("test2")} + {t("homepage.introText2")}

      - {t("companies")} + {t("homepage.companiesCounterLabel")} - {t("cities")} + {t("homepage.citiesCounterLabel")} @@ -88,4 +88,4 @@ export function CaseWeekOverview() { /> ); -} +} \ No newline at end of file diff --git a/src/i18n/homepage/en.json b/src/i18n/homepage/en.json index 9e3491c..05a8ae9 100644 --- a/src/i18n/homepage/en.json +++ b/src/i18n/homepage/en.json @@ -1,9 +1,10 @@ { - "test1": "The largest cycle of engineering workshops in Poland. The goal of the project is to bring the academic and business environment closer together. The practical case-study form allows students to get acquainted with real-world problems encountered in everyday work and to improve both their professional and soft skills.", - "test2": "The project enables students and employers to work together on prepared topics. During a series of workshops, leading Polish and global brands conduct sessions at top technical universities in the country. Students have the opportunity to face real problems that occur daily in professional work. Employers can discover talents and establish cooperation with potential candidates. Thanks to IAESTE CaseWeek, thousands of Polish students have gained their dream jobs.", - "workshops": "Workshops", - "universities": "Universities", - "companies": "Companies", - "cities": "Cities" + "homepage": { + "introText1": "The largest cycle of engineering workshops in Poland. The goal of the project is to bring the academic and business environment closer together. The practical case-study form allows students to get acquainted with real-world problems encountered in everyday work and to improve both their professional and soft skills.", + "introText2": "The project enables students and employers to work together on prepared topics. During a series of workshops, leading Polish and global brands conduct sessions at top technical universities in the country. Students have the opportunity to face real problems that occur daily in professional work. Employers can discover talents and establish cooperation with potential candidates. Thanks to IAESTE CaseWeek, thousands of Polish students have gained their dream jobs.", + "workshopsCounterLabel": "Workshops", + "universitiesCounterLabel": "Universities", + "companiesCounterLabel": "Companies", + "citiesCounterLabel": "Cities" } - \ No newline at end of file +} \ No newline at end of file diff --git a/src/i18n/homepage/pl.json b/src/i18n/homepage/pl.json index 721dd49..e90a4a8 100644 --- a/src/i18n/homepage/pl.json +++ b/src/i18n/homepage/pl.json @@ -1,9 +1,10 @@ { - "test1": "Największy cykl warsztatów inżynierskich w Polsce. Założeniem projektu jest zbliżenie do siebie środowiska akademickiego i biznesowego. Praktyczna forma case study umożliwia studentom zapoznanie się z realnymi problemami występującymi w codziennej pracy oraz doskonalenie swoich umiejętności zarówno zawodowych jak i miękkich.", - "tekst2": "Projekt umożliwia studentom i pracodawcom wspólną pracę nad przygotowanymi zagadnieniami. Podczas cyklu warsztatów wiodące marki z rynku polskiego i światowego przeprowadzają warsztaty na najlepszych uczelniach technicznych w kraju. Studenci stają przed możliwością zmierzenia się z realnymi problemami spotykanymi na co dzień w pracy zawodowej. Pracodawcy mają okazję wyłonić talenty i nawiązać współpracę z potencjalnymi kandydatami. Dzięki udziale w projekcie IAESTE CaseWeek tysiące polskich studentów zdobyło wymarzoną pracę.", - "workshops": "Warsztatów", - "universities": "Uczelni", - "companies": "Firm", - "cities": "Miast" + "homepage": { + "introText1": "Największy cykl warsztatów inżynierskich w Polsce. Założeniem projektu jest zbliżenie do siebie środowiska akademickiego i biznesowego. Praktyczna forma case study umożliwia studentom zapoznanie się z realnymi problemami występującymi w codziennej pracy oraz doskonalenie swoich umiejętności zarówno zawodowych jak i miękkich.", + "introText2": "Projekt umożliwia studentom i pracodawcom wspólną pracę nad przygotowanymi zagadnieniami. Podczas cyklu warsztatów wiodące marki z rynku polskiego i światowego przeprowadzają warsztaty na najlepszych uczelniach technicznych w kraju. Studenci stają przed możliwością zmierzenia się z realnymi problemami spotykanymi na co dzień w pracy zawodowej. Pracodawcy mają okazję wyłonić talenty i nawiązać współpracę z potencjalnymi kandydatami. Dzięki udziale w projekcie IAESTE CaseWeek tysiące polskich studentów zdobyło wymarzoną pracę.", + "workshopsCounterLabel": "Warsztatów", + "universitiesCounterLabel": "Uczelni", + "companiesCounterLabel": "Firm", + "citiesCounterLabel": "Miast" } - \ No newline at end of file +} \ No newline at end of file diff --git a/src/i18n/i18n.ts b/src/i18n/i18n.ts index 773ac46..282507f 100644 --- a/src/i18n/i18n.ts +++ b/src/i18n/i18n.ts @@ -1,47 +1,51 @@ - import plNavbar from './navbar/pl.json'; - import enNavbar from './navbar/en.json'; - import plPartners from './partners/pl.json'; - import enPartners from './partners/en.json'; - import plHomepage from './homepage/pl.json'; - import enHomepage from './homepage/en.json'; - import plWorkshopsList from './workshopsList/pl.json'; - import enWorkshopsList from './workshopsList/en.json'; - - - - type Translations = { - [key: string]: string; - }; - - type Locale = { - [key: string]: Translations; - }; - - - const translations: Locale = { - pl: { - - ...plNavbar, - ...plPartners, - ...plHomepage, - ...plWorkshopsList - }, - en: { - - ...enNavbar, - ...enPartners, - ...enHomepage, - ...enWorkshopsList - } - }; - - - let currentLanguage: 'pl' | 'en' = 'pl'; - - export const setLanguage = (language: 'pl' | 'en') => { - currentLanguage = language; - }; - - export const t = (key: string) => { - return translations[currentLanguage][key] || key; - }; \ No newline at end of file +import plNavbar from './navbar/pl.json'; +import enNavbar from './navbar/en.json'; +import plPartners from './partners/pl.json'; +import enPartners from './partners/en.json'; +import plHomepage from './homepage/pl.json'; +import enHomepage from './homepage/en.json'; +import plWorkshopsList from './workshopsList/pl.json'; +import enWorkshopsList from './workshopsList/en.json'; + +type Translations = { + [key: string]: any; +}; + +type Locale = { + [key: string]: Translations; +}; + +const translations: Locale = { + pl: { + ...plNavbar, + ...plPartners, + ...plHomepage, + ...plWorkshopsList + }, + en: { + ...enNavbar, + ...enPartners, + ...enHomepage, + ...enWorkshopsList + } +}; + +let currentLanguage: 'pl' | 'en' = 'pl'; + +export const setLanguage = (language: 'pl' | 'en') => { + currentLanguage = language; +}; + +export const t = (key: string) => { + const keys = key.split('.'); + let result: any = translations[currentLanguage]; + + for (const k of keys) { + result = result[k]; + if (result === undefined) { + return key; + } + } + + return result; +}; \ No newline at end of file diff --git a/src/i18n/navbar/en.json b/src/i18n/navbar/en.json index 19af55d..8f8bd95 100644 --- a/src/i18n/navbar/en.json +++ b/src/i18n/navbar/en.json @@ -1,14 +1,18 @@ { - "O Projekcie": "About the Project", - "O IAESTE": "About IAESTE", - "Warsztaty": "Workshops", - "Partnerzy": "Partners", - "Firmy": "Companies", - "Kontakt": "Contact", - "Moje konto": "My Account", - "Moje warsztaty": "My Workshops", - "Panel administracyjny": "Admin Panel", - "Wyloguj się": "Log Out", - "Zaloguj się": "Log In", - "Menu": "Menu" - } \ No newline at end of file + "menuOptions": { + "aboutProject": "About the Project", + "aboutIaeste": "About IAESTE", + "workshops": "Workshops", + "partners": "Partners", + "companies": "Companies", + "contact": "Contact" + }, + "accountOptions": { + "myAccount": "My Account", + "myWorkshops": "My Workshops", + "adminPanel": "Admin Panel", + "logOut": "Log Out", + "logIn": "Log In" + }, + "menu": "Menu" +} \ No newline at end of file diff --git a/src/i18n/navbar/pl.json b/src/i18n/navbar/pl.json index de730cc..7cfc5f2 100644 --- a/src/i18n/navbar/pl.json +++ b/src/i18n/navbar/pl.json @@ -1,16 +1,18 @@ - - { - "O Projekcie": "O Projekcie", - "O IAESTE": "O IAESTE", - "Warsztaty": "Warsztaty", - "Partnerzy": "Partnerzy", - "Firmy": "Firmy", - "Kontakt": "Kontakt", - "Moje konto": "Moje konto", - "Moje warsztaty": "Moje warsztaty", - "Panel administracyjny": "Panel administracyjny", - "Wyloguj się": "Wyloguj się", - "Zaloguj się": "Zaloguj się", - "Menu": "Menu" - - } +{ + "menuOptions": { + "aboutProject": "O Projekcie", + "aboutIaeste": "O IAESTE", + "workshops": "Warsztaty", + "partners": "Partnerzy", + "companies": "Firmy", + "contact": "Kontakt" + }, + "accountOptions": { + "myAccount": "Moje konto", + "myWorkshops": "Moje warsztaty", + "adminPanel": "Panel administracyjny", + "logOut": "Wyloguj się", + "logIn": "Zaloguj się" + }, + "menu": "Menu" +} \ No newline at end of file diff --git a/src/i18n/partners/en.json b/src/i18n/partners/en.json index 1f0074c..54177d2 100644 --- a/src/i18n/partners/en.json +++ b/src/i18n/partners/en.json @@ -1,3 +1,5 @@ { - "Honorary Status": "Honorary Status" + "partners": { + "honoraryStatus": "Honorary Status" + } } \ No newline at end of file diff --git a/src/i18n/partners/pl.json b/src/i18n/partners/pl.json index b247539..9e79530 100644 --- a/src/i18n/partners/pl.json +++ b/src/i18n/partners/pl.json @@ -1,3 +1,5 @@ { - "Honorary Status": "Status Honorowy" + "partners": { + "honoraryStatus": "Status Honorowy" + } } \ No newline at end of file diff --git a/src/i18n/workshopsList/en.json b/src/i18n/workshopsList/en.json index 3caadeb..ee86515 100644 --- a/src/i18n/workshopsList/en.json +++ b/src/i18n/workshopsList/en.json @@ -1,10 +1,11 @@ { - "workshops_title": "Workshops:", - "university_label": "University:", - "all_label": "All", - "field_label": "Field of study:", - "date_label": "Date & time:", - "duration_label": "Duration:", - "university_colon_label": "University:" + "workshopsList": { + "title": "Workshops:", + "universityLabel": "University:", + "allLabel": "All", + "fieldLabel": "Field of study:", + "dateLabel": "Date & time:", + "durationLabel": "Duration:", + "universityColonLabel": "University:" } - \ No newline at end of file +} \ No newline at end of file diff --git a/src/i18n/workshopsList/pl.json b/src/i18n/workshopsList/pl.json index 5cb9b70..825cc1a 100644 --- a/src/i18n/workshopsList/pl.json +++ b/src/i18n/workshopsList/pl.json @@ -1,10 +1,11 @@ { - "workshops_title": "Warsztaty:", - "university_label": "Uczelnia:", - "all_label": "Wszystkie", - "field_label": "Kierunek studiów:", - "date_label": "Data i godzina:", - "duration_label": "Czas trwania:", - "university_colon_label": "Uczelnia:" + "workshopsList": { + "title": "Warsztaty:", + "universityLabel": "Uczelnia:", + "allLabel": "Wszystkie", + "fieldLabel": "Kierunek studiów:", + "dateLabel": "Data i godzina:", + "durationLabel": "Czas trwania:", + "universityColonLabel": "Uczelnia:" } - \ No newline at end of file +} \ No newline at end of file From b81ba975ebf4850414f61ab00d75ea7157cbd338 Mon Sep 17 00:00:00 2001 From: pawel Date: Thu, 27 Feb 2025 20:05:22 +0100 Subject: [PATCH 4/4] Add responsive design for partners grid on mobile devices --- .../landing/partnersCompanies/partnersCompanies.module.css | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/components/pages/landing/partnersCompanies/partnersCompanies.module.css b/src/components/pages/landing/partnersCompanies/partnersCompanies.module.css index 0e67773..b805987 100644 --- a/src/components/pages/landing/partnersCompanies/partnersCompanies.module.css +++ b/src/components/pages/landing/partnersCompanies/partnersCompanies.module.css @@ -112,4 +112,11 @@ font-size: 0.75rem; color: #1271FF; z-index: 1; +} + + +@media(max-width: 768px){ + .partnersGrid { + grid-template-columns: repeat(1, 1fr); + } } \ No newline at end of file