2023-07-05 20:58:30 +02:00
|
|
|
// Dependencies
|
|
|
|
import { serverSideTranslations } from 'next-i18next/serverSideTranslations'
|
2023-07-06 19:13:42 +02:00
|
|
|
// Hooks
|
|
|
|
import { useTranslation } from 'next-i18next'
|
2023-07-05 20:58:30 +02:00
|
|
|
// Components
|
|
|
|
import { PageWrapper, ns as pageNs } from 'shared/components/wrappers/page.mjs'
|
|
|
|
import { BareLayout as Layout } from 'site/components/layouts/bare.mjs'
|
|
|
|
import { TranslationStatus } from 'site/components/crowdin/status.mjs'
|
2023-07-09 10:49:33 +02:00
|
|
|
import { Translators } from 'site/components/crowdin/translators.mjs'
|
2023-07-05 20:58:30 +02:00
|
|
|
import { Popout } from 'shared/components/popout.mjs'
|
|
|
|
import { Breadcrumbs } from 'shared/components/breadcrumbs.mjs'
|
2023-07-09 18:50:13 +02:00
|
|
|
import Link from 'next/link'
|
2023-07-05 20:58:30 +02:00
|
|
|
|
|
|
|
// Translation namespaces used on this page
|
2023-07-06 19:13:42 +02:00
|
|
|
const namespaces = [...new Set(pageNs), 'translation', 'locales']
|
2023-07-05 20:58:30 +02:00
|
|
|
|
2023-07-06 19:13:42 +02:00
|
|
|
const TranslationPage = ({ page }) => {
|
|
|
|
const { t } = useTranslation(namespaces)
|
2023-07-05 20:58:30 +02:00
|
|
|
|
2023-07-06 19:13:42 +02:00
|
|
|
const title = t('translation:translation')
|
2023-07-05 20:58:30 +02:00
|
|
|
|
2023-07-06 19:13:42 +02:00
|
|
|
return (
|
|
|
|
<PageWrapper {...page} layout={Layout}>
|
|
|
|
<div className="max-w-4xl mx-auto p-4 mt-4">
|
|
|
|
<Breadcrumbs crumbs={[{ s: 'translation', t: title }]} title={title} />
|
2023-07-05 20:58:30 +02:00
|
|
|
|
2023-07-06 19:13:42 +02:00
|
|
|
<h1>{title}</h1>
|
|
|
|
<p>{t('translation:proudlyMultilingual')}</p>
|
|
|
|
|
|
|
|
<Popout tip>
|
|
|
|
<h5>{t('translation:getInvolved')}</h5>
|
|
|
|
<p>{t('translation:teamEffort')}</p>
|
2023-07-09 18:50:13 +02:00
|
|
|
<Link href="/translation/join" className="btn btn-accent mr-2">
|
|
|
|
{t('translation:joinTheTeam')}
|
|
|
|
</Link>
|
|
|
|
<a
|
|
|
|
href="https://freesewing.dev/guides/translation"
|
|
|
|
className="btn btn-accent btn-outline"
|
|
|
|
>
|
2023-07-06 19:13:42 +02:00
|
|
|
{t('translation:seeTranslationGuide')}
|
|
|
|
</a>
|
|
|
|
</Popout>
|
|
|
|
|
2023-07-09 10:49:33 +02:00
|
|
|
<h2 id="status">Translation Status</h2>
|
2023-07-06 19:13:42 +02:00
|
|
|
<TranslationStatus />
|
|
|
|
<b className="ml-10">Legend</b>
|
|
|
|
<ul className="list list-inside ml-4">
|
|
|
|
<li className="flex flex-row items-center gap-2">
|
|
|
|
<span className="inline-block w-4 h-4 rounded-full bg-primary"></span>
|
|
|
|
<span>{t('translation:translatedAndApproved')}</span>
|
|
|
|
</li>
|
|
|
|
<li className="flex flex-row items-center gap-2">
|
|
|
|
<span className="inline-block w-4 h-4 rounded-full bg-primary bg-opacity-70"></span>
|
|
|
|
<span>{t('translation:translatedOnly')}</span>
|
|
|
|
</li>
|
|
|
|
<li className="flex flex-row items-center gap-2">
|
|
|
|
<span className="inline-block w-4 h-4 rounded-full bg-primary bg-opacity-30"></span>
|
|
|
|
<span>{t('translation:notTranslated')}</span>
|
|
|
|
</li>
|
|
|
|
</ul>
|
2023-07-09 10:49:33 +02:00
|
|
|
<br />
|
|
|
|
|
|
|
|
<h2 id="team">Translation Team</h2>
|
|
|
|
<Translators />
|
2023-07-06 19:13:42 +02:00
|
|
|
|
|
|
|
<h2>Supported Languages</h2>
|
|
|
|
<p>We currently support the following five languages:</p>
|
|
|
|
<ul className="list list-inside list-disc ml-4">
|
|
|
|
<li>
|
|
|
|
<b>{t('locales:en')}</b>
|
|
|
|
<small> ({t('translation:defaultLanguage')}</small>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<b>{t('locales:nl')}</b>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<b>{t('locales:de')}</b>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<b>{t('locales:fr')}</b>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<b>{t('locales:es')}</b>
|
|
|
|
</li>
|
|
|
|
</ul>
|
2023-07-05 20:58:30 +02:00
|
|
|
<p>
|
2023-07-06 19:13:42 +02:00
|
|
|
In addition, comminity members have started initiatives to add the following langauges:
|
2023-07-05 20:58:30 +02:00
|
|
|
</p>
|
2023-07-06 19:13:42 +02:00
|
|
|
<ul className="list list-inside list-disc ml-4">
|
|
|
|
<li>
|
|
|
|
<b>{t('locales:uk')}</b>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
<Popout tip>
|
|
|
|
<h5>{t('translation:addLanguage1')}</h5>
|
|
|
|
<p>
|
|
|
|
{t('translation:addLanguage2')}
|
|
|
|
<br />
|
|
|
|
{t('translation:addLanguage3')}
|
|
|
|
</p>
|
2023-07-09 18:50:13 +02:00
|
|
|
<Link href="/translation/suggest-language" className="btn btn-accent mr-2">
|
|
|
|
{t('translation:suggestLanguage')}
|
|
|
|
</Link>
|
|
|
|
<a
|
|
|
|
href="https://freesewing.dev/guides/translation"
|
|
|
|
className="btn btn-accent btn-outline"
|
|
|
|
>
|
2023-07-06 19:13:42 +02:00
|
|
|
{t('translation:seeTranslationGuide')}
|
|
|
|
</a>
|
|
|
|
</Popout>
|
|
|
|
</div>
|
|
|
|
</PageWrapper>
|
|
|
|
)
|
|
|
|
}
|
2023-07-05 20:58:30 +02:00
|
|
|
|
|
|
|
export default TranslationPage
|
|
|
|
|
|
|
|
export async function getStaticProps({ locale }) {
|
|
|
|
return {
|
|
|
|
props: {
|
|
|
|
...(await serverSideTranslations(locale, namespaces)),
|
|
|
|
page: {
|
|
|
|
locale,
|
|
|
|
path: ['translation'],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|