diff --git a/public/content/contributing/translation-program/translatathon/approved.png b/public/content/contributing/translation-program/translatathon/approved.png deleted file mode 100644 index 44177d5ca80..00000000000 Binary files a/public/content/contributing/translation-program/translatathon/approved.png and /dev/null differ diff --git a/public/content/contributing/translation-program/translatathon/details/index.md b/public/content/contributing/translation-program/translatathon/details/index.md new file mode 100644 index 00000000000..e4f469d1f05 --- /dev/null +++ b/public/content/contributing/translation-program/translatathon/details/index.md @@ -0,0 +1,81 @@ +--- +title: Details and rules +lang: en +template: translatathon +--- + +![](./participate.png) + +The Translatathon is open and anyone can participate by filling out the application form and joining the project in Crowdin. + +Translators collect points by suggesting translations for untranslated strings in their language in the Crowdin editor during the translation period (August 9th - August 18th). + +Each participants final score is determined by the number of words they have translated during the translation period and any potential multipliers they’ve collected. + +### Getting started + +The translation process takes place in the ethereum.org project in Crowdin and translators suggest their translations for untranslated strings, made up of almost all of content from the ethereum.org website. + +Translations are suggested directly in the online editor so there is no need to download or upload any files or deliverables. Each translated word is tracked and counted. + +**1) Join the project** + +- To start contributing, you will need to join the [ethereum.org project in Crowdin](https://crowdin.com/project/ethereum-org) +- You will need to sign in or create an account - all that is required is an email address and password + +**2) Select your language** + +- Find your language on the list of target languages and open it by clicking on its name or flag +- If you would like to translate into a language that isn’t available, reach out to [Ethereum.org Team](https://crowdin.com/profile/ethdotorg) on crowdin or send us an email to translations@ethereum.org and we will add new additional target languages per request + +**3) Open an untranslated file** + +- Find the first untranslated file to start translating. The folders containing the source files are based on priority - 1) Homepage, 2) Essential learning, 3) Essentials, 4) Exploring, etc. so you should start translating the first folder that contains untranslated files +- Each file has a progress indicator showing how much of the translatable content in the file has been translated and approved… if translation progress for any file is below 100%, please translate it + +**4) Translate the untranslated strings** + +- When you open a file to translate, make sure you are only translating untranslated strings! +- Each string has a status indicator that shows whether it’s _Translated_, _Untranslated_, or _Approved_. If a source string already has a suggested translation in your language, there is no need to translate it +- You can also filter strings in the editor to show _Untranslated first_ or _Untranslated only_ + +For a detailed guide to navigating and using the Crowdin online editor, we recommend all Translatathon participants to read our [How to translate](/contributing/translation-program/how-to-translate/) guide. + +To learn more about the conventions and best practices for translating ethereum.org content, you can also check out our [translation style guide](/contributing/translation-program/translators-guide/). + +### Prizes + +The total prize pool for the Translatathon is 30,000$. + +A detailed breakdown of prizes will be announced at the end of the application period. + +### Evaluation process + +All translations will be subject to QA and feedback, where professional linguists will evaluate submissions based on quality and accuracy. + +We will also be running **anti-machine translation measures**, with Crowdin providing some tools that automatically detect machine translations. + +While translation quality will not play a critical role in the scoring, any **participants found using machine translation** or suggesting low-quality and inaccurate translations **will be disqualified** and not eligible to compete for prizes! + +The evaluation period will take place between August 19th-28th and the results will be announced on the ethereum.org community call on August 29th. + +All translations will also be subject to a thorough review before being added to the website. + +### FAQ - Frequently asked questions + + + + + + + You can translate into any language! It is recommended to only translate into your native language to ensure sufficient quality, but in short, all language available in Crowdin are in scope for the Translatathon. + + If you want to translate into a language that isn't available in Crowdin, reach out to us and we will add any language per request. + + + + diff --git a/public/content/contributing/translation-program/translatathon/details/participate.png b/public/content/contributing/translation-program/translatathon/details/participate.png new file mode 100644 index 00000000000..817025328dd Binary files /dev/null and b/public/content/contributing/translation-program/translatathon/details/participate.png differ diff --git a/public/content/contributing/translation-program/translatathon/index.md b/public/content/contributing/translation-program/translatathon/index.md index 7aeb64702dc..73cbfce51d0 100644 --- a/public/content/contributing/translation-program/translatathon/index.md +++ b/public/content/contributing/translation-program/translatathon/index.md @@ -1,212 +1,95 @@ --- -title: Ethereum.org Translatathon -description: Join the first ethereum.org Translatathon to contribute to ethereum.org, learn about Ethereum, and compete for prizes. +title: 2024 ethereum.org Translatathon lang: en +template: translatathon --- -# Ethereum.org Translatathon {#introduction} + + + + + -Welcome to the first ever ethereum.org Translatathon! +## Introduction -A translatathon is a collaborative and competitive hackathon-style event where individuals and teams compete for prizes by translating ethereum.org content into different languages. +The ethereum.org Translation Program is an ongoing effort to translate the website into as many languages as possible. We believe that Ethereum content and onboarding resources should be accessible to everyone, regardless of the language they speak. -The goal is to translate website content and help make ethereum.org more accessible to non-English speakers, raise awareness of the importance of localization and the [Translation program](/contributing/translation-program/), onboard new contributors and give back to our community, while fostering a sense of community by teaming up, collaborating on translations, and competing against other teams. +As part of the Translation Program, we are organizing the second edition of the Translatathon with the aim of incentivizing translation contributions in less-active languages, increasing the number of languages and amount of content available on the site, onboard new contributors and reward our existing ones. -We invite you to join us in breaking down language barriers and making ethereum.org content available to a truly global audience. By participating in the Translatathon, you’ll have an opportunity to meet and collaborate with like-minded individuals from across the globe, compete for exciting prizes, and contribute to making Ethereum content more accessible to the world! +If you are bilingual and want to help make Ethereum content more accessible while competing for prizes, read on to learn more! -## Overview {#overview} +[Learn more about the ethereum.org Translation Program](/contributing/translation-program/) - - This event has passed. Stay tuned for the next events. - +## Timeline -### When {#when} +Here are the important dates for the 2024 Translatathon: -- Application period: August 1st - August 15th, 2023 -- Translation period: August 16th - August 23rd, 2023 -- Evaluation & QA period: August 23rd - August 30th, 2023 -- Results announcement: August 31st, 2023 + -### Where {#where} + -The translations and review process will take place in the [ethereum.org project on Crowdin](https://crowdin.com/project/ethereum-org), a localization management platform where all of our localization processes take place. +## Participate -All of the Translatathon participants will be required to join the project in Crowdin and translate directly on the platform, where you can translate as individuals or collaborate as part of a team. +![Image of community and globe](./participate.png) -Office hours, workshops, team formation and FAQ sessions will be hosted on the [ethereum.org Discord](https://www.ethereum.org/discord), where you’ll also be able to find all the relevant information on the Translatathon, follow along with announcements and updates, and reach out to other participants and the ethereum.org team. + + +

Who can join?

+ Be older than 18 years and fluent in at least one language in addition to English. +
+ +

Do I need to be a translator?

+ No. You simply have to be bilingual and suggest human translations (using machine translation is forbidden!) to the best of your ability, no professional experience required. +
+
-### How {#how} + + +

How much time do I have to commit?

+ As much as you want. The minimum threshold to be eligible for participatory prizes is 100 translated words, which takes about 10-20 minutes to complete, while competing for the top prizes will require a larger time commitment. +
+ +

Do I need to be familiar with Ethereum?

+ No. While being familiar with Ethereum can help with your productivity and quality, the Translatathon is as much a learning experience as it is a competition, and everyone is invited to join and learn more about Ethereum while participating. +
+
-#### Application period {#applications} + + +

What do I need to participate?

+ We recommend using a computer to translate since our translation platform, Crowdin, is optimized for desktop. +
+
-The application period will be open from **August 1st** to **August 15th**, 2023. +For more details, [see the full Terms & conditions](/contributing/translation-program/translatathon/terms-and-conditions) -All participants in the Translatathon are required to apply in order to participate and compete for prizes. +### Step by step instructions -During this period, we will be organizing several team formation calls on the Discord, where participants will be able to form teams and apply to compete in the ‘Teams’ category. + -Participants planning to compete as a team need to fill out the [Team registration form](https://teams.paperform.co/) by the end of the application period, adding links to the Crowdin profiles of each team member. +## Stay up to date -#### Categories {#categories} + + -Team members can translate into different languages! + -Individuals will participate in the Translatathon as normal, competing only against other individuals, and the final scores will be calculated based on their number of translated words and the content buckets they translated. - -**Only translations, submitted during the Translation period - starting 16th of August at 5:00am UTC and ending 23rd of August at 5:00am UTC - will count towards the final score.** - -## Step-by-step instructions {#instructions} - -1. Learn more about the Translatathon and read up on the timeline, process, requirements, and evaluation process - -2. Apply to participate [here](https://translatathon.paperform.co/) - -3. Join the team formation and Onboarding calls on the [ethereum.org Discord](https://www.ethereum.org/discord) - -4. If you’re planning to participate as part of a team, fill out the [Team registration form](https://teams.paperform.co/) - -5. Check out the resources on [how to join the project and how to use Crowdin](/contributing/translation-program/how-to-translate/), and read through the [Translation style guide](/contributing/translation-program/translators-guide/) for in-depth guidelines on translating ethereum.org content - -6. Translate! - - - When translating, do not use machine translation or submit low-quality translations, since all translations will be reviewed, and participants found using machine translation or submitting inaccurate translations will be disqualified from competing for prizes! - - -## Details and submission criteria {#details} - -### Requirements and scoring {#requirements-scoring} - -With the translation process taking place in Crowdin, the deliverable for Translatathon participants is simply the content you have translated in the [ethereum.org project](https://crowdin.com/project/ethereum-org). No need to manually submit anything. - -In order for your submissions to be counted, make sure that you are only translating untranslated and unapproved strings. - -This means that you should only be translating files that are less than 100% translated, and strings with no existing translations. They can be easily identified by the red square (as shown in the image below). - -Untranslated string (translate this!): - -![Untranslated string](./untranslated.png) - -Translated strings (do not translate): - -![Translated string](./translated.png) - -String with an approved translation (do not translate): - -![Approved string](./approved.png) - -The files for translation are already categorized by priority in Crowdin, with initial content buckets containing the most high-traffic pages. - -You can read more about content buckets [here](/contributing/translation-program/how-to-translate/#find-document), and check the exact distribution of pages across different content buckets [here](/contributing/translation-program/content-buckets/). - -We always recommend contributors to translate the content buckets in order, starting with 1) Homepage → 2) Essentials → 3) Exploring → 4) Use Ethereum pages, etc., but during the Translatathon, this will be especially important and could heavily influence your score, since the higher priority buckets will have a higher multiplier when calculating the final score. - -Full breakdown of multipliers by content bucket: - -- Content buckets 1-8: 1.2x points multiplier -- Content buckets 9-15: 1.1x points multiplier -- Content buckets 16-28: 1x points multiplier -- Remix translations: 0.8x points multiplier - -### Prizes {#prizes} - -The total prize pool for the Translatathon is 30,000$. - -A detailed breakdown of prizes will be announced at the end of the application period. - -### Evaluation process {#evaluation-process} - -We work with [Acolad](https://www.acolad.com/), a leading localization agency, on all review and QA processes for ethereum.org content. - -As part of the evaluation process for the Translatathon, all translations will be subject to a QA and feedback step, where professional linguists will evaluate submissions by individual translators based on quality and accuracy. - -We will also be running anti-machine translation measures, with Crowdin providing some tools that automatically detect machine translations. - -While translation quality will not play a critical role in the scoring, any participants found using machine translation or suggesting low-quality and inaccurate translations will be disqualified and not eligible to compete for prizes! - -If you are participating in the Translatathon as part of a team, try to pick your teammates wisely. Any team members that are disqualified based on the above criteria will results in your team losing points, putting you at a disadvantage against other teams. - -The evaluation period will take one week after the translation period ends, and results & winners will be announced on August 31st. - -All translations will also be subject to a thorough review before being added to the website. - -## Terms & conditions {#Terms-and-Conditions} - -_The Ethereum.org Translation Competition, also referred to as the “Translatathon”, is an experimental initiative by the ethereum.org team to incentivise and reward contributions to the ethereum.org Translation Program._ - -- Modification and Termination. We reserve the right to modify the rules or to terminate the Translatathon at any time, without prior notice. All changes will be effective immediately upon announcement. - -- Eligibility, Judging, and Prizes. The determination of eligibility, scoring and judging methodology, and prize distribution fall solely and irrevocably under our discretion. - -- Data Privacy. By submitting the application form, applicants and participants confirm that they have read and agree to our Privacy Policy and consent to share with us the requested information, which may include information that constitutes personal data. We will keep all information provided confidential, except for the participants’ provided Crowdin usernames and profile images which may be used in public announcements related to competition results and winners. - -- Translation Standards. The use of machine translation tools, as determined by us in our sole discretion, may result in disqualification from the competition. In addition, the submission of incorrect and/or inaccurate translations, as determined by us in our sole discretion, may result in ineligibility for prize consideration. Further, any contributions towards strings that have already been translated or reviewed, as determined by us in our sole discretion, will not be included in the participants’ final score. We reserve the right to make such determinations, which shall be final and binding. - -- Intellectual Property. Participants agree that by submitting a translation work during the Translatathon, they grant the Ethereum Foundation an irrevocable, non-exclusive, royalty-free licence to use, reproduce, distribute, display, modify, adapt, create derivative works from, and otherwise alter their translation work. Further, participants agree that their translation works may be made publicly available on the ethereum.org website under an open-source licence, including a Creative Commons licence, which allows others to use, share, and build upon the work. - -- Taxes. Any tax implications arising from the receipt of prizes are the sole responsibility of the prize recipient. - -- Comprehensively Sanctioned Countries. Participants from regions or countries that are subject to comprehensive international sanctions (including, but not limited to Cuba, Iran, North Korea, and Syria) will not be eligible for participation. - -- Waiver of Liability. Participants agree that the Ethereum Foundation, its affiliates, and all of their respective officers, directors, employees, and agents will have no liability whatsoever for any injuries, losses, or damages of any kind arising from or in connection with their participation in the Translatathon. - -- Governing Law. Any dispute or claim arising out of or relating to the Translatathon (in each case, including non-contractual disputes or claims), shall be governed by and construed in accordance with the laws of Switzerland without giving effect to any choice or conflict of law provision or rule (whether of Switzerland or any other jurisdiction). - -## Frequently asked questions {#FAQ} - - - -- In Crowdin, you can send a direct message to Ethereum.org Team -- On the ethereum.org Discord, you can send a message in the #translatathon & #translate channels -- You can send an email to translations@ethereum.org - - - - - -You can translate into any language! It is recommended to only translate into your native language to ensure sufficient quality, but in short, all language available in Crowdin are in scope for the Translatathon. - -In case you would like to translate into a language that is not available in the ethereum.org project in Crowdin, please send a message to Ethereum.org Team in Crowdin, or send a message in the #translatathon or #translate channels on the ethereum.org Discord and we’ll add the language to the project. - - - - - -Yes, all Translatathon participants are required to submit the individual application form to participate. - -Only one member of a team needs to submit the team registration form, so we can keep track of teams and their members. - - - - - -Machine translation is strictly forbidden, but the project in Crowdin has a built-in Translation memory and Glossary that you can use to assist you in the process, or check definitions and established translations for specific terms. - -You can learn more about navigating Crowdin and using the Translation memory and Glossary here. - - - - - -If you are already connected with other translators or people who would be interested in participating, you can simply apply to register as a team and add the Crowdin accounts for everyone that will be part of the team. - -You can also invite your friends and form a team with them. - -Finally, we’ll be hosting team formation calls on the ethereum.org Discord, where you can connect with other individuals looking for teammates. - - - - - -If the ethereum.org content in Crowdin has been 100% translated into your language, congratulations! - -Once the Translatathon is over, all the translated content will be fully reviewed and added to the website. - -However, despite your language being completely translated, you can still participate in the Translatathon by translating Remix content. -These translations will be used in the Remix IDE documentation and have a lower score multiplier than ethereum.org content. - - + diff --git a/public/content/contributing/translation-program/translatathon/participate.png b/public/content/contributing/translation-program/translatathon/participate.png new file mode 100644 index 00000000000..817025328dd Binary files /dev/null and b/public/content/contributing/translation-program/translatathon/participate.png differ diff --git a/public/content/contributing/translation-program/translatathon/terms-and-conditions/index.md b/public/content/contributing/translation-program/translatathon/terms-and-conditions/index.md new file mode 100644 index 00000000000..bd9148ad93b --- /dev/null +++ b/public/content/contributing/translation-program/translatathon/terms-and-conditions/index.md @@ -0,0 +1,43 @@ +--- +title: Terms and conditions +lang: en +template: translatathon +--- + +The Ethereum.org Translation Competition, also referred to as the “Translatathon”, is an experimental initiative by the ethereum.org team to incentivise and reward contributions to the ethereum.org Translation Program. + +## Modification and Termination. + +We reserve the right to modify the rules or to terminate the Translatathon at any time, without prior notice. All changes will be effective immediately upon announcement. + +## Eligibility, Judging, and Prizes + +The determination of eligibility, scoring and judging methodology, and prize distribution fall solely and irrevocably under our discretion. + +## Data Privacy + +By submitting the application form, applicants and participants confirm that they have read and agree to our Privacy Policy and consent to share with us the requested information, which may include information that constitutes personal data. We will keep all information provided confidential, except for the participants’ provided Crowdin usernames and profile images which may be used in public announcements related to competition results and winners. + +## Translation Standards + +The use of machine translation tools, as determined by us in our sole discretion, may result in disqualification from the competition. In addition, the submission of incorrect and/or inaccurate translations, as determined by us in our sole discretion, may result in ineligibility for prize consideration. Further, any contributions towards strings that have already been translated or reviewed, as determined by us in our sole discretion, will not be included in the participants’ final score. We reserve the right to make such determinations, which shall be final and binding. + +## Intellectual Property + +Participants agree that by submitting a translation work during the Translatathon, they grant the Ethereum Foundation an irrevocable, non-exclusive, royalty-free licence to use, reproduce, distribute, display, modify, adapt, create derivative works from, and otherwise alter their translation work. Further, participants agree that their translation works may be made publicly available on the ethereum.org website under an open-source licence, including a Creative Commons licence, which allows others to use, share, and build upon the work. + +## Taxes + +Any tax implications arising from the receipt of prizes are the sole responsibility of the prize recipient. + +## Comprehensively Sanctioned Countries + +Participants from regions or countries that are subject to comprehensive international sanctions (including, but not limited to Iran, Cuba, Syria, North Korea, and the Crimea, Donetsk People's Republic and Luhansk People's Republic regions of Ukraine) will not be eligible for participation. + +## Waiver of Liability + +Participants agree that the Ethereum Foundation, its affiliates, and all of their respective officers, directors, employees, and agents will have no liability whatsoever for any injuries, losses, or damages of any kind arising from or in connection with their participation in the Translatathon. + +## Governing Law + +Any dispute or claim arising out of or relating to the Translatathon (in each case, including non-contractual disputes or claims), shall be governed by and construed in accordance with the laws of Switzerland without giving effect to any choice or conflict of law provision or rule (whether of Switzerland or any other jurisdiction). \ No newline at end of file diff --git a/public/content/contributing/translation-program/translatathon/translated.png b/public/content/contributing/translation-program/translatathon/translated.png deleted file mode 100644 index 47e167de4f1..00000000000 Binary files a/public/content/contributing/translation-program/translatathon/translated.png and /dev/null differ diff --git a/public/content/contributing/translation-program/translatathon/untranslated.png b/public/content/contributing/translation-program/translatathon/untranslated.png deleted file mode 100644 index 28f22632410..00000000000 Binary files a/public/content/contributing/translation-program/translatathon/untranslated.png and /dev/null differ diff --git a/public/images/heroes/translatathon-hero.svg b/public/images/heroes/translatathon-hero.svg new file mode 100644 index 00000000000..16dcb2c4de1 --- /dev/null +++ b/public/images/heroes/translatathon-hero.svg @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/translatathon/kipu-logo.png b/public/images/translatathon/kipu-logo.png new file mode 100644 index 00000000000..bd180eaa985 Binary files /dev/null and b/public/images/translatathon/kipu-logo.png differ diff --git a/public/images/translatathon/man-baby-woman.png b/public/images/translatathon/man-baby-woman.png new file mode 100644 index 00000000000..c676d51c0c3 Binary files /dev/null and b/public/images/translatathon/man-baby-woman.png differ diff --git a/public/images/translatathon/round-table.png b/public/images/translatathon/round-table.png new file mode 100644 index 00000000000..fe38e86e554 Binary files /dev/null and b/public/images/translatathon/round-table.png differ diff --git a/public/images/translatathon/settlement.png b/public/images/translatathon/settlement.png new file mode 100644 index 00000000000..99266888c1d Binary files /dev/null and b/public/images/translatathon/settlement.png differ diff --git a/public/images/translatathon/translatathon_dolphin.png b/public/images/translatathon/translatathon_dolphin.png new file mode 100644 index 00000000000..44e95937169 Binary files /dev/null and b/public/images/translatathon/translatathon_dolphin.png differ diff --git a/public/images/translatathon/walking.png b/public/images/translatathon/walking.png new file mode 100644 index 00000000000..c08981a9a04 Binary files /dev/null and b/public/images/translatathon/walking.png differ diff --git a/src/components/Callout.tsx b/src/components/Callout.tsx index 821767ce052..9337f251f63 100644 --- a/src/components/Callout.tsx +++ b/src/components/Callout.tsx @@ -53,7 +53,7 @@ const Callout = ({ {alt )} - +
{emoji && } diff --git a/src/components/Hero/ContentHero/index.tsx b/src/components/Hero/ContentHero/index.tsx index 194c60879ea..b8235f1b0c9 100644 --- a/src/components/Hero/ContentHero/index.tsx +++ b/src/components/Hero/ContentHero/index.tsx @@ -10,14 +10,14 @@ import { CallToAction } from "../CallToAction" export type ContentHeroProps = Omit, "header"> const ContentHero = (props: ContentHeroProps) => { - const { breadcrumbs, heroImg, buttons, title, description, blurDataURL } = + const { breadcrumbs, heroImg, buttons, title, description, blurDataURL, maxHeight } = props return ( - + { + const dateToday = new Date() + const deadline = new Date(APPLICATION_END_DATE) + + if (dateToday < deadline) { + return ( + + + + Apply now + + + + ) + } else { + return <> + } +} diff --git a/src/components/Translatathon/CountdownBanner.tsx b/src/components/Translatathon/CountdownBanner.tsx new file mode 100644 index 00000000000..b772a988b46 --- /dev/null +++ b/src/components/Translatathon/CountdownBanner.tsx @@ -0,0 +1,57 @@ +import { useEffect, useState } from "react" + +import BannerNotification from "@/components/Banners/BannerNotification" + +export const CountdownBanner = () => { + const [countdown, setCountdown] = useState("") + + const translatathonStartDate = new Date("August 9, 2024 12:00:00 UTC") + const translatathonEndDate = new Date("August 18, 2024 12:00:00 UTC") + + const calculateCountdown = (targetDate: Date) => { + const currentTime = new Date() + const timeDifference = targetDate.getTime() - currentTime.getTime() + + const days = Math.floor(timeDifference / (1000 * 60 * 60 * 24)) + const hours = Math.floor( + (timeDifference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60) + ) + const minutes = Math.floor( + (timeDifference % (1000 * 60 * 60)) / (1000 * 60) + ) + const seconds = Math.floor((timeDifference % (1000 * 60)) / 1000) + + return `${days} days, ${hours} hours, ${minutes} minutes, ${seconds} seconds` + } + + useEffect(() => { + const interval = setInterval(() => { + const newCountdown = + new Date() < translatathonStartDate + ? calculateCountdown(translatathonStartDate) + : calculateCountdown(translatathonEndDate) + setCountdown(newCountdown) + }, 1000) + + return () => { + clearInterval(interval) + } + }, []) + + return new Date() < translatathonStartDate ? ( + <> + + Translatathon starts in {countdown} + + + ) : new Date() > translatathonStartDate && + new Date() < translatathonEndDate ? ( + <> + + Translatathon ends in {countdown} + + + ) : ( + <> + ) +} diff --git a/src/components/Translatathon/DatesAndTimeline.tsx b/src/components/Translatathon/DatesAndTimeline.tsx new file mode 100644 index 00000000000..af711690822 --- /dev/null +++ b/src/components/Translatathon/DatesAndTimeline.tsx @@ -0,0 +1,127 @@ +import { Box, Flex, Heading, Text } from "@chakra-ui/react" + +import { ButtonLink } from "@/components/Buttons" + +import { CROWDIN_PROJECT_URL } from "@/lib/constants" + +import { + APPLICATION_END_DATE, + APPLICATION_START_DATE, + APPLICATION_URL, +} from "./constants" + +export const dates = [ + { + title: "Applications open", + description: + "Fill out the application form to participate and compete for prizes", + startDate: new Date(APPLICATION_START_DATE), + endDate: new Date(APPLICATION_END_DATE), + link: APPLICATION_URL, + linkText: "Apply", + }, + { + title: "Workshops", + description: + "Join our Discord to participate in onboarding calls and workshops and learn all about the Translatathon", + startDate: new Date("2024-08-05T12:00:00Z"), + endDate: new Date("2024-08-08T12:00:00Z"), + link: "/discord/", + linkText: "Prepare", + }, + { + title: "Translatathon", + description: + "The translation period - translate as much or as little as you want", + startDate: new Date("2024-08-09T12:00:00Z"), + endDate: new Date("2024-08-18T12:00:00Z"), + link: CROWDIN_PROJECT_URL, + linkText: "Translate", + }, + { + title: "Evaluation period", + description: + "Each translation will be evaluated by professional reviewers to verify translations were not done with AI tools and meet the minimum quality threshold", + startDate: new Date("2024-08-19T12:00:00Z"), + endDate: new Date("2024-08-28T12:00:00Z"), + link: null, + linkText: null, + }, + { + title: "Results announcement", + description: + "We will announce the results and winners on the ethereum.org community Call", + startDate: new Date("2024-08-29T12:00:00Z"), + endDate: new Date("2024-09-30T12:00:00Z"), + link: null, + linkText: null, + }, +] + +export const DatesAndTimeline = () => { + const todaysDate = new Date() + + return ( + + {dates.map((date, index) => { + const isLive = + todaysDate >= date.startDate && todaysDate <= date.endDate + return ( + + + + + + + + {date.startDate.toDateString()} -{" "} + {date.endDate.toDateString()} + + + + + {date.title} + + {date.description} + + {date.link && ( + + + {date.linkText} + + + )} + + + ) + })} + + ) +} diff --git a/src/components/Translatathon/LocalCommunitiesList.tsx b/src/components/Translatathon/LocalCommunitiesList.tsx new file mode 100644 index 00000000000..3e5ffe978e5 --- /dev/null +++ b/src/components/Translatathon/LocalCommunitiesList.tsx @@ -0,0 +1,120 @@ +import { Box, Flex, Text } from "@chakra-ui/react" + +import { ButtonLink } from "@/components/Buttons" +import { Image } from "@/components/Image" + +import KipuLogo from "@/public/images/translatathon/kipu-logo.png" + +const localCommunitiesData = [ + { + organizer: "ETH Kypo", + description: + "ETH Kipu is an organization dedicated to supporting the Ethereum ecosystem in Latin America.", + logo: KipuLogo, + lumaLink: "https://example.com", + location: "🇦🇷 Buenos Aires, Argentina", + }, + { + organizer: "ETH Kypo", + description: + "ETH Kipu is an organization dedicated to supporting the Ethereum ecosystem in Latin America.", + logo: KipuLogo, + lumaLink: "https://example.com", + location: "🇦🇷 Buenos Aires, Argentina", + }, + { + organizer: "ETH Kypo", + description: + "ETH Kipu is an organization dedicated to supporting the Ethereum ecosystem in Latin America.", + logo: KipuLogo, + lumaLink: "https://example.com", + location: "🇦🇷 Buenos Aires, Argentina", + }, + { + organizer: "ETH Kypo", + description: + "ETH Kipu is an organization dedicated to supporting the Ethereum ecosystem in Latin America.", + logo: KipuLogo, + lumaLink: "https://example.com", + location: "🇦🇷 Buenos Aires, Argentina", + }, + { + organizer: "ETH Kypo", + description: + "ETH Kipu is an organization dedicated to supporting the Ethereum ecosystem in Latin America.", + logo: KipuLogo, + lumaLink: "https://example.com", + location: "🇦🇷 Buenos Aires, Argentina", + }, + { + organizer: "ETH Kypo", + description: + "ETH Kipu is an organization dedicated to supporting the Ethereum ecosystem in Latin America.", + logo: KipuLogo, + lumaLink: "https://example.com", + location: "🇦🇷 Buenos Aires, Argentina", + }, + { + organizer: "ETH Kypo", + description: + "ETH Kipu is an organization dedicated to supporting the Ethereum ecosystem in Latin America.", + logo: KipuLogo, + lumaLink: "https://example.com", + location: "🇦🇷 Buenos Aires, Argentina", + }, +] + +export const LocalCommunitiesList = () => { + return ( + + {localCommunitiesData.map((community, index) => ( + + + + {community.location} + + + + Organizer: + + + {community.organizer} + + + {community.description} + + + Luma link + + + + + {community.organizer} + + + ))} + + ) +} diff --git a/src/components/Translatathon/StepByStepInstructions.tsx b/src/components/Translatathon/StepByStepInstructions.tsx new file mode 100644 index 00000000000..b195096b9dc --- /dev/null +++ b/src/components/Translatathon/StepByStepInstructions.tsx @@ -0,0 +1,128 @@ +import { Center, Flex, Text } from "@chakra-ui/react" + +import { ButtonLink } from "@/components/Buttons" + +import { CROWDIN_PROJECT_URL } from "@/lib/constants" + +import { + APPLICATION_END_DATE, + APPLICATION_START_DATE, + APPLICATION_URL, +} from "./constants" + +const instructions = [ + { + title: "Read the rules and FAQs", + description: "Get familiar with the rules, prizes and translation process", + ctaLink: "/contributing/translation-program/translatathon/details/", + ctaLabel: "Learn", + }, + { + title: "Submit your application", + description: + "Everyone needs to fill out the application form before the translation period starts!", + ctaLink: APPLICATION_URL, + ctaLabel: "Apply", + }, + { + title: "Register on Crowdin (translation platform)", + description: + "Join the ethereum.org project and familiarize yourself with Crowdin, where all the translations will take place", + ctaLink: CROWDIN_PROJECT_URL, + ctaLabel: "Join", + }, + { + title: "Join our Discord", + description: + "Attend the onboarding calls and workshops, stay up to date with the latest news or ask questions", + ctaLink: "/discord/", + ctaLabel: "Join", + }, + { + title: "Translate! August 9th to August 18th", + description: + "Translate content to earn points. Each word you translate counts towards your final score", + ctaLink: CROWDIN_PROJECT_URL, + ctaLabel: "Translate", + }, + { + title: "Wait for evaluations", + description: + "All translations will be evaluated for quality and machine translations will be rejected", + ctaLink: null, + }, + { + title: "Claim your prizes", + description: ( + <> + Results will be announced on August 29th. Eligible + participants will receive an email with prize claim instructions. + + ), + ctaLink: null, + }, +] + +export const StepByStepInstructions = () => { + const appStartDate = new Date(APPLICATION_START_DATE) + const appEndDate = new Date(APPLICATION_END_DATE) + const todaysDate = new Date() + const appLive = todaysDate >= appStartDate && todaysDate <= appEndDate + + return ( + + {instructions.map((instruction, index) => ( + + +
+ + {index + 1} + +
+ + + {instruction.title} + + {instruction.description} + +
+ {instruction.ctaLink ? ( + + + {instruction.ctaLabel} + + + ) : ( + + )} + + ))} +
+ ) +} diff --git a/src/components/Translatathon/TranslatathonBanner.tsx b/src/components/Translatathon/TranslatathonBanner.tsx new file mode 100644 index 00000000000..40da79fbeea --- /dev/null +++ b/src/components/Translatathon/TranslatathonBanner.tsx @@ -0,0 +1,28 @@ +import { Center, Text } from "@chakra-ui/react" + +import DismissableBanner from "@/components/Banners/DismissableBanner" +import { ButtonLink } from "@/components/Buttons" + +export const TranslatathonBanner = ({ pathname }) => { + const todaysDate = new Date() + const translatathonStartDate = new Date("August 9, 2024 12:00:00 UTC") + + const showBanner = + pathname === "/contributing/translation-program/" || pathname === "/" + + return todaysDate < translatathonStartDate && showBanner ? ( + +
+ 🚨 Applications for the 2024 Translathathon are open 🚨 + + Learn more + +
+
+ ) : ( + <> + ) +} diff --git a/src/components/Translatathon/TranslatathonCalendar.tsx b/src/components/Translatathon/TranslatathonCalendar.tsx new file mode 100644 index 00000000000..4477346e074 --- /dev/null +++ b/src/components/Translatathon/TranslatathonCalendar.tsx @@ -0,0 +1,108 @@ +import { useRouter } from "next/router" +import { FaDiscord } from "react-icons/fa" +import { Flex, Heading, Icon, Text } from "@chakra-ui/react" + +import type { Lang } from "@/lib/types" + +import { ButtonLink } from "@/components/Buttons" +import InlineLink from "@/components/Link" + +import { trackCustomEvent } from "@/lib/utils/matomo" +import { getLocaleTimestamp } from "@/lib/utils/time" + +const matomoEvent = (buttonType: string) => { + trackCustomEvent({ + eventCategory: "TranslatathonCalender", + eventAction: "clicked", + eventName: buttonType, + }) +} + +const events = [ + { + date: "2024-08-06T09:30:00Z", + title: "Crowdin walkthrough + Q&A", + calendarLink: + "https://calendar.google.com/calendar/event?action=TEMPLATE&tmeid=MHJoczcybG42Y2R2YXFncDBwZmxvbzRoNjUgY185ZTRiMWIyNzYwNzQzNDYzODE2MTAwYTE2OWQxNDI0MzAzNTJhN2NmYzMzNDRiMWU3ODVkYjUyMzg1YzlmZDM2QGc&tmsrc=c_9e4b1b2760743463816100a169d142430352a7cfc3344b1e785db52385c9fd36%40group.calendar.google.com", + }, + { + date: "2024-08-07T16:00:00Z", + title: "Crowdin walkthrough + Q&A", + calendarLink: + "https://calendar.google.com/calendar/event?action=TEMPLATE&tmeid=NGRpZWo3Y3E4a2d2dWVqMjdjNnFtZzZzZTEgY185ZTRiMWIyNzYwNzQzNDYzODE2MTAwYTE2OWQxNDI0MzAzNTJhN2NmYzMzNDRiMWU3ODVkYjUyMzg1YzlmZDM2QGc&tmsrc=c_9e4b1b2760743463816100a169d142430352a7cfc3344b1e785db52385c9fd36%40group.calendar.google.com", + }, + { + date: "2024-08-09T12:00:00Z", + title: "Translatathon kickoff call", + calendarLink: + "https://calendar.google.com/calendar/event?action=TEMPLATE&tmeid=NjU5dDRoNW9yNG0waDM3bjY0dDJmNWx2dmsgY185ZTRiMWIyNzYwNzQzNDYzODE2MTAwYTE2OWQxNDI0MzAzNTJhN2NmYzMzNDRiMWU3ODVkYjUyMzg1YzlmZDM2QGc&tmsrc=c_9e4b1b2760743463816100a169d142430352a7cfc3344b1e785db52385c9fd36%40group.calendar.google.com", + }, + { + date: "2024-08-13T09:30:00Z", + title: "Translatathon office hours", + calendarLink: + "https://calendar.google.com/calendar/event?action=TEMPLATE&tmeid=N292aDBqNWRnb3BoY2lldXBmcDVsM2o4MjIgY185ZTRiMWIyNzYwNzQzNDYzODE2MTAwYTE2OWQxNDI0MzAzNTJhN2NmYzMzNDRiMWU3ODVkYjUyMzg1YzlmZDM2QGc&tmsrc=c_9e4b1b2760743463816100a169d142430352a7cfc3344b1e785db52385c9fd36%40group.calendar.google.com", + }, + { + date: "2024-08-15T15:00:00Z", + title: "Translatathon office hours", + calendarLink: + "https://calendar.google.com/calendar/event?action=TEMPLATE&tmeid=NGJxazFsa2xjdm9ocmZnaGU0ZWZqbGIwNWEgY185ZTRiMWIyNzYwNzQzNDYzODE2MTAwYTE2OWQxNDI0MzAzNTJhN2NmYzMzNDRiMWU3ODVkYjUyMzg1YzlmZDM2QGc&tmsrc=c_9e4b1b2760743463816100a169d142430352a7cfc3344b1e785db52385c9fd36%40group.calendar.google.com", + }, +] + +export const TranslatathonCalendar = () => { + const { locale } = useRouter() + + return ( + + + + Translatathon calls + + + Join us on the ethereum.org Discord for a series of onboarding calls + and workshops where we’ll cover everything you need to know about the + Translatathon, walk through using Crowdin and answer any questions you + might have. + + matomoEvent("discord")} + > + + Join Discord + + + + + Translatathon calls + + {events.map((event, index) => ( + + + {getLocaleTimestamp(locale! as Lang, event.date)} + + + {event.title} + + + ))} + + + ) +} diff --git a/src/components/Translatathon/TranslatathonInANutshell.tsx b/src/components/Translatathon/TranslatathonInANutshell.tsx new file mode 100644 index 00000000000..53d1825338a --- /dev/null +++ b/src/components/Translatathon/TranslatathonInANutshell.tsx @@ -0,0 +1,119 @@ +import { Flex, Heading, Text } from "@chakra-ui/react" + +import { ButtonLink } from "@/components/Buttons" +import { Image } from "@/components/Image" + +import Link from "../Link" + +import dogeImage from "@/public/images/doge-computer.png" +import futureImage from "@/public/images/future_transparent.png" +import settlementImage from "@/public/images/translatathon/settlement.png" + +export const TranslatathonInANutshell = () => { + return ( + + + + Translatathon essentials + + + + + + Earn points + + + Translate ethereum.org and ecosystem content to earn points and + compete with other participants. 1 translated word = 1 point + + + + + + + + + + + + + Human translations only + + + Using machine translation is forbidden! All translations will be + reviewed and evaluated, and participants using machine translation + will be automatically disqualified and not be eligible to claim + prizes (see{" "} + + terms and conditions + + ) + + + + + + + Focus on untranslated lines only + + + Translate strings that do not have any suggested translations yet. + Do not translate strings that have already been translated and + approved + + + + + + + + + Details and rules + + + + ) +} diff --git a/src/components/Translatathon/TranslationHubCallout.tsx b/src/components/Translatathon/TranslationHubCallout.tsx new file mode 100644 index 00000000000..15a8b8b5745 --- /dev/null +++ b/src/components/Translatathon/TranslationHubCallout.tsx @@ -0,0 +1,35 @@ +import { Flex } from "@chakra-ui/react" + +import { ButtonLink } from "@/components/Buttons" +import { Image } from "@/components/Image" + +import WalkingImage from "@/public/images/translatathon/walking.png" + +export const TranslationHubCallout = ({ children }) => { + return ( + + + {children} + + + Find out more on hubs + + + + + + + + ) +} diff --git a/src/components/Translatathon/constants.ts b/src/components/Translatathon/constants.ts new file mode 100644 index 00000000000..e8e109a8a9e --- /dev/null +++ b/src/components/Translatathon/constants.ts @@ -0,0 +1,3 @@ +export const APPLICATION_START_DATE = "2024-07-25T12:00:00Z" +export const APPLICATION_END_DATE = "2024-08-08T12:00:00Z" +export const APPLICATION_URL = "https://gtly.to/Mql-w3Gs_" diff --git a/src/data/placeholders/content-contributing-translation-program-translatathon-data.json b/src/data/placeholders/content-contributing-translation-program-translatathon-data.json index de44e08785c..be8a4e7ef7a 100644 --- a/src/data/placeholders/content-contributing-translation-program-translatathon-data.json +++ b/src/data/placeholders/content-contributing-translation-program-translatathon-data.json @@ -10,5 +10,9 @@ "/content/contributing/translation-program/translatathon/approved.png": { "hash": "3679fde5", "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAACCAYAAABR7VzxAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAQElEQVR4nGP49fvb/4rKyv+SklL/ff38/p87d+4/KYDh3v17/7u6u//b2Nr9Dw4N/b97997/b968/f/o0WOiMABgWW4hwWba0QAAAABJRU5ErkJggg==" + }, + "/content/contributing/translation-program/translatathon/participate.png": { + "hash": "37b20b75", + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHCAYAAAABIM1CAAAACXBIWXMAAAsTAAALEwEAmpwYAAABwUlEQVR4nAXB20vTcRjA4a//wCK66QDdRTAoCCqi7CINEUQTNpVoFgQDJ5UaSO3CLcV0YShGEJU0cdA6mDWjyQpiRatYUWLbXAdQl27ObT+ZulXbOz49j1Jle4tlO4+K992sRJMlCS/+lehiXn7HkhKcy8hSIi2F7KrMZ0Ri8byEPsaFf8hjz4QcaDAV1LYjJvS1TdRZe4glcxRLsJJYp/VaAPPCBgPTcXzBGKWSoP3SSE8nmQ2FqDjTgNqyB6Xbf5IKcwsdg71oWhYKfxgeC6EOOam58ZlzD34w/ChC5Oc8qfASZNdx35tE6XahlB6lthoorzlP0PuejXSBopbn8kMNdeoNlQYPje1+XDPLhPJr5OZS5BI5lr9oGGttqE3HUT0WF462Ud6O+lmJrhKJreF0f6P3bpjWvg9Y+r/SPRJk5vsC3vEZXENPScXTJD9luG1/htqhN3Oiys7p+us8GXuNsclB99l+vCMv6LS9pM8+wbjzOa6rt7A2D9FWb8XnfsVguxtTlR2ldJVFtb1ODu5ulGP7jGKoviCdlisy5ZuUm3f8EgwEZMpzXwa6HGIzd8mlFptYmjvkcPlFUZurC/8BDAI6uLFE/KgAAAAASUVORK5CYII=" } } \ No newline at end of file diff --git a/src/data/placeholders/content-contributing-translation-program-translatathon-details-data.json b/src/data/placeholders/content-contributing-translation-program-translatathon-details-data.json new file mode 100644 index 00000000000..5303e6a2378 --- /dev/null +++ b/src/data/placeholders/content-contributing-translation-program-translatathon-details-data.json @@ -0,0 +1,6 @@ +{ + "/content/contributing/translation-program/translatathon/details/participate.png": { + "hash": "37b20b75", + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHCAYAAAABIM1CAAAACXBIWXMAAAsTAAALEwEAmpwYAAABwUlEQVR4nAXB20vTcRjA4a//wCK66QDdRTAoCCqi7CINEUQTNpVoFgQDJ5UaSO3CLcV0YShGEJU0cdA6mDWjyQpiRatYUWLbXAdQl27ObT+ZulXbOz49j1Jle4tlO4+K992sRJMlCS/+lehiXn7HkhKcy8hSIi2F7KrMZ0Ri8byEPsaFf8hjz4QcaDAV1LYjJvS1TdRZe4glcxRLsJJYp/VaAPPCBgPTcXzBGKWSoP3SSE8nmQ2FqDjTgNqyB6Xbf5IKcwsdg71oWhYKfxgeC6EOOam58ZlzD34w/ChC5Oc8qfASZNdx35tE6XahlB6lthoorzlP0PuejXSBopbn8kMNdeoNlQYPje1+XDPLhPJr5OZS5BI5lr9oGGttqE3HUT0WF462Ud6O+lmJrhKJreF0f6P3bpjWvg9Y+r/SPRJk5vsC3vEZXENPScXTJD9luG1/htqhN3Oiys7p+us8GXuNsclB99l+vCMv6LS9pM8+wbjzOa6rt7A2D9FWb8XnfsVguxtTlR2ldJVFtb1ODu5ulGP7jGKoviCdlisy5ZuUm3f8EgwEZMpzXwa6HGIzd8mlFptYmjvkcPlFUZurC/8BDAI6uLFE/KgAAAAASUVORK5CYII=" + } +} \ No newline at end of file diff --git a/src/data/placeholders/content-developers-docs-design-and-ux-dex-design-best-practice-data.json b/src/data/placeholders/content-developers-docs-design-and-ux-dex-design-best-practice-data.json index e01c4a1f28a..ee3d39cd345 100644 --- a/src/data/placeholders/content-developers-docs-design-and-ux-dex-design-best-practice-data.json +++ b/src/data/placeholders/content-developers-docs-design-and-ux-dex-design-best-practice-data.json @@ -1,70 +1,70 @@ { "/content/developers/docs/design-and-ux/dex-design-best-practice/1.png": { "hash": "1475dedd", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAACXBIWXMAAAsTAAALEwEAmpwYAAABF0lEQVR4nKWSsUrDUBSGz+DmA/gEXUUXKYJCVydx1Vl3cfEBfApx9xkUoyAauVqh0VS9RSotbdNGkiYp7c1t019yCZmSVvGHn3M4w8c5P4fwT1HWUI4kxFAox/1YjiFH4e8Bd1f30C40POkM15c3ODs9h8EMRJNoPiCaROBmDe+co/rGwR6fod0+wCxz9Dt9+D1fbTQT0Kx9oP5ZQeB2EHhtDAcNuO0unJajILmAaVK3d45BC2soFA9QKO6DlkrY3TtJspH5J0yTurxxBKJVEJVAi1sg2sTK+mG6wdwMeo0mAq+VIkPh4cuowq7bsLilcsgFxKqwVzC9jG/LgWv7MF84dI1BDITyzBBjyVCmVj+Q9FnKBPxFP3COj/3Fi5B2AAAAAElFTkSuQmCC" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAACXBIWXMAAAsTAAALEwEAmpwYAAABFUlEQVR4nKWSwUoCQRzG59CtB+gJukZdIoIEr53Ca53rHl16gJ4ivPsMilsgtTFl4NZajYSiqKsbu7qKzY7Z1+yw7WlXjT74+P8Zhh/ffAzBP0XiDsWnAJ9w5WCfiqmc/vKAm+IttLyGB53iqnCN7GUOBjUw+5otBgSXmFnDK2OovjDQ+0dopTuYZYZBdwCv76lEcwGt2hvq7xWM3C5Gww4m4ybcTg9O21GQRMB3OA8y5yAr21jfOZE+BllL4/DoIuxGJD/hF7CxdwZCtqTTIKv7cqawuXsaJVjYQb/ZktHbEdLnQzSMKuy6DYtZqodEQKAKfQbVy/iwHLi2B/OJQdco+Jgrzy0xkPBFZPUHwj1OsYC/6Adwjo/9joHD3wAAAABJRU5ErkJggg==" }, "/content/developers/docs/design-and-ux/dex-design-best-practice/2.png": { "hash": "cf379a0c", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAmklEQVR4nMWRsQrDIBCGr6/m4AsIDnk838DRQbrYOSkZHB0dHKQkFMSGvyRTIaWU2tIffm44+O7+O0Kj6CeAWuvmd3r0tQ2W24JyLZguE7z3iDFuk9a6OueMlBKccwgh7AFznjEeRwynAXQgEBGEEDDGwFoLpRS6rgPnHFrrPSCcA3rTvwRIKcEYew6opbZFQOsRH/WfN34KuANuR9QIyMfIaAAAAABJRU5ErkJggg==" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAmElEQVR4nMWRsQrDIBCGr6/m4AsIDnk838DRQbrYOSkZHB0dHKQkFMSGvyRTIaWU2tIffm44+O7+O0Kj6CeAWuvmd3rf22C5LSjXgukywXuPGOM2aa2rc85IKcE5hxDCHjDnGeNxxHAaQAcCEUEIAWMMrLVQSqHrOnDOobXeA8I5oDf9S4CUEoyx54BaaluE5iM+6j9v/FR3bkfUCJN9GeMAAAAASUVORK5CYII=" }, "/content/developers/docs/design-and-ux/dex-design-best-practice/3.png": { "hash": "2eb48ffc", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAABDUlEQVR4nLVRsWqEUBB8v+An+BNWNpbWYuEHWAQ7Kysh8DqLgI12FoekTnOHpLA5OEh9pZ2dhcEjiJzFhF3yXu4S0uS4hcFdYefNzArcWOJuBMMwYJomBvVqXpaF+67ruBdqYT2vGIeRMX/MiKIIlmUhyzKNNE35fxzHDCISioCWDq8HtC8tjm9HOI4DIQQvKIIgCGAYBkzT5JkUCfU64bLyPGfUdY2yLBlVVaFpGv6GYfhNQEUEpEJZSJIEnudBSqlBFkg6LRPYwnpesd/usXveoXgsIB8kNk8b+L7PFlzX1RbIFlmwbZtV6AzGr/BO7ycGkf6lQIVJeVyF+LP6vtenuzyjmn+d8b91M8EnBY6SaPBrBEYAAAAASUVORK5CYII=" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAABCElEQVR4nLVRu6qDUBA8v+An+BNWNpbWYuEHWFzsrKyEwOksAjaxswhy6zQ3SIo0gUDqlHZ2FgmGECQpJuzCOXlc0iRkYXBX2DkzswIflvgaQdd16PueQb2ah2Hgvmka7jXB5XzBrtsxTscToiiCZVnIskwjTVP+H8cxg4g0AS2tF2ssZ0tsN1s4jgMhBC8ogiAIYBgGTNPkmRQJ9TrhvvI8Z1RVhaIoGGVZoq5r/oZheCNQJKRCWUiSBJ7nQUqpQRZIOi0T2AItrv5WmP/OMRlNIH8kpuMpfN9nC67ragtkiyzYts0qdAYqvMP+wCDSVwpUmJTHQ4jP1batPt39GdX874zv1scEVwWOkmjMy69JAAAAAElFTkSuQmCC" }, "/content/developers/docs/design-and-ux/dex-design-best-practice/4.png": { "hash": "82b99435", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAACXBIWXMAAAsTAAALEwEAmpwYAAABBUlEQVR4nK2RsUoDQRRFX+FfiJWFYGsn/oFNev9BK0H8AktBO7GytRM2IKQwkGxAsEhwheCyGkgksq5Rl6zjJDnyRgtd1BX0wWWY4XHmcq/wx5F/BYxHY8zQYJ4N1tqcRsWAuBMTnUXUK3U8z6PR8CmXj9ne3acdtEm6idvRj74EpEnqdBV2OA8uaLYCqlWfo8MKTT8gPA0dpDCDfu+a2olH3I9IB10uWzXuejcObo39HvB4nzp7q+s7iMwgsyVkroRMLbC5deB2XnJZSB6QPWWsbewhsohMLyPzK4gsuTd1MLh9+LmFN4sTvb2fOhMH1gAVUpiBVjbMzCf9qsaiUYcfK1TAK1XbkuKVupUgAAAAAElFTkSuQmCC" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAACXBIWXMAAAsTAAALEwEAmpwYAAABCElEQVR4nK2RvWoCQRSFp8hbiFWKQNp04hukSZ93MJUgeQJLQbtgZZsusIJgoaArBCwUVxCXjYKKYbP+La7jaI57JwpqXFbQA4c7MwzfPdzLcKHYVQHr1Rp8zsEXHEKII6/8AWbXhFE1UM6XoSgKKhUV2WwOiVQaLa0Fq2fJP9ToJMC2bOkvvYuG1kStrqFYVPHxnkdN1aB/6hLimWCnYb+DUkGBOTRgj3to10v46Q8kXHDhDZiObBkvEk2CsSDY7RPYneubB7zGM/LP8mgW/wDOzMFL7M0FhMACj2D3z+45LN8owfh74g2g7n8Rf+m2rZCVwDRAgvjOgFY2d/iBz1qjnyjh/gpJG1XbkuJDH0C4AAAAAElFTkSuQmCC" }, "/content/developers/docs/design-and-ux/dex-design-best-practice/5.png": { "hash": "fb1e6d8a", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAACXBIWXMAAAsTAAALEwEAmpwYAAABCklEQVR4nLWRzUrDUBCFZ+PCZxF8AfEFRHDjEwm+gnTnwi6NSBdFEHTRYGlq/yRYua2QbFpaQUNrGpOZ3CP3SsVNtCIOHBjm5+MwQ/hj0L8AtGjkyJFxBmaGiJjq6oCaW0PpqIRGvYHbpofLqgOlBp/wQoAWjfnTHN61B+fkDK2bNu47fdz1egiC8HsHWjQkE3DCeOwqqK4PEbb115cZhp0HRKMIEzXBdDi1WkQLkFkyjXF/jKAZIGyHuKi4OC5X0fJD+IMRTisuzp0rCzdLS6Vx+uEgmSXWevwc26GNvQMQbYPWd0FrOyDawub+oXUqkv98RDOUpow3Ixabc8arf+E3UQgwz/qqIsA7oUqbr9yKoAIAAAAASUVORK5CYII=" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAACXBIWXMAAAsTAAALEwEAmpwYAAABCUlEQVR4nLVRTUsCURR9mxb+lsA/EP2BCNr4iwL/QrhrUcsmxIUIgS2UxDE/GVSeBjMbRYMatHGcudc5zXthi2BKCc/jwH333nM4vCfwT4iDGEQcYROfkEIQEZhZdXc3qFQryF3lUK/V8dww8VA0IOXo2zzRQA2Xr0uYjyaMm3s0n1rotwfodbuwbef3BErMIYN8wktHQnasODrp/sf7AuP2EO7ExUzOMB/PNVfuCkKJ1GA6mMJu2HBaDkqFKq5vi2haDqzRBHfxPW+UtbkSbRl4wVcCf+Hr6N6bp5eOLy4hxClE6hzi6CyuT5DOZHVS5s3fj6iWgoCwViTWNYW0+y/sg0SD6AeT8AmhSpuvtAK9HgAAAABJRU5ErkJggg==" }, "/content/developers/docs/design-and-ux/dex-design-best-practice/6.png": { "hash": "613499fe", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAABP0lEQVR4nK2RwUoCURRA3y7aBW2Ctn1EH9AmKlr5A+1ahFlE0L4PCNpFBJGryoqKdi2GLBjLBpl0mqZRZEQInJRsjPR5wrEsqHFjFw73vgf3cN+7gh5D/ItASvkn9Xr9k4Z/DhS4rksikUBVVR9N07Asi3w+75PLZSk4TneBoijE43FSqRS6rmMYBqZpYts2qpoknckEC0oll5PTMw6PjlEuLnmwbDIZE8O00DSdnc0Drs6T1Nwa1WKVSraC9+R9C7zXMo/GNbZxQzGfpvrs+HiVAi9lh7ukQu5eR9Yl8l3SeGv4uSNQEjlGZ7YYm40yGYkxFdlneiHGeHiPifAuI6F1VjcUv0HK5u8nrEVvEX3ziIFFRH8EMbSMGF5p14NLCDGHCG0HC6CJlK1Vtfla38+7FoGf2Et0BK3BuhEk+AB1QcLuhWIKhAAAAABJRU5ErkJggg==" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAABO0lEQVR4nK2RvUrDUABG7yZugovg6kP4AC6i4tQXcHOQWkUEdx9AcBMRxE5qVVTcHIJVaLSWEtsYYxpCS0FobLGmYpMeY6pV0OigHxzuHxzu/a7gjxH/IvA871uazeYbbrAOFdi2jSzLpFKpgEwmg67rWJYVYJoFSsXizwJJkkgmk2SzWRRFQVVVNE3DMAxfmiaXz4cLKhWbg8Mjdvf2kU5OudEN8nkNVdP92yhsrO5wdpymYTeol+vUCjWcO+dD4DxWuVXPMdQLylaO+n0xwKmVeKgWuUpLmNcKXtPv5tnDfXKDsSOQZJPBiTWGJuOMxhKMxbYZn0kwHN1iJLrJQGSZxRWJduGtr09Yil8iuqYRPbOI7hiibx7Rv9Ce984hxBQish4ugJZ/4HZ4/77Pe6+ElviXdAStXwjLC3VBwu6Jsi/jAAAAAElFTkSuQmCC" }, "/content/developers/docs/design-and-ux/dex-design-best-practice/7.png": { "hash": "e4b4a4d7", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAABiUlEQVR4nI2SXWsTQRSGB++8EMS/ZX+P9ULF/oXilRdeVKRWqFq/oNDehFYItTFdk026m92NO52QLO4kaZttNpPNI26/IQkeeDlz4JznzDuM4EZ0q136jT7j4Zj/DXGz0JZGVzTHwTHGmKnKsmwOoKup+3Va7RZKqStJ+U9HtJSi1+vNBoS/Q4rFIp7n5XLdBlIGbBeqrK7vcFivEcd6NiCKImzbRkqZbw4vsuN4WNYvrIpDJ5oDMMbk+dJnrE9yXcfkqmcqoNOJ2N39Trl8QMPzCYImftCkGfh4jo3jNtB6zg1aKuTzxjs2v37g0P7Jn0jSbktiZeH9eI/vuQxOpwCybJIX+5WQ5ZUCL1d3eLW+x9tvFmtfLN58OmDlY4kXrwuUquGFzfOZHDBMzz/OwuNthFhE3HuOuPMU8WAJcX8JIZ4g7j5DiEc8XNzKey9nbllQ7Zh9y6dYqrFXdrFqEl9qVDSg6hzl0vp09huk6ZD0LCFJ+iTJCaN0wNikTLJRfjbpGcaMbgH+AgtxwxZs95PuAAAAAElFTkSuQmCC" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAABhklEQVR4nI2SXU8TQRSGJ9x5YUL8W/J7hAs1+heIV154ASGoCSofmpjITQMkDVDL2G7Ltrtbd9mm3bjTFmjpdrt9mK6KJWkbT/LknJPMeWfemRFMRKvYolPtMOwP+d8Qk42SClVQXDqXxHE8lSRJ5gi0FGW7TL1Rx/f9OzxvzAV1Xbfb7dkC7k+XbDaLZVkplUpVDzrsZ4psbh1wXi4Rhmq2QBAEGIahh7x0Z/dPNk0LKX8gCybNYI7A2OM4/voM1VXKvxjdrZkq0GwGHB4ekc+fUbVsHKeGrak5NpZpYGpLSs05Qd132d1+z9fPHzk3vvMr8Gg0PEJfYp18wLYqdK+nCCTJKG1OCy6raxlebx7wZuuYt18k7/YkGztnrH3K8Wo9Q67oMjmTCvSj3x9naWUfIZYRD18gFp4hHr1ELGrEU8SD5zo/4fHyNyZn7lnwGyGn0iabK3GcryBLHran8IMuRfMiRanr2XcQRX2imx69XkdzxSDqMowjRskgrePoRr/C4J7ALQtxwxY3Ksy3AAAAAElFTkSuQmCC" }, "/content/developers/docs/design-and-ux/dex-design-best-practice/8.png": { "hash": "5a9b1851", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAABbklEQVR4nI2SQUsCQRiGv1vQqWP0X6JrRPQHoroE1SXoHvQDskvYOfoBXrRb0qFLeS8jJbF1M1dXx7VxdnR2fGM/UYxY6YOXmQ/mfeadb5cwU+VcGdX7KvxXH8pX+E/RbFO5q6CULbGcBwdGGYwwgjGGZa1lJQKC7wCNZgN6qBHqEEopltYhrDXQWkNKmQwQQqDdbk97a0e8vrw1kckW4Lfq0HowH1Cv1//EbXgdFIslVJwvdIJ+MkBrPX3vyFo2eq3ONH58u1JhMkBKCdd1EQQB3x6bQj1AxNAhg+OZJAI8z0Mul0M+n+enxBVPYSAbeH7MoPz+gXAeQIguau4naq6LbtBjcxx7qDWEaMNxxunmzCBEX3bQFR5LScHx4wpVD8YomCj69S8wYGAibnZOsyDaBi0cgGgftHwMWjkBLR6Clo5AtIu9s1s+O/EwwETj731xUwCtpUCbadBGGrR1Nd6vX47X1XOkrp/47MTzA2TnwUa1XQ/CAAAAAElFTkSuQmCC" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAABaklEQVR4nI2SMUvDQBiGbxOcHMX/Iq4i4h8QdRHURXAX/AHWRXQWf0CXxs3i4KLdtWKLpcYYE9vkmppe0l7S17svWCKS4hdevrvA+9z7XcKQq6bRRPumje5TF6Ir8J9i+U3ruoVGpUEyb01IITFWj5SSlKYpqRAQfAVwPh3EoxhRHEEIQYrVOk2l6jHCMCwGcM7hed5kn6Zj6o/PnyhXauh2bAUZTgfYtv0nruP6qNcbaJkf8INBMUBH/Jl3rMza6Hb8SXx9uhBRMUDPZ1kWgiCg07UpUqaEoCMC6zspBLiuC8MwUK1WaRRd+haGoYOHuzKaL6+IpgE47+HNeley0Av6ZNaxRyoJ5x5MM0s35Q4iDEIfPe6SRMgpvq5I9NUIAjJJfv0LBBjKhDYbhxUwtg42s6P6Ntj8PtjCAdjsLtjcnnq3ia2jK+Q9BJBJ9r1PLmtgSyWw1TOwFaW182y9fJr1xWOULu6R93wDZOfBRshepPwAAAAASUVORK5CYII=" }, "/content/developers/docs/design-and-ux/dex-design-best-practice/9.png": { "hash": "5289331a", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAABXklEQVR4nJVSv0sDMRjNIDg5uOmf4yjoKgjiLg71B2IHEf+dDgcOBbVaFBHdHASLpYJci/RqvbS9XtKmSe5Jcram2Ap+4fHxJS8vX15C4ITkElpq/CeIW/gFH9WrKtqvbai+soImDzFJnLiF6An0oz56rR54yBH50QgsYGi/dSxnqkA37iIMQyTOABJwLvD+QVEp18C68XQBxhhih6C1EQCeX5rwTh/QCGoQYoDke/6XgJRylLVW+KSRhelCa20x5EwU4JwjCALbSUpWUDpBojWUHIBSatemCoS0hWLxBrd396gHjdRYpdFp+ni8zuGpVLGH/NEBA2cUcVS3WSlDTo0EjPsSQkx4BdOmidxZCUvbHlZ3PSxnPKxl89g4vsD60Tk2TwpYOcjDuyyPGWwFBt8fxBAJ2QKZ3weZ3QFZzIIsHILMZEDm9uya4bh7xq5gzEq0GsE4boxM53/gXuELeWvL/6l0P9AAAAAASUVORK5CYII=" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAABX0lEQVR4nJWST0vDMBjGcxA8efCmH8ejoFdBEO/iYf5B3EHEr7NDwcNAnQ5FRG8eBIdjgnRD1rk167omW5ekj026zQ43wZSHt02ePnn7SwlSQ3ABJRT+M0j6wS7YqN5U4b17kH1pAnUdaVr4REDYC9H3++i1e+Auh2/7YzGHwfvoGM/MgG7Qheu6iFIXYnEe4vOLolKugXWD2QGMMQQpg1KRqa9vTVjnT2g4NYThANFw/leAEGJclZJoUd9Id6GUMhp5pgZwzuE4jukkMcfw4t2i+F6KASilZm1mgEvbKBbvcP/wiLrTSMBKhU7TxvNtDi+litnkjw4YOKMI/LqpUnLTfiJNX8QMppyCHELJXZSwsmthfd/CasbCRjaPrdMrbJ5cYvusgLWjPKzr8gRgEzAY/iDaSMgOyOIhyPweyHIWZOkYZC4DsnBg1rQn/c7EJ2hYUUx/JE1cg0zmf5Qe33lry/+eS4bWAAAAAElFTkSuQmCC" }, "/content/developers/docs/design-and-ux/dex-design-best-practice/10.png": { "hash": "f14666fe", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAACXBIWXMAAAsTAAALEwEAmpwYAAABfElEQVR4nI2S3UrDQBCF1zvfTF9HKYLgW/gAgjeC0FuhFMULwaJYKKISTLCtaa1Nukl2N5uuyfZIRiut/dGBj+wOM2d2JsMwY+pVQQ80JsWE+I+x2Yt74sI79ej73nhH8pwQ1k6IPwXSKEUyTCADSYg3ARUqGDOGtQWyLCNWCsRJjBEfLVQZ8QzeSwBjMhhjVgtEUYRgGMBa+0Npjheidt5Eu92FUnq1gNYaQgiqUibHMoVKNVXWWkAqA6XXtGCMQZ7nlDwhAYUoUYDF9yDt+hY452g0GnAcB0qpH3+eRRi4twhCTgNdK9BqtdBsNhGGIfnKn1cYgZ53h07XpzbXzoDzGHGc0NmYD6KwFkIq+H5v7mVLBFIM+m3wsI/811Ol4HCde0gpFgWmO/boDnFUvUO1/oTatY+Lmx5Rv/ZxdtXF4fElHp7fKHa6mSQwNgVdtio1MLYDtrEPxvbANg++KM+s9O1iu1Kj2GnO/CbKMTp9gdeBXEqnn1DMbAufGYlL9W7yNjIAAAAASUVORK5CYII=" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAACXBIWXMAAAsTAAALEwEAmpwYAAABeUlEQVR4nI1S20rDQBCNb/6Z/o4iguBf+AGCL4LQV6EUxQfBolgoohKaYC/pNekm2d1sGpP0uJnS0tqLDhx2Zpg5c9kxsCSyI6EGCtNsSviPGMuGdW3BvrHpHVaHCBshIc+nhD8JIj9COAohXEHgfQ7pSSTJRBNkiOOYsJUgCAOM2XitypjFsL9cTRRrJNsJfN+HO3J1tXyBQkzbQ/muhmazDSnVdgKlFDjnVKVIDkQEGSmqrBSHkAmk2jFCkZimKSVPiUDCDyWgG5ktMt89AmMM1WoVpmnqVuXCn8Y+BtYLXI/RQncS1Ot11Go1eJ5HvuLzsoSja7+i1XZozJ07YCxAEISkJ8k3IdOtcz2O43RXOttAEGHQa4J5PaS/WhWcwTLfIARfJ5jf2Ic1wmXpFaXKJ8pPDu6fu4SK1m8f27i4esB7o0+x88skgkmSkXFwUoZhHMHYO9PvKYz98xkK3Sh8xzjUMcs5q5coJmj1ODoDsRGtXkgxy/IDGYlL9dPyjPAAAAAASUVORK5CYII=" }, "/content/developers/docs/design-and-ux/dex-design-best-practice/11.png": { "hash": "912d52c5", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAACXBIWXMAAAsTAAALEwEAmpwYAAABY0lEQVR4nKWQz0rDQBDG9wG8CIoi+Fg9in8LPkVfpwfRg4h4aQ9WL5VKaxGhWJqDxta0mzTNZtPZNJ/spkpE0yJ+YWAn+81vZochIzVVJv4ilk1a5RbaJ230aj0Mn4cGRoIwU7PlgGSWQIXKFNpNG4PHAXiXm9x3JpgSgeaRO4Ef+KjX6uj3+yl0/n0qjuPFAM/zYFkWQhFCkcI00uYE9w8vqFTv4LojSCkXTOD74Jx/dUq7aYCFm9smuMsRiDAfIISA4zhfYwoRQsoIoZiAjxy8vbsY+xqQ/A4gIgPxvLHJXS/A0E3PWY+eMHcHjUbDhAZpY/Y5RGrZEn1UKlWcX1yi0+mCKIaQBP76hOurMrqWbZ6VC4hkiDAYIPBtKBKZGwWacpAcgSjKbGAO0J20iqUzMFYA2zgAW90F2z5OY20PbPPQ3GlPtuYb4Kh0mgLW98FWdsC2immhPut/rGA8PwD/0QeSeDta17ObCQAAAABJRU5ErkJggg==" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAACXBIWXMAAAsTAAALEwEAmpwYAAABZ0lEQVR4nKWRzUrDQBDH9wG8CIoi+Fgexc+CT9HX6UH0ICJe6sHqpVJpLSIUS3PQ2Jp2k26z2WST9u/uppb4kRZxwkBm5z+/mZ0lyFgcxcb/YiQbNEoNNI+b6FQ66D/3DUxyiXE8XgyYjCeIg9gU2nUbvcceaJuamDkjRFJCTj13AuYzVCtVdLvdFDr9Pi1JkvkAz/NgWRYCHiCWMaJQGsz9wwvKV3dw3QGEEHMmYAyU0lmntJsGWLi5rYO6FL6C5wI453AcZzYmV2IhQjXRCHTg4O3dxZAFBvorQBdqiOcNTex6PvruEN81esLcHdRqNeMapIXZ60i1lwVLZCiXr3B2foFWq63ECbiQoK9PuL4soW3Z5lq5gFAECPwefGarV+CZjOocUUgxUNAws4EpQHfSViiegpAtkLV9kOUdkM2j1Fd2QdYPTE5rsjVfAIfFkxSwugeytA2yUUgL9b8+Uzmt+QH4j30Akng7WjHQik4AAAAASUVORK5CYII=" }, "/content/developers/docs/design-and-ux/dex-design-best-practice/12.png": { "hash": "d0ffcd2b", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAABYklEQVR4nKWQz0rDQBDG9yR4Eo8+gBfBp/GoiNijogeP4tmbL1AvotgK/rloPXgplkpNadBQaZqkSdo1ptZi221M1JB+kq1CRSJFBz72m52dHzNL8M8ggwlNU9jXNrxnD6zG0NJa3A8F6AU96Ckd6okKeklROa2glCxx3zE7w03gvXroOg5c94XLcRx0WReszbhnjMF13WiAotawuXWMfF5ASS5DlmWUlTKXoigQRZGfkQDLekAmc4WCKKFYVGEaBnRdh2mY0DQNQl6AZVnRgDffRw9AEAQ8bzTbXBi4830/GvBUpxAudlAoiKhWq3zciq5DkiQkkwdIJBK/r9Bs3OMmdw7TULi3qIFHm0JT7pDLpiFk06jb9Cfg3e+PN7t+BkJiIOOrIKPLIBNrfY0sgYyt8NrcRoq//erhAD8INwfiRxLIzDamFvYwOb+L6cV9rtCHd2Etfnjb/4vPnm8r/CU+AKV8uhVvNZHEAAAAAElFTkSuQmCC" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAABWUlEQVR4nKVPPUsDQRTcSrASS3+AjeCvsVREtFS0sBRrO/9AbEQxEfxoNBY2waDECzn0iOSyd7l8rGdiDCbZxJx63I2bTXMiJ0EfDG/m7b5hHsE/iwQFSzBUb6twXh3wCkfTbEo+lIHv+bDiFoxTA+yKoXBWQC6Wk7xdag+XwHl30Ol20eu9SXQF7/AOeItLzjkX8164ATUq2No+QTqtIKfnoes68jQvQSmFqqqyhxrY9hOSyRtkVA3ZrIFSsQjLskQvwTRNKMLYtu1wgw/XhS+653lS1xstCQRmrvgTavBSY1Aud5HJqCiXyzJuQSTQNA2x2CGi0ejvJzTqj7hLXYjIVHKbFfFcZTDpA1LXCSgCNaF/GHy6g3izG+cgZAlkfA1kdAVkYn2AkWWQsVX5NrcZR3BHGrieL0XkWAOZ2cHUwj4m5/cwvXgg0ef9Wf8tcnSP4M63E/5SX6V8uhXGNI+zAAAAAElFTkSuQmCC" }, "/content/developers/docs/design-and-ux/dex-design-best-practice/13.png": { "hash": "176b1233", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAACXBIWXMAAAsTAAALEwEAmpwYAAABAklEQVR4nKWQsUoDQRRFXwr/wcbGDxAbQT/A0l+wsxErG9HKwj8QO/FL1C6kCVFSCVlJoitJ2MQsCdnZ2ZfMEceIFhs24oXLhXmPO/c+YQnMpjPPPAj/hOQ9Rq8R7XoLYwxJklC7fSCoBowHY9TqYgO16qNWyo/c35UBh6rSDFo0np4xY4NN7GIDm1j/SzMI6UUDov67Zzwa0Q27DDtDJvGkuELcb9PrNL5SqaFeq/AWvhTfQHXq9fTiBlnbY2X7ANncR0o7HJ9f+1k238k1yObDw5NLRNaR0hayuovIBkdnV8UGP0kMzqU4Z3Eu86qaFVf4nSQxljTNvH7yu95SBn/BB109mRMReSOGAAAAAElFTkSuQmCC" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAACXBIWXMAAAsTAAALEwEAmpwYAAABBUlEQVR4nJVQu04CQRQdCv/BxoYPMDQk+AGW/IKdDbGiIVJZ8AfGjvAlaEe2IUioSFgDyBogy2PDhpmdvbDHmUEDMQuLJzm5kzlzzz13GM7AdrM1jAM7x+AUYg3ckYthZwAhBDjnaNXfYTdt+HMfJOm4gRZ1VKvRxttrQ91EICL07QF63Q8IX0ByedxAi3pK33YwdedwZwtDb7XCxJlgOV5i7a2TV/BmQ0zHvV0qEui0LHw5n8l/QLQx9bFSA7vK4yJ3D5a5A0vdoPhUNVr48ybW4FcslJ7BWFo1ZsEub9X5Gg/ll2SDfRKBKAoUpWJoKlGYvMJhEi4kgiA0VZP+TD5p8B98A109mRPQezxyAAAAAElFTkSuQmCC" }, "/content/developers/docs/design-and-ux/dex-design-best-practice/14.png": { "hash": "5e87180c", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA5UlEQVR4nLWRzWrCQBSF563sI/gKrqXv0IVvUOhGMItCoRE3bqxLF3Xromqb1oUOJREcY5A04wjW2MnkFAYLUeJPKF443MW5fPeP4J9BLgpQSiUUnw/wPA+UUjDG4DhjvA8ohFicD/D9L0wYg+vOYNsT9KwRAp4BsBQBPPYJwecQ3EW4nCJcr04D1HbPTt9B6a6JemuIp2cKo9pGbzDTXvSjEMs4HbDZRDoXb0wQcgVC8lvlULg2tPfNQ8iVPDSB0tl6e8F95Ra1RwONugnzoYyP1+5OzdEbZIlUQPL/Ukqt/c5/gF+cup8JpBYoJQAAAABJRU5ErkJggg==" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA3UlEQVR4nLWRyw7BQBSG+1Y8glewFu9g4Q0kNhJdSCQqNt1gacHWwv2yYCIqaVUjqErQGtNfMyFBXCP+5MtZnJnvzEXAjxH+KmCMXeF+LjAMA4QQaJoGRZmg2yewrPXngsViCdXbrOszjMcqGp0hVuYXgo21gqGNYJlzDx32Zgp7v30vuNyz2lQQjRchlwYolAnEbAWN/oz3jgcGl7qPBY5z5DUUkSAIfo/AGR+CYZH3dqYNuqXPTsB47bRrSCVjyGVE5GUJUjqBXqt+s+blG3yTh4Lr/6eUcu4nX3ICnLqfCS4orKsAAAAASUVORK5CYII=" }, "/content/developers/docs/design-and-ux/dex-design-best-practice/15.png": { "hash": "f564393b", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAACXBIWXMAAAsTAAALEwEAmpwYAAABB0lEQVR4nLWRvUrDUBTH7+gz+AiC+ALiKugLODnoIrjV9xAHF53EycniIKKgEHCoSqBXSFMiVDSGXojQorX5uEl+kltx0WJEPPDnHM7h/Dgfgj+a+FeA1vpTWZZXB7iui2VZSCm5ur7h+OQcpbrVAZ3OPU0pcRyHRsPm8OgU/ymoDngOFXduk1D5hOqBQe+R4dvrz4DsY8/dvTqTM4us1LZY29hkbmGV/YMzU4uHKTrVRl8ASTJKLtd2EGIKIWYRE/MIMc3S+jb9bp+21SZwApSnyLN83BdyiiKhKEpgGY+8f+tj121aFy28S480Sr8HlKtonRlFcWpUANFLZKaIB7FpHnvE39g79byX+Xgl6PUAAAAASUVORK5CYII=" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAACXBIWXMAAAsTAAALEwEAmpwYAAABCElEQVR4nGP4TyFgoKkBv3//huM/f/4Sb8D169f/Hzx48P/Fixf/nzx1+v/W7Xv/v3jxnHgD7t27//8CUPPVq1f/nzhx9v+6jTv/P37ylHgD3rx+8f/29Qv/X794DMQP/395/+j/t6+fCRsA8+esBev/S+l7/08qmvA/o7jvv51X8v9FK3aB5X58+/X/96/fYIxhwM+fEMG4opn/GRi0gNjmPwOHO5DW/R+RPeX/h+cf/t84eOP/06tP/7+49eL/X6CFOGLh7/9//34C8W8oG0I/vvT4/9n1Z/9f23ft/60jt/7/+v4LuwEgr/z+/QeMv//4Bcb/gOLfP30Hu+LHlx9gzTgDkRQAAPW8l/np7MsUAAAAAElFTkSuQmCC" }, "/content/developers/docs/design-and-ux/dex-design-best-practice/16.png": { "hash": "c2c663f9", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAACXBIWXMAAAsTAAALEwEAmpwYAAABcklEQVR4nKWRzUsCURTFX/9GRP9NRdsg+9q1KBcRFQRRFO2qTZsgiFoUrVxEBBERJCWK4VBo6IyZWDE2MqPzYTYzjjN6Yl5OBraIunC47x24P959h+CfRbyDpVswNAPmm0m7J9u0fweoFCvQBA1lsQz5RabdvbuQOupwHOeb6u2A3FMOzC0DLs0hfp9A8DoMRZGRfkiDYRiwbBKRSAyhUBSqqrQDBKGAZDIFluUQY+I4PQtSj+d56qdYFjEmgejNHVRVbQdoahEl8RmKXIAs8dC1PExDh1wqUF8S81DlPHTtFdWq0QI4zX0Cx1cY8q9jenkHcyvb6BuYwsl5FAeBC/gm1zC7ugf//CYGx5cQiXF0xp0llvX5yxOLhyCkB6R7FKRrBIT0YmHjCMMzu01/DKTTB9LRj639Szpj2/XWCl6UXhJOzaFew2lAykoQUgLEjEhT+TFG9zmGYUF/N796A4Bp1JAJZagew1mUeIX6bYC/1gdMen3EhP7KxAAAAABJRU5ErkJggg==" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAACXBIWXMAAAsTAAALEwEAmpwYAAABcklEQVR4nKWRS0vDQBSFx78h4r9RcStYXzsX2oWICoIoijt140YQRBeKqy5EBBERLFpaKg1KK21Sa6lKakra5lFrkqZJe0xGo0JdiM5wuXc+5h7mziH45yJeYWomdFWH8WLQ7IVlWL8TqJaqUAUVFbEC6Umi2T27Ig1n27b9LRqtArmHHJhrBlyaQ/w2geBlGLIsIX2XBsMwYNkkIpEYQqEoFEVuFRCEApLJlHORQ4yJ4/gkSBnP85SnWNbhCUSvbhwBpVVAVUooi4+QpQKkIg9NzcPQNUjlAuVFMQ9Fyjv8GbWa/iXgzRM4vMCAfxWTi1uYWdpET98Ejk6j2AucwTe+gunlHfhn19E/uoBIjKM9bi8xzfdfHpvfByFdIJ3DIB1DTt2NubUDDE5tf/ARkHYfSFsvNnbPaY9lNb5G8Kz0nLDrNmVNu4litgghJUDMiNSVH210n6PrJrRX4zM3HW7odWRCGRr34SzKvEx5i8Bf1xtMen3EkspF7wAAAABJRU5ErkJggg==" }, "/content/developers/docs/design-and-ux/dex-design-best-practice/17.png": { "hash": "961bf722", - "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA00lEQVR4nK2QywqCQBSG5wks3PkG9Xq2tY3SpmWPYtE6pGjRBYMWQngKSUO7UchsLP6YA+0CjTrwMT9nmI9zRuDHEp+a8i5xO92QX3NGZdWrLIjDGMEiAK2JiTcxjlFWXeCvfLgDF97YQ38wRKfbA1FYXRBFEfzlEvPZApPJFCNvDKJddUGSJCAipFmG9LBHsJ7hfLmWC4qi4NOyLAghoOs66jWNs2m2+E59aqnAcRx+ZBgGGo0mNE2D3baRblOmdIVv6qNATfJGSsmo/Hw8mb9O8ALmAJIuyfgUgAAAAABJRU5ErkJggg==" + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA1ElEQVR4nK2QywqCQBSG5wks3PkG9nq1tU3SpmWPUtE6JGnRBQMXQjjFkIZ2kSJmY/HnHGgXaNSBj/k5w/k4Mww/FvvUlDeJ6+mKe3YnVFa9yoIojBAsA3CfE9EmwlGk1QXe2sNgNIAzdTAcjdHt9cF5WF0ghIC3WmExX8J1Z5g400Kwqy6I47gY4EjSFMlhj8Cf43zJygV5ntNpWRYYY9B1HfWaRrnZbNGd+tRSgW3bNGQYBkyzAU3T0Gl3kGwTovQJ39RHgdrkjZSSUPn5eBJ/3eAF5gCSLjtBUCEAAAAASUVORK5CYII=" } -} \ No newline at end of file +} diff --git a/src/data/placeholders/content-translatathon-data.json b/src/data/placeholders/content-translatathon-data.json new file mode 100644 index 00000000000..5c592fd8850 --- /dev/null +++ b/src/data/placeholders/content-translatathon-data.json @@ -0,0 +1,10 @@ +{ + "/images/translatathon/participate.png": { + "hash": "37b20b75", + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHCAYAAAABIM1CAAAACXBIWXMAAAsTAAALEwEAmpwYAAABwUlEQVR4nAXB20vTcRjA4a//wCK66QDdRTAoCCqi7CINEUQTNpVoFgQDJ5UaSO3CLcV0YShGEJU0cdA6mDWjyQpiRatYUWLbXAdQl27ObT+ZulXbOz49j1Jle4tlO4+K992sRJMlCS/+lehiXn7HkhKcy8hSIi2F7KrMZ0Ri8byEPsaFf8hjz4QcaDAV1LYjJvS1TdRZe4glcxRLsJJYp/VaAPPCBgPTcXzBGKWSoP3SSE8nmQ2FqDjTgNqyB6Xbf5IKcwsdg71oWhYKfxgeC6EOOam58ZlzD34w/ChC5Oc8qfASZNdx35tE6XahlB6lthoorzlP0PuejXSBopbn8kMNdeoNlQYPje1+XDPLhPJr5OZS5BI5lr9oGGttqE3HUT0WF462Ud6O+lmJrhKJreF0f6P3bpjWvg9Y+r/SPRJk5vsC3vEZXENPScXTJD9luG1/htqhN3Oiys7p+us8GXuNsclB99l+vCMv6LS9pM8+wbjzOa6rt7A2D9FWb8XnfsVguxtTlR2ldJVFtb1ODu5ulGP7jGKoviCdlisy5ZuUm3f8EgwEZMpzXwa6HGIzd8mlFptYmjvkcPlFUZurC/8BDAI6uLFE/KgAAAAASUVORK5CYII=" + }, + "/content/translatathon/participate.png": { + "hash": "37b20b75", + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHCAYAAAABIM1CAAAACXBIWXMAAAsTAAALEwEAmpwYAAABwklEQVR4nA3L20vTcRjA4a//gBHddIDuIhgUBBVRdpFGCKIJm0o0C4KBk0oNpLxwSzFdGIoRRCVNHLQOZs1osoJY0SpWlMxtrgOoSzfntp9M3artHZ+8eC4fpUr2Fkp2HhX3+xmJJIoSWvgrkYWc/I4mxD+blsV4SvKZFZlLi0RjOQl+ign/kCeucTlQZ8yrbUeM6KobqOnoJprIUijCcnyN5us+TPPr9E/F8PijFIuC9ksjNZVgJhik/GwdasseVOn+U5Sbmmgb6EHTMpD/w9BoEHXITtXNL5x/+IOhx2HCP+dIhhYhs4bz/sRG3IVSug1b9ZRVXcDv/sB6Kk9By3HlkYY6/ZYKvYv6Vi+OwBLB3CrZ2STZeJalrxqGagtq03FUt9mBrWWEdyNeliMrhKOr2J3T9NwL0dz7EXPfN7qG/QS+z+MeC+AYfEYyliLxOc0d63PUDp2JkyesnKm9wdPRNxgabHSd68M9/JJ2yyt6reOM2V/guHabjsZBWmo78DhfM9DqxLjxlCqtKKjtNXJwd70c22cQfeVFaTdflUnPhNy66xW/zyeTrgfS32kTi6lTLjdZxNzYJofLLonaXJn/DwwCOrjS+NcZAAAAAElFTkSuQmCC" + } +} \ No newline at end of file diff --git a/src/data/placeholders/content-translatathon-details-data.json b/src/data/placeholders/content-translatathon-details-data.json new file mode 100644 index 00000000000..9a4de7226b2 --- /dev/null +++ b/src/data/placeholders/content-translatathon-details-data.json @@ -0,0 +1,14 @@ +{ + "/content/translatathon/details/unapproved.png": { + "hash": "cd11640f", + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAACCAYAAABR7VzxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAUUlEQVR4nGO4evFi4f/////b2tn/DgwM/L9lyxYQlxD4BSLu3buXzbBo9uyU5traD1LSMvc5ODkfNTY2Prp3796jK1eu4MP3rly58mXfvn3xAFsnZipXW1lWAAAAAElFTkSuQmCC" + }, + "/content/translatathon/details/approved.png": { + "hash": "b244b21b", + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAADCAYAAACasY9UAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAXklEQVR4nGN48+5lXGZWZlxuZm7c/Pnz486dOxf3//9/YnEMw86Dm/5nZKb/V1ZW+R8bF/f/3Llz/4kF9+7d+80we/bM2NOnT8RWVNTFFhUVxZ47d44o/P//fxAdDQDzDJJKzL4RkwAAAABJRU5ErkJggg==" + }, + "/content/translatathon/details/participate.png": { + "hash": "37b20b75", + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHCAYAAAABIM1CAAAACXBIWXMAAAsTAAALEwEAmpwYAAABwUlEQVR4nAXB20vTcRjA4a//wCK66QDdRTAoCCqi7CINEUQTNpVoFgQDJ5UaSO3CLcV0YShGEJU0cdA6mDWjyQpiRatYUWLbXAdQl27ObT+ZulXbOz49j1Jle4tlO4+K992sRJMlCS/+lehiXn7HkhKcy8hSIi2F7KrMZ0Ri8byEPsaFf8hjz4QcaDAV1LYjJvS1TdRZe4glcxRLsJJYp/VaAPPCBgPTcXzBGKWSoP3SSE8nmQ2FqDjTgNqyB6Xbf5IKcwsdg71oWhYKfxgeC6EOOam58ZlzD34w/ChC5Oc8qfASZNdx35tE6XahlB6lthoorzlP0PuejXSBopbn8kMNdeoNlQYPje1+XDPLhPJr5OZS5BI5lr9oGGttqE3HUT0WF462Ud6O+lmJrhKJreF0f6P3bpjWvg9Y+r/SPRJk5vsC3vEZXENPScXTJD9luG1/htqhN3Oiys7p+us8GXuNsclB99l+vCMv6LS9pM8+wbjzOa6rt7A2D9FWb8XnfsVguxtTlR2ldJVFtb1ODu5ulGP7jGKoviCdlisy5ZuUm3f8EgwEZMpzXwa6HGIzd8mlFptYmjvkcPlFUZurC/8BDAI6uLFE/KgAAAAASUVORK5CYII=" + } +} \ No newline at end of file diff --git a/src/data/placeholders/content-translatathon-local-communities-data.json b/src/data/placeholders/content-translatathon-local-communities-data.json new file mode 100644 index 00000000000..dc4856a4c76 --- /dev/null +++ b/src/data/placeholders/content-translatathon-local-communities-data.json @@ -0,0 +1,10 @@ +{ + "/images/translatathon/local-communities.png": { + "hash": "ca3f164d", + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAGCAYAAADKfB7nAAAACXBIWXMAAAsTAAALEwEAmpwYAAABkUlEQVR4nAGGAXn+AAAANPsGFkf8Fw4y/EcdO/zAkZb88svF/LKTm/yok6X86MjX/P/ezfyAcYT8SEp//AAKR/xmV4H8ckxl/BwNOvoAAAA4/xIeU/8ZEjv/gkFW/4Bynv9ih9r/Z2Oh/4CQwP+gj8L/fXfL/1e23P8oTIL/AAA//0s4av81HEj/IRA6/wAABDz/EB9T/0ArTP+FR13/qmp1/7zJ3f+2vtf/697j/9Gvx/+4u+j/0YyL/4Z9o/+fiJP/v2pi/z0qV/86JU7/AAAPTP4NJGD+GR1W/hAVUP5bQGz+o4Cm/pqMrv72+v/+1P///mlkk/7Qk6n+04ah/nhac/5PKkr+ARJQ/ioiWf4ABB5c/xkrbf82S5P/OUqX/4pyrf+nc6f/m6zV/8nv///H4v//Zm/k/6GEtP+5anD/q252/5OHrf9STYL/ABpg/wASLWrmAhhS6D1Hg+hPW5noSFef6FZfp+iPfq3oeIfN6FBguuhPOH/ofExw6MN3cOj/n3Ho35d/6FxKdOkAFFjkuY/d0S+D+hoAAAAASUVORK5CYII=" + }, + "/content/translatathon/local-communities/local-communities.png": { + "hash": "ca3f164d", + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAGCAYAAADKfB7nAAAACXBIWXMAAAsTAAALEwEAmpwYAAABkUlEQVR4nAGGAXn+AAAANPsGFkf8Fw4y/EcdO/zAkZb88svF/LKTm/yok6X86MjX/P/ezfyAcYT8SEp//AAKR/xmV4H8ckxl/BwNOvoAAAA4/xIeU/8ZEjv/gkFW/4Bynv9ih9r/Z2Oh/4CQwP+gj8L/fXfL/1e23P8oTIL/AAA//0s4av81HEj/IRA6/wAABDz/EB9T/0ArTP+FR13/qmp1/7zJ3f+2vtf/697j/9Gvx/+4u+j/0YyL/4Z9o/+fiJP/v2pi/z0qV/86JU7/AAAPTP4NJGD+GR1W/hAVUP5bQGz+o4Cm/pqMrv72+v/+1P///mlkk/7Qk6n+04ah/nhac/5PKkr+ARJQ/ioiWf4ABB5c/xkrbf82S5P/OUqX/4pyrf+nc6f/m6zV/8nv///H4v//Zm/k/6GEtP+5anD/q252/5OHrf9STYL/ABpg/wASLWrmAhhS6D1Hg+hPW5noSFef6FZfp+iPfq3oeIfN6FBguuhPOH/ofExw6MN3cOj/n3Ho35d/6FxKdOkAFFjkuY/d0S+D+hoAAAAASUVORK5CYII=" + } +} \ No newline at end of file diff --git a/src/intl/en/page-translatathon.json b/src/intl/en/page-translatathon.json new file mode 100644 index 00000000000..5d82fb5aff1 --- /dev/null +++ b/src/intl/en/page-translatathon.json @@ -0,0 +1,4 @@ +{ + "translatathon-apply-now": "Take part in the Translatathon", + "translatathon-apply-now-desc": "Apply now to participate in the Translatathon" +} \ No newline at end of file diff --git a/src/layouts/Static.tsx b/src/layouts/Static.tsx index 5784caa0ab9..b111623d0be 100644 --- a/src/layouts/Static.tsx +++ b/src/layouts/Static.tsx @@ -28,6 +28,7 @@ import MeetupList from "@/components/MeetupList" import Text from "@/components/OldText" import SocialListItem from "@/components/SocialListItem" import TableOfContents from "@/components/TableOfContents" +import { TranslatathonBanner } from "@/components/Translatathon/TranslatathonBanner" import Translation from "@/components/Translation" import TranslationChartImage from "@/components/TranslationChartImage" import UpcomingEventsList from "@/components/UpcomingEventsList" @@ -93,6 +94,7 @@ export const StaticLayout = ({ return ( + { + return ( + + {children} + + robot + + + ) +} + +const TwoColumnContent = (props: ChildOnlyProp) => ( + +) + +const WhyWeDoItColumn = (props: ChildOnlyProp) => ( + + + + + {props.children} + +) + +const HowDoesItWorkColumn = (props: ChildOnlyProp) => ( + + + + + {props.children} + +) + +const CardContent = (props: ChildOnlyProp) => ( + + {props.children} + +) + +const CardContainer = (props: ChildOnlyProp) => ( + + {props.children} + +) + +const EmojiCard = ({ emoji, title, description }) => ( + +) + +// Translatathon layout components +export const translatathonComponents = { + // Export empty object if none needed + ApplyNow, + CardContainer, + CardContent, + ContentSplit, + DatesAndTimeline, + EmojiCard, + HowDoesItWorkColumn, + LocalCommunitiesList, + StepByStepInstructions, + TranslatathonCalendar, + TranslationHubCallout, + TranslatathonInANutshell, + TwoColumnContent, + WhyWeDoItColumn, +} + +type TranslatathonLayoutProps = ChildOnlyProp & + Pick & { + frontmatter: SharedFrontmatter + } + +export const TranslatathonLayout = ({ + children, + frontmatter, + slug, + tocItems, +}: TranslatathonLayoutProps) => { + const lgBp = useToken("breakpoints", "lg") + + const dropdownLinks: ButtonDropdownList = { + text: "Translatathon menu", + ariaLabel: "Translatathon menu", + items: [ + { + text: "Translatathon", + href: "/translatathon", + matomo: { + eventCategory: "translatathon menu", + eventAction: "click", + eventName: "translatathon hub", + }, + }, + { + text: "Details and submission criteria", + href: "/translatathon/details", + matomo: { + eventCategory: "translatathon menu", + eventAction: "click", + eventName: "details and submission criteria", + }, + }, + { + text: "Terms and conditions", + href: "/translatathon/terms-and-conditions", + matomo: { + eventCategory: "translatathon menu", + eventAction: "click", + eventName: "terms and conditions", + }, + }, + // TODO: Add back in when this page is ready + // { + // text: "Local communities", + // to: "/translatathon/local-communities", + // matomo: { + // eventCategory: "translatathon menu", + // eventAction: "click", + // eventName: "local communities", + // }, + // }, + ], + } + + return ( + + + + Welcome to the ethereum.org Translatathon! + + The translatathon is a competitive hackathon-style event where you + can compete for prizes by translating ethereum.org content into + different languages. + + + Apply to translate + + + } + heroImg={"/images/heroes/translatathon-hero.svg"} + blurDataURL={""} + /> + + + {children} + + + + + + ) +} diff --git a/src/layouts/index.ts b/src/layouts/index.ts index 899db348774..1c76c89f4e7 100644 --- a/src/layouts/index.ts +++ b/src/layouts/index.ts @@ -3,6 +3,7 @@ export * from "./Docs" export * from "./Roadmap" export * from "./Staking" export * from "./Static" +export * from "./Translatathon" export * from "./Tutorial" export * from "./Upgrade" export * from "./UseCases" diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 0400b8a3e45..6fb77b22af1 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -53,6 +53,7 @@ export const TOTAL_QUIZ_AVERAGE_SCORE = 67.4 export const TOTAL_QUIZ_RETRY_RATE = 15.6 // Crowdin +export const CROWDIN_PROJECT_URL = "https://crowdin.com/project/ethereum-org" export const CROWDIN_PROJECT_ID = 363359 export const CROWDIN_API_MAX_LIMIT = 500 export const FIRST_CROWDIN_CONTRIBUTION_DATE = "2019-07-01T00:00:00+00:00" diff --git a/src/lib/types.ts b/src/lib/types.ts index b0a9bc7252f..b7faea71248 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -455,6 +455,10 @@ export type CommonHeroProps< * Preface text about the content in the given page */ description: ReactNode + /** + * The maximum height of the image in the hero + */ + maxHeight?: string } // Learning Tools diff --git a/src/lib/utils/md.ts b/src/lib/utils/md.ts index f069ffad664..06d08b525ea 100644 --- a/src/lib/utils/md.ts +++ b/src/lib/utils/md.ts @@ -242,6 +242,9 @@ const getPostSlugs = (dir: string, files: string[] = []) => { "/contributing/translation-program/playbook", "/contributing/translation-program/resources", "/contributing/translation-program/translatathon", + "/contributing/translation-program/translatathon/details", + "/contributing/translation-program/translatathon/local-communities", + "/contributing/translation-program/translatathon/terms-and-conditions", "/contributing/translation-program/translators-guide", "/cookie-policy", "/eips", @@ -272,6 +275,7 @@ const getPostSlugs = (dir: string, files: string[] = []) => { "/security", "/smart-contracts", "/staking/dvt", + "/terms-of-use", "/web3", "/whitepaper", diff --git a/src/lib/utils/translations.ts b/src/lib/utils/translations.ts index 780de148a9d..69dafc7003d 100644 --- a/src/lib/utils/translations.ts +++ b/src/lib/utils/translations.ts @@ -172,6 +172,10 @@ const getRequiredNamespacesForPath = (relativePath: string) => { primaryNamespace = "page-layer-2" } + if (path.startsWith("/contributing/translation-program/translatathon/")) { + primaryNamespace = "page-translatathon" + } + // Glossary tooltips if ( path.startsWith("/dapps/") || diff --git a/src/pages/[...slug].tsx b/src/pages/[...slug].tsx index 3451632a25d..acc86589ceb 100644 --- a/src/pages/[...slug].tsx +++ b/src/pages/[...slug].tsx @@ -48,6 +48,8 @@ import { StakingLayout, staticComponents, StaticLayout, + translatathonComponents, + TranslatathonLayout, TutorialLayout, tutorialsComponents, upgradeComponents, @@ -71,6 +73,7 @@ export const layoutMapping = { roadmap: RoadmapLayout, upgrade: UpgradeLayout, docs: DocsLayout, + translatathon: TranslatathonLayout, tutorial: TutorialLayout, } @@ -81,6 +84,7 @@ const componentsMapping = { roadmap: roadmapComponents, upgrade: upgradeComponents, docs: docsComponents, + translatathon: translatathonComponents, tutorial: tutorialsComponents, } as const diff --git a/src/pages/index.tsx b/src/pages/index.tsx index c6c2dca43e7..ba4ef4e4847 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -33,6 +33,7 @@ import LazyLoadComponent from "@/components/LazyLoadComponent" import MainArticle from "@/components/MainArticle" import PageMetadata from "@/components/PageMetadata" import TitleCardList from "@/components/TitleCardList" +import { TranslatathonBanner } from "@/components/Translatathon/TranslatathonBanner" import Translation from "@/components/Translation" import { existsNamespace } from "@/lib/utils/existsNamespace" @@ -253,7 +254,7 @@ const HomePage = ({ metricResults, }: InferGetStaticPropsType) => { const { t } = useTranslation(["common", "page-index"]) - const { locale } = useRouter() + const { locale, asPath } = useRouter() const [isModalOpen, setModalOpen] = useState(false) const [activeCode, setActiveCode] = useState(0) const dir = isLangRightToLeft(locale as Lang) ? "rtl" : "ltr" @@ -367,6 +368,7 @@ const HomePage = ({ title={t("page-index:page-index-meta-title")} description={t("page-index:page-index-meta-description")} /> +