From a1677094f73e54e4d34fbd9b2b674996264d34d1 Mon Sep 17 00:00:00 2001 From: Ben Grant Date: Mon, 24 May 2021 21:28:19 +1000 Subject: [PATCH] German language, and dayjs i18n --- crabfit-frontend/public/fonts/molot.woff | Bin 2864 -> 7828 bytes crabfit-frontend/public/fonts/molot.woff2 | Bin 2052 -> 5672 bytes crabfit-frontend/public/fonts/samuraibob.woff | Bin 2808 -> 5864 bytes .../public/fonts/samuraibob.woff2 | Bin 2100 -> 4372 bytes crabfit-frontend/public/i18n/de/common.json | 58 ++++++++++++++++ crabfit-frontend/public/i18n/de/event.json | 63 ++++++++++++++++++ .../public/i18n/{en-US => de}/help.json | 0 crabfit-frontend/public/i18n/de/home.json | 57 ++++++++++++++++ .../public/i18n/{en-US => de}/privacy.json | 0 .../public/i18n/{en-US => en}/common.json | 6 +- .../public/i18n/{en-US => en}/event.json | 0 crabfit-frontend/public/i18n/en/help.json | 23 +++++++ .../public/i18n/{en-US => en}/home.json | 0 crabfit-frontend/public/i18n/en/privacy.json | 52 +++++++++++++++ crabfit-frontend/public/i18n/ko/common.json | 6 +- crabfit-frontend/public/robots.txt | 1 + .../AvailabilityViewer/AvailabilityViewer.tsx | 4 +- .../availabilityViewerStyle.ts | 2 + .../src/components/Button/buttonStyle.ts | 4 -- .../CalendarField/CalendarField.tsx | 24 +++++-- .../src/components/Settings/Settings.tsx | 10 +-- .../ToggleField/toggleFieldStyle.ts | 4 ++ crabfit-frontend/src/i18n/index.ts | 2 +- crabfit-frontend/src/pages/Event/Event.tsx | 10 ++- crabfit-frontend/src/res/dayjs_locales.json | 1 + 25 files changed, 298 insertions(+), 29 deletions(-) create mode 100644 crabfit-frontend/public/i18n/de/common.json create mode 100644 crabfit-frontend/public/i18n/de/event.json rename crabfit-frontend/public/i18n/{en-US => de}/help.json (100%) create mode 100644 crabfit-frontend/public/i18n/de/home.json rename crabfit-frontend/public/i18n/{en-US => de}/privacy.json (100%) rename crabfit-frontend/public/i18n/{en-US => en}/common.json (93%) rename crabfit-frontend/public/i18n/{en-US => en}/event.json (100%) create mode 100644 crabfit-frontend/public/i18n/en/help.json rename crabfit-frontend/public/i18n/{en-US => en}/home.json (100%) create mode 100644 crabfit-frontend/public/i18n/en/privacy.json create mode 100644 crabfit-frontend/src/res/dayjs_locales.json diff --git a/crabfit-frontend/public/fonts/molot.woff b/crabfit-frontend/public/fonts/molot.woff index 831ef3fb25d81d2547b674b3c3ef9e771fd5ad84..a73dbb1f3cfd5164f5041b0ab236cab4b8df2f6a 100644 GIT binary patch delta 7150 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 delta 2043 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 delta 2098 zcmXYxc{r4N8^@oSVKRzFwi&|EhKMm)LK#9*$x@b($1KP)Xsp$1kR^u`B^pd}hN2>2 zluls`#jy_RO~{trI0?xT^FH3I-*tVi`}%(G@BRG#d4Bh__NuH*6XF{Lc}yr%0adCKN2l1=n-0y2oP{!Czd`#3Ml*aM z^8x@Mc0ll*o=433QN1Yuu)_li=|dRoeEJ;k2bqv}57Ib@{it@4X}_SbD9GbL+6IE6 z-wG@T29vjQzaWi;IEu!hr-Qtspo_&Ykj8BTBLMj{?;tAV83DjSSSoaJzwzhf7a_s) zFaSU`L7^KEW3+Lt&5)~9Xjq(>3BqI;{mH@UPy=Xxj3#c^L7G!>R6iM{fZzy>gva@i zKoJWR&Ih)H0Yn}Hr?z`Oi@q!_x0TB?PW{M?i*r!6Ab3%1$Rr{nt%Vie$|m97JzG!K zp7&BfAlwyBDxH<6!qYV}96?Y7n9&rE-Tnp$`ow}*B*PksW+KM%@oQSUB*066IuAkl zuBWbRq-R8^(G$TZ=xW)IIPzU?xoj>8&0JOf)uL(a1&u^)$F;<0t2?w@gX@HENz$B4&NpXM&Wd;s-DyWtLNQ584 zuj(m$9L6}FY38^0l+63#ywCOhwY3Ai^I!5aC=cwibq~*#dV2BV#cWGk_iF62jql0L zkTJl>zfTOMT4=tyGWPz@hK_dEEY`T77^`Uekd7X0Z z>h~8m76a%T^KIH+0rdlzsRQ4>Z=f5s21R9I`+05Zs{5~I%fB%<8OyR{=TP+)#8I?d zHggVTAm^Yt5ToktDj^)M@#U2jZ`a@uN3P=1 z_OQUxQoY}McUxWwre5gerUah|ifxFQ*o{kI=$MNdm!FD06s1+%S6vL}?Zagn=!ope zy>|XWvvHM+MuOFZ%kcg4UE-d$Hc#_!Uqsz!$P$m zVSJzvAB@DP&T){E;Y}@~yA!i+mb!U+hQ7HwwN@QI^ew?t0G4c!9KGNx&BLpwqaBrn zd&>W!hc#VJ>)g`v+IKIQ$yLdhs)7N*nZFhtZf(mtM=y1#bKgzKYBv7stK#8>eQ|TK=C#}_XZIGPB^RVh?|^So!-t^^)0bVW z*&avX`jkl;GNy5D>z9u_=aApR^>Ka4XY!ZxK$lw?1-hK>h_$1A){C?|lSTi`jWZ%P zzs&Rs0S$-c3gGwS2gY(H32tB4g6i~I=(@4o94cHAw{CZNVNv*SO9&pJNQhoNhG7!f z0HJN?CbT$y&z;#AZsKwk)`h*oZ|#Y@h*B~*6j11gtb_X38b^50w%mmV*f|ndSLOpO zn^}#uWI8?CVvst)1y~B9j0A!bR{XT)IE)R!G>KGTREW!1N#f&pJEbrV*1qny3RDuGp=(y}n=&SU?qkXVyt$8F#yE;SMtI>rKdyw2LmLhTu7s zy4VATNORPDzxudAM|YC7c60m?oBB+-!D_eEX55PTGSDr}nSB#!=Z|zoH@0s+xL&v9 z+gS_9g&-6)vjP5;Vui&Y&P{T6YtSz%QVx$|^rGbQ8!G?U*`-$IoH+HOypa)j)D|WjxgC02`35JXrBkUWG*xu`xTr>yy7 zacxIn_`N4rLJdb~=^v{E=4OgLRGXgfUWJ8y)r^$sE8#5EeEy7Xk%cgmP->dX6JGey zan}FF#`{lT;6Rg7XnE>nIz4}~jCrwZ?Rs|oS@PSi$K%2d?H2y9Zc#9?nf23mkTVok z+u2uIRdTidgtLip`cuka))D$-f`^QKlkr2fC%EXv<=M-*A7+KKOGqnULAPY`f95*v zY8YR8i@*6V!1m&DtDyfQsO61hJW(cL6ic*!8$bm0lkJkDBY9vD8w6vCYY%!SMxv5e4oky diff --git a/crabfit-frontend/public/fonts/samuraibob.woff2 b/crabfit-frontend/public/fonts/samuraibob.woff2 index 69f0a9336d70365a6a11b6715643711d8f29db98..8d3b194089ce42b5f5bd6c37b1ca551a00af5fc9 100644 GIT binary patch literal 4372 zcmV+v5$o=EPew8T0RR9101*@b5C8xG05HG+01&bO0RR9100000000000000000000 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.", + "shareinfo_alt": "Klicken Sie auf den link oben, um ihn in Ihre zwischenablage zu kopieren oder per <1>E-Mail zu teilen.", + "email_subject": "Ablaufplanung {{event_name}}", + "email_body": "Besuchen Sie diesen link, um Ihre Verfügbarkeiten einzugeben:" + }, + "form": { + "signed_out": "Melden Sie sich an, um Ihre Verfügbarkeit hinzuzufügen", + "signed_in": "Als {{name}} angemeldet", + + "name": "Dein Name", + "password": "Passwort (optional)", + "button": "Anmeldung", + "info": "Diese angaben gelten nur für diese veranstaltung. Verwenden Sie ein Passwort, um zu verhindern, dass andere Ihre Verfügbarkeit ändern.", + + "timezone": "Deine Zeitzone", + + "errors": { + "password_incorrect": "Passwort ist inkorrekt. Überprüfen Sie, ob Ihr name richtig geschrieben ist.", + "unknown": "Einloggen fehlgeschlagen. Bitte versuche es erneut." + }, + + "created_in_timezone": "Diese veranstaltung wurde in der zeitzone {{timezone}} erstellt. <3>Klicken Sie hier um es zu verwenden.", + "local_timezone": "Ihre lokale zeitzone wird als {{timezone}} erkannt. <3>Klicken Sie hier um es zu verwenden." + }, + "offline": { + "title": "Du bist offline", + "body": "Ein Crab Fit funktioniert nicht offline.
Stellen Sie sicher, dass Sie mit dem internet verbunden sind, und versuchen Sie es erneut." + }, + "error": { + "title": "Event nicht gefunden", + "body": "Überprüfen Sie, ob die von Ihnen eingegebene URL korrekt ist." + }, + + "tabs": { + "you": "Ihre Verfügbarkeit", + "you_tooltip": "Melden Sie sich an, um Ihre Verfügbarkeit festzulegen", + "group": "Gruppenverfügbarkeit" + }, + + "group": { + "legend_tooltip": "Klicken Sie hier, um die höchste Verfügbarkeit hervorzuheben", + "info1": "Bewegen Sie den Mauszeiger oder tippen Sie auf den Kalender unten, um zu sehen, wer verfügbar ist", + "info2": "Klicken Sie auf die Namen unten, um die Personen einzeln anzuzeigen" + }, + + "you": { + "info": "Klicken und ziehen Sie den Kalender unten, um Ihre Verfügbarkeit festzulegen", + "google_cal": { + "login": "Mit Google Kalender synchronisieren", + "logout": "ausloggen", + "select_all": "Wählen Sie Alle", + "select_none": "Wählen Sie keine", + "info": "Durch den Import wird Ihre aktuelle Verfügbarkeit überschrieben", + "button": "Verfügbarkeit importieren" + } + } +} diff --git a/crabfit-frontend/public/i18n/en-US/help.json b/crabfit-frontend/public/i18n/de/help.json similarity index 100% rename from crabfit-frontend/public/i18n/en-US/help.json rename to crabfit-frontend/public/i18n/de/help.json diff --git a/crabfit-frontend/public/i18n/de/home.json b/crabfit-frontend/public/i18n/de/home.json new file mode 100644 index 0000000..abb4eaf --- /dev/null +++ b/crabfit-frontend/public/i18n/de/home.json @@ -0,0 +1,57 @@ +{ + "create": "ERSTELLEN SIE EIN", + "recently_visited": "Kürzlich besucht", + "nav": { + "about": "Info", + "donate": "Spenden" + }, + "form": { + "name": { + "label": "Geben Sie Ihrer veranstaltung einen namen!", + "sublabel": "Oder lassen Sie das feld leer, um eine zu generieren" + }, + "dates": { + "label": "Welche saten könnten funktionieren?", + "sublabel": "Klicken und ziehen Sie zur auswahl", + "options": { + "specific": "Bestimmte daten", + "week": "Tage der woche" + }, + "tooltips": { + "previous": "Vorheriger monat", + "next": "Nächsten monat", + "today": "heute" + } + }, + "times": { + "label": "Welche zeiten könnten funktionieren?", + "sublabel": "Klicken und ziehen Sie, um einen zeitbereich auszuwählen" + }, + "timezone": { + "label": "Und die zeitzone", + "defaultOption": "Wählen..." + }, + + "button": "Erstellen", + "errors": { + "no_dates": "Es sind keine daten ausgewählt", + "same_times": "Die startzeiten und endzeiten können nicht gleich sein", + "no_time": "Es ist keine zeit ausgewählt", + "unknown": "Etwas ist schief gelaufen. Bitte versuchen Sie es später noch einmal." + } + }, + "offline": "Sie können keine Crab Fit erstellen, wenn Sie keine internetverbindung haben. Bitte stellen Sie sicher, dass Sie verbunden sind.", + + "about": { + "name": "Über Crab Fit", + "events": "Events erstellt", + "availabilities": "Verfügbarkeit eingegeben", + "content": { + "p1": "Crab Fit hilft Ihnen dabei, Ihre veranstaltung an die zeitpläne aller anzupassen. Erstellen Sie einfach oben eine veranstaltung und senden Sie den link an alle teilnehmer. Die ergebnisse werden live aktualisiert und Sie können eine Heatmap sehen, wann alle frei sind.<1/><2>Erfahren Sie mehr über Crab Fit.", + "p2": "Viele Crab Fits erstellen? Holen Sie sich die <1>Chrome-Erweiterung oder <3>Firefox-Erweiterung für Ihren browser! Sie können die <5>Android-App auch unterwegs auf Crab Fit herunterladen.", + "p3": "Crab Fit wurde von <1>Ben Grant entwickelt und ist die moderne lösung für Ihre debatten zur planung von gruppenveranstaltungen.", + "p4": "Der code für Crab Fit ist open source. Wenn sie probleme finden oder einen beitrag leisten möchten, können Sie das <1>repository besuchen. Durch die verwendung von Crab Fit stimmen sie den <3>datenschutzbestimmungen.", + "p5": "Crab Fit kostet mehr als $100 pro monat. Erwägen sie unten zu spenden, wenn es Ihnen geholfen hat, damit es für alle kostenlos bleibt. 🦀" + } + } +} diff --git a/crabfit-frontend/public/i18n/en-US/privacy.json b/crabfit-frontend/public/i18n/de/privacy.json similarity index 100% rename from crabfit-frontend/public/i18n/en-US/privacy.json rename to crabfit-frontend/public/i18n/de/privacy.json diff --git a/crabfit-frontend/public/i18n/en-US/common.json b/crabfit-frontend/public/i18n/en/common.json similarity index 93% rename from crabfit-frontend/public/i18n/en-US/common.json rename to crabfit-frontend/public/i18n/en/common.json index 22bfe06..dbc4006 100644 --- a/crabfit-frontend/public/i18n/en-US/common.json +++ b/crabfit-frontend/public/i18n/en/common.json @@ -52,11 +52,7 @@ } }, "language": { - "label": "Language", - "options": { - "en-US": "English (US)", - "ko": "Korean" - } + "label": "Language" } } } diff --git a/crabfit-frontend/public/i18n/en-US/event.json b/crabfit-frontend/public/i18n/en/event.json similarity index 100% rename from crabfit-frontend/public/i18n/en-US/event.json rename to crabfit-frontend/public/i18n/en/event.json diff --git a/crabfit-frontend/public/i18n/en/help.json b/crabfit-frontend/public/i18n/en/help.json new file mode 100644 index 0000000..4d0f1c7 --- /dev/null +++ b/crabfit-frontend/public/i18n/en/help.json @@ -0,0 +1,23 @@ +{ + "name": "How to Crab Fit", + + "p1": "Crab Fit is a tool that helps you when planning events with friends or coworkers. You just create an event, enter your availability, send it out, and see when everyone is free!", + "p2": "See below for detailed steps of how to Crab Fit your event.", + + "s1": "Step 1", + + "p3": "Use the form at <1>crab.fit to make a new event. You only need to put in the rough time period for when your event occurs here, not your availability.", + "p4": "For example, we'll use \"Jenny's Birthday Lunch\". Jenny wants her birthday lunch to happen on the same week as her birthday, the 15th of April, but she knows that not all of her friends are available on the 15th. She also doesn't want to do it on the weekend.", + "p5": "Jenny also knows that since it's a lunch event, it can't start before 11am or go any later than 5pm.", + + "s2": "Step 2", + + "p6": "Enter your availability for the event you just created.", + "p7": "In our example, Jenny now puts in her availability for her birthday lunch. She is free all week, except after 3pm on Tuesday and Wednesday, and before 1pm on Friday.", + + "s3": "Step 3", + + "p8": "Send the link to everyone you want to come.", + "p9": "After Jenny has sent the link to her friends and waited for them to also fill out their availabilities, she can now easily see them all on the heatmap below and choose the darkest area for a time that suits everyone!", + "p10": "In this example, 1pm to 3pm on Friday the 16th works for all Jenny's friends." +} diff --git a/crabfit-frontend/public/i18n/en-US/home.json b/crabfit-frontend/public/i18n/en/home.json similarity index 100% rename from crabfit-frontend/public/i18n/en-US/home.json rename to crabfit-frontend/public/i18n/en/home.json diff --git a/crabfit-frontend/public/i18n/en/privacy.json b/crabfit-frontend/public/i18n/en/privacy.json new file mode 100644 index 0000000..0f7f917 --- /dev/null +++ b/crabfit-frontend/public/i18n/en/privacy.json @@ -0,0 +1,52 @@ +{ + "name": "Privacy Policy", + + "p1": "This SERVICE is provided by Benjamin Grant at no cost and is intended for use as is.", + "p2": "This page is used to inform visitors regarding the policies of the collection, use, and disclosure of Personal Information if using the Service.", + "p3": "If you choose to use the Service, then you agree to the collection and use of information in relation to this policy. The Personal Information that is collected is used for providing and improving the Service. Your information will not be used or shared with anyone except as described in this Privacy Policy.", + + "h1": "Information Collection and Use", + + "p4": "The Service uses third party services that may collect information used to identify you.", + "p5": "Links to privacy policies of the third party service providers used by the Service:", + "link": "Google Play Services", + + "h2": "Log Data", + + "p6": "When you use the Service, in the case of an error, data and information is collected to improve the Service, which may include your IP address, device name, operating system version, app configuration and the time and date of the error.", + + "h3": "Cookies", + + "p7": "Cookies are files with a small amount of data that are commonly used as anonymous unique identifiers. These are sent to your browser from the websites that you visit and are stored on your device's internal memory.", + "p8": "Cookies are used by Google Analytics to track you across the web and provide anonymous statistics to improve the Service.", + + "h4": "Service Providers", + + "p9": "Third-party companies may be employed for the following reasons:", + "l1": "To facilitate the Service", + "l2": "To provide the Service on our behalf", + "l3": "To perform Service-related services", + "l4": "To assist in analyzing how the Service is used", + "p10": "To perform these tasks, the third parties may have access to your Personal Information, but are obligated not to disclose or use this information for any purpose except the above.", + + "h5": "Security", + + "p11": "Personal Information that is shared via the Service is protected, however remember that no method of transmission over the internet, or method of electronic storage is 100% secure and reliable, so take care when sharing Personal Information.", + + "h6": "Links to Other Sites", + + "p12": "The Service may contain links to other sites. If you click on a third-party link, you will be directed to that site. Note that these external sites are not operated by the Service. Therefore, you are advised to review the Privacy Policy of these websites.", + + "h7": "Children's Privacy", + + "p13": "The Service does not address anyone under the age of 13. Personally identifiable information is not knowingly collected from children under 13. If discovered that a child under 13 has provided the Service with personal information, such information will be immediately deleted from the servers. If you are a parent or guardian and you are aware that your child has provided the Service with personal information, please <1>contact us so that this information can be removed.", + + "h8": "Changes to This Privacy Policy", + + "p14": "This Privacy Policy may be updated from time to time. Thus, you are advised to review this page periodically for any changes.", + "p15": "This policy is effective as of 2021-04-20", + + "h9": "Contact Us", + + "p16": "If you have any questions or suggestions about the Privacy Policy, do not hesitate to contact us at <1>benjamin.grantGRA0007+crabfit@gmail.com." +} diff --git a/crabfit-frontend/public/i18n/ko/common.json b/crabfit-frontend/public/i18n/ko/common.json index d785643..4093d08 100644 --- a/crabfit-frontend/public/i18n/ko/common.json +++ b/crabfit-frontend/public/i18n/ko/common.json @@ -52,11 +52,7 @@ } }, "language": { - "label": "언어", - "options": { - "en-US": "영어 (미국)", - "ko": "한국어" - } + "label": "언어" } } } diff --git a/crabfit-frontend/public/robots.txt b/crabfit-frontend/public/robots.txt index 87728cb..744c9e2 100644 --- a/crabfit-frontend/public/robots.txt +++ b/crabfit-frontend/public/robots.txt @@ -3,6 +3,7 @@ User-agent: * Allow: /$ Allow: /how-to$ Allow: /privacy$ +Allow: /sitemap.xml$ Disallow: * sitemap: https://crab.fit/sitemap.xml diff --git a/crabfit-frontend/src/components/AvailabilityViewer/AvailabilityViewer.tsx b/crabfit-frontend/src/components/AvailabilityViewer/AvailabilityViewer.tsx index d9f22d0..fb9cf70 100644 --- a/crabfit-frontend/src/components/AvailabilityViewer/AvailabilityViewer.tsx +++ b/crabfit-frontend/src/components/AvailabilityViewer/AvailabilityViewer.tsx @@ -70,10 +70,10 @@ const AvailabilityViewer = ({ total={people.filter(p => p.availability.length > 0).length} onSegmentFocus={count => setFocusCount(count)} /> -
{t('event:group.info1')}
+
{t('event:group.info1')}
{people.length > 1 && ( <> -
{t('event:group.info2')}
+
{t('event:group.info2')}
{people.map((person, i) => props.filtered && ` background: ${props.theme.primary}; diff --git a/crabfit-frontend/src/components/Button/buttonStyle.ts b/crabfit-frontend/src/components/Button/buttonStyle.ts index 6bac31d..7a31fcb 100644 --- a/crabfit-frontend/src/components/Button/buttonStyle.ts +++ b/crabfit-frontend/src/components/Button/buttonStyle.ts @@ -29,14 +29,10 @@ export const Top = styled.button` left: 0; user-select: none; transition: top .15s; - outline: none; &:active { top: 0; } - &:focus-visible { - filter: brightness(1.2); - } ${props => props.isLoading && ` text-shadow: none; diff --git a/crabfit-frontend/src/components/CalendarField/CalendarField.tsx b/crabfit-frontend/src/components/CalendarField/CalendarField.tsx index 9b9cd66..e1f4a1b 100644 --- a/crabfit-frontend/src/components/CalendarField/CalendarField.tsx +++ b/crabfit-frontend/src/components/CalendarField/CalendarField.tsx @@ -19,6 +19,8 @@ import { Day, } from './calendarFieldStyle'; +import supportedLocales from 'res/dayjs_locales.json'; + dayjs.extend(isToday); dayjs.extend(localeData); dayjs.extend(updateLocale); @@ -55,7 +57,7 @@ const CalendarField = ({ ...props }) => { const weekStart = useSettingsStore(state => state.weekStart); - const { t } = useTranslation('home'); + const { t, i18n } = useTranslation('home'); const [type, setType] = useState(0); @@ -88,14 +90,22 @@ const CalendarField = ({ }; useEffect(() => { - if (weekStart !== dayjs.Ls.en.weekStart) { - dayjs.updateLocale('en', { - weekStart: weekStart, - weekdaysShort: weekStart ? 'Mon_Tue_Wed_Thu_Fri_Sat_Sun'.split('_') : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + let lang = i18n.language; + if (Array.from(supportedLocales).includes(i18n.language)) { + require(`dayjs/locale/${i18n.language}`); + dayjs.locale(i18n.language); + lang = i18n.language; + } else { + // Fallback + lang = 'en'; + } + if (weekStart !== dayjs.Ls[lang].weekStart) { + dayjs.updateLocale(lang, { + weekStart, }); } setDates(calculateMonth(month, year, weekStart)); - }, [weekStart, month, year]); + }, [weekStart, month, year, i18n.language]); return ( @@ -155,7 +165,7 @@ const CalendarField = ({ - {dayjs.weekdaysShort().map(name => + {(weekStart ? [...dayjs.weekdaysShort().filter((_,i) => i !== 0), dayjs.weekdaysShort()[0]] : dayjs.weekdaysShort()).map(name => {name} )} diff --git a/crabfit-frontend/src/components/Settings/Settings.tsx b/crabfit-frontend/src/components/Settings/Settings.tsx index fd01276..704d0cf 100644 --- a/crabfit-frontend/src/components/Settings/Settings.tsx +++ b/crabfit-frontend/src/components/Settings/Settings.tsx @@ -88,10 +88,12 @@ const Settings = () => { label={t('options.language.label')} name="language" id="language" - options={i18n.language === 'cimode' ? { - cimode: 'DEV', - english: 'en-US' - } : t('options.language.options', { returnObjects: true })} + options={{ + 'en': 'English (US)', + 'de': 'Deutsch', + 'ko': '한국어', + ...process.env.NODE_ENV !== 'production' && { 'cimode': 'DEV' }, + }} small value={i18n.language} onChange={event => i18n.changeLanguage(event.target.value)} diff --git a/crabfit-frontend/src/components/ToggleField/toggleFieldStyle.ts b/crabfit-frontend/src/components/ToggleField/toggleFieldStyle.ts index 6bfde63..461676d 100644 --- a/crabfit-frontend/src/components/ToggleField/toggleFieldStyle.ts +++ b/crabfit-frontend/src/components/ToggleField/toggleFieldStyle.ts @@ -9,6 +9,10 @@ export const ToggleContainer = styled.div` border: 1px solid ${props => props.theme.primary}; border-radius: 3px; overflow: hidden; + &:focus-within { + outline: Highlight auto 1px; + outline: -webkit-focus-ring-color auto 1px; + } `; export const StyledLabel = styled.label` diff --git a/crabfit-frontend/src/i18n/index.ts b/crabfit-frontend/src/i18n/index.ts index 399bb14..890a9c6 100644 --- a/crabfit-frontend/src/i18n/index.ts +++ b/crabfit-frontend/src/i18n/index.ts @@ -8,7 +8,7 @@ i18n .use(Backend) .use(initReactI18next) .init({ - fallbackLng: 'en-US', + fallbackLng: 'en', debug: process.env.NODE_ENV !== 'production', interpolation: { escapeValue: false, diff --git a/crabfit-frontend/src/pages/Event/Event.tsx b/crabfit-frontend/src/pages/Event/Event.tsx index 30b27a6..ff56ab7 100644 --- a/crabfit-frontend/src/pages/Event/Event.tsx +++ b/crabfit-frontend/src/pages/Event/Event.tsx @@ -39,6 +39,7 @@ import { useSettingsStore, useRecentsStore } from 'stores'; import logo from 'res/logo.svg'; import timezones from 'res/timezones.json'; +import supportedLocales from 'res/dayjs_locales.json'; dayjs.extend(utc); dayjs.extend(timezone); @@ -51,7 +52,7 @@ const Event = (props) => { const addRecent = useRecentsStore(state => state.addRecent); - const { t } = useTranslation(['common', 'event']); + const { t, i18n } = useTranslation(['common', 'event']); const { register, handleSubmit } = useForm(); const { id } = props.match.params; @@ -74,6 +75,13 @@ const Event = (props) => { const [copied, setCopied] = useState(null); + useEffect(() => { + if (Array.from(supportedLocales).includes(i18n.language)) { + require(`dayjs/locale/${i18n.language}`); + dayjs.locale(i18n.language); + } + }, [i18n.language]); + useEffect(() => { const fetchEvent = async () => { try { diff --git a/crabfit-frontend/src/res/dayjs_locales.json b/crabfit-frontend/src/res/dayjs_locales.json new file mode 100644 index 0000000..821581d --- /dev/null +++ b/crabfit-frontend/src/res/dayjs_locales.json @@ -0,0 +1 @@ +["af","am","ar-dz","ar-kw","ar-ly","ar-ma","ar-sa","ar-tn","ar","az","be","bg","bi","bm","bn","bo","br","bs","ca","cs","cv","cy","da","de-at","de-ch","de","dv","el","en-au","en-ca","en-gb","en-ie","en-il","en-in","en-nz","en-sg","en-tt","en","eo","es-do","es-pr","es-us","es","et","eu","fa","fi","fo","fr-ca","fr-ch","fr","fy","ga","gd","gl","gom-latn","gu","he","hi","hr","ht","hu","hy-am","id","is","it-ch","it","ja","jv","ka","kk","km","kn","ko","ku","ky","lb","lo","lt","lv","me","mi","mk","ml","mn","mr","ms-my","ms","mt","my","nb","ne","nl-be","nl","nn","oc-lnc","pa-in","pl","pt-br","pt","ro","ru","rw","sd","se","si","sk","sl","sq","sr-cyrl","sr","ss","sv","sw","ta","te","tet","tg","th","tk","tl-ph","tlh","tr","tzl","tzm-latn","tzm","ug-cn","uk","ur","uz-latn","uz","vi","x-pseudo","yo","zh-cn","zh-hk","zh-tw","zh"]