translate event page contents
This commit is contained in:
@@ -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":
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user