translate event page contents

This commit is contained in:
Aarni Halinen
2021-04-01 17:33:38 +03:00
parent 39104f709b
commit 7ce9f38441
5 changed files with 93 additions and 55 deletions
+6 -1
View File
@@ -1,6 +1,11 @@
{ {
"Lue lisää": "Read more", "Lue lisää": "Read more",
"lngButton": "Suomeksi", "Hakemaasi sivua": "lngButton": "Suomeksi",
"Paikka": "Location",
"Alkaa": "Starts at",
"Päättyy": "Ends at",
"Hakemaasi sivua":
"Page", "Page",
"ei löydy": "ei löydy":
+14 -8
View File
@@ -1,14 +1,20 @@
import React from "react"; import React from "react";
import i18nNext, { useTranslation } from "../i18n"; import styled from "styled-components";
import i18nNext from "../i18n";
const ChangeLanguageButton: React.FC = () => { import Icon, { IconType } from "./Icon";
const { t } = useTranslation();
const { i18n } = i18nNext;
const ChangeLanguageButton: React.FC = (props) => {
const { language, changeLanguage } = i18nNext.i18n;
return ( return (
<button type="button" onClick={() => i18n.changeLanguage(i18n.language === "fi" ? "en" : "fi")}>{t("lngButton")}</button> <button {...props} type="button" onClick={() => changeLanguage(language === "fi" ? "en" : "fi")}>
<Icon name={language === "fi" ? IconType.GBFlag : IconType.FinlandFlag} />
</button>
); );
}; };
export default ChangeLanguageButton; export default styled(ChangeLanguageButton)`
font-size: 4rem;
background: none;
border: none;
width: fit-content;
`;
+10 -2
View File
@@ -69,10 +69,18 @@ const nameToIcon = (name: IconType): JSX.Element | string => {
); );
} }
if (name === IconType.FinlandFlag) { if (name === IconType.FinlandFlag) {
return "🇫🇮"; return (
<span role="img">
🇫🇮
</span>
);
} }
if (name === IconType.GBFlag) { if (name === IconType.GBFlag) {
return "🇬🇧"; return (
<span role="img">
🇬🇧
</span>
);
} }
return null; return null;
}; };
+1
View File
@@ -10,3 +10,4 @@ export { default as InfoBox } from "./InfoBox";
export { default as Accordion } from "./Accordion/Accordion"; export { default as Accordion } from "./Accordion/Accordion";
export { default as Link } from "./Link"; export { default as Link } from "./Link";
export { default as CrossFadeImages } from "./CrossFadeImages"; export { default as CrossFadeImages } from "./CrossFadeImages";
export { default as ChangeLanguageButton } from "./ChangeLanguageButton";
+62 -44
View File
@@ -4,12 +4,11 @@ import styled from "styled-components";
import colors from "@theme/colors"; import colors from "@theme/colors";
import Event from "@models/Event"; import Event from "@models/Event";
import Button from "@components/Button"; import Button from "@components/Button";
import { Link, TextSection } from "@components/index"; import { Link, TextSection, ChangeLanguageButton } from "@components/index";
import noop from "@utils/noop"; import noop from "@utils/noop";
import MarkdownStyles from "@views/common/MarkdownStyles"; import MarkdownStyles from "@views/common/MarkdownStyles";
import LoadingView from "@views/common/LoadingView"; import LoadingView from "@views/common/LoadingView";
// import ChangeLanguageButton from "@components/ChangeLanguageButton"; import i18nNext, { useTranslation } from "../../i18n";
interface EventPageViewProps { interface EventPageViewProps {
event?: Event; event?: Event;
@@ -34,7 +33,6 @@ const StyledTextSection = styled(TextSection)`
line-height: 0.4rem; line-height: 0.4rem;
} }
} }
`; `;
const SignupButtons = styled.div` const SignupButtons = styled.div`
@@ -47,49 +45,69 @@ const Content = styled(MarkdownStyles)`
margin-top: 1.5rem; margin-top: 1.5rem;
`; `;
const LngButton = styled(ChangeLanguageButton)`
align-self: flex-end;
margin-right: 1rem;
`;
const EventPageView: React.FC<EventPageViewProps> = ({ event }) => { const EventPageView: React.FC<EventPageViewProps> = ({ event }) => {
const { t } = useTranslation();
if (!event) return <LoadingView />; if (!event) return <LoadingView />;
const date_start = new Date(event.start_time).toLocaleString("fi-FI"); const { language } = i18nNext.i18n;
const date_end = new Date(event.end_time).toLocaleString("fi-FI"); const isFi = language === "fi";
const {
title, description, content, location, startDate, endDate,
} = {
title: isFi ? event.title_fi : event.title_en,
description: isFi ? event.description_fi : event.description_en,
content: isFi ? event.content_fi : event.content_en,
location: isFi ? event.location_fi : event.location_en,
startDate: new Date(event.start_time).toLocaleString(isFi ? "fi-FI" : "en-GB"),
endDate: new Date(event.end_time).toLocaleString(isFi ? "fi-FI" : "en-GB"),
};
return ( return (
<StyledTextSection> <>
<h1> <LngButton />
{event.title_fi} <StyledTextSection>
<p> <h1>
{event.description_fi} {title}
</p> <p>
<Image {description}
src={event.image || event.tags[0].icon} </p>
alt={event.title_fi} <Image
objectFit="scale-down" src={event.image || event.tags[0].icon}
layout="responsive" alt={title}
width={16} objectFit="scale-down"
height={9} layout="responsive"
/> width={16}
</h1> height={9}
<div> />
<Content source={event.content_fi} escapeHtml={false} /> </h1>
<p> <div>
Paikka: {event.location_fi} <Content source={content} escapeHtml={false} />
</p> <p>
<p> {`${t("Paikka")}: ${location}`}
<time>Alkaa: {date_start}</time> </p>
</p> <p>
<p> <time>{`${t("Alkaa")}: ${startDate}`}</time>
<time>Päättyy: {date_end}</time> </p>
</p> <p>
{/* We may have multiple signup forms. Generate own Button for each one */} <time>{`${t("Päättyy")}: ${endDate}`}</time>
<SignupButtons> </p>
{event.signupForm.map((sf) => ( {/* We may have multiple signup forms. Generate own Button for each one */}
<Link key={sf.id} to={`/signup/${sf.id}`}> <SignupButtons>
<Button buttonStyle="filled" onClick={noop}> {event.signupForm.map((sf) => (
{sf.title_fi} <Link key={sf.id} to={`/signup/${sf.id}`}>
</Button> <Button buttonStyle="filled" onClick={noop}>
</Link> {isFi ? sf.title_fi : sf.title_en}
))} </Button>
</SignupButtons> </Link>
</div> ))}
</StyledTextSection> </SignupButtons>
</div>
</StyledTextSection>
</>
); );
}; };
export default EventPageView; export default EventPageView;