Files
react.dev/src/pages/languages.js
Brian Vaughn 3e4f2687c6 Update copyright headers (#3086)
Added and updated copyright headers.

Added some missing Flow types.

Removed an invalid prop-types import.
2020-07-07 10:35:57 -04:00

168 lines
3.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* @emails react-core
* @flow
*/
import Layout from 'components/Layout';
import Container from 'components/Container';
import Header from 'components/Header';
import TitleAndMetaTags from 'components/TitleAndMetaTags';
import React from 'react';
import {urlRoot} from 'site-constants';
import {media, sharedStyles} from 'theme';
// $FlowFixMe This is a valid path
import languages from '../../content/languages.yml';
// Status enums indicate what percentage of "core" content has been translated:
// 0: Incomplete (049%)
// 1: Partially complete (5094%)
// 2: Complete (95100%)
const {complete, incomplete, partial} = languages.reduce(
(reduced, language) => {
switch (language.status) {
case 0:
reduced.incomplete.push(language);
break;
case 1:
reduced.partial.push(language);
break;
case 2:
reduced.complete.push(language);
break;
}
return reduced;
},
{complete: [], incomplete: [], partial: []},
);
type Props = {
location: Location,
};
const Languages = ({location}: Props) => (
<Layout location={location}>
<Container>
<div css={sharedStyles.articleLayout.container}>
<div css={sharedStyles.articleLayout.content}>
<Header>Languages</Header>
<TitleAndMetaTags
canonicalUrl={`${urlRoot}/languages/`}
title="React - Languages"
/>
<div css={sharedStyles.markdown}>
<p>
The React documentation is available in the following languages:
</p>
<LanguagesGrid languages={complete} />
<h2>In Progress</h2>
<LanguagesGrid languages={partial} />
<h2>Needs Contributors</h2>
<LanguagesGrid languages={incomplete} />
<p>
Don't see your language above?{' '}
<a
href="https://github.com/reactjs/reactjs.org-translation#reactjsorg-translation"
target="_blank"
rel="noopener">
Let us know
</a>
.
</p>
</div>
</div>
</div>
</Container>
</Layout>
);
const LanguagesGrid = ({languages}) => (
<ul
css={{
display: 'flex',
flexWrap: 'wrap',
marginLeft: -20,
}}>
{languages
.sort((a, b) => a.code.localeCompare(b.code))
.map(({code, name, status, translated_name}) => (
<Language
key={code}
code={code}
name={name}
status={status}
translatedName={translated_name}
/>
))}
</ul>
);
const Language = ({code, name, status, translatedName}) => {
const prefix = code === 'en' ? '' : `${code}.`;
return (
<li
css={{
paddingLeft: 20,
paddingTop: 20,
borderTop: '1px dotted #ececec',
paddingBottom: 20,
width: '100%',
listStyle: 'none',
[media.size('small')]: {
width: '50%',
},
[media.size('medium')]: {
width: '33.33%',
},
[media.greaterThan('large')]: {
width: '25%',
},
}}
key={code}>
<div css={{}}>{name}</div>
<div
css={{
fontSize: 22,
fontWeight: 'bold',
marginBottom: 8,
marginTop: 8,
}}>
{status === 0 && translatedName}
{status > 0 && (
<a
href={`https://${prefix}reactjs.org/`}
rel="nofollow"
lang={code}
hrefLang={code}>
{translatedName}
</a>
)}
</div>
<div css={{marginTop: 10}}>
<a
css={{
fontSize: 12,
}}
href={`https://github.com/reactjs/${prefix}reactjs.org/`}
target="_blank"
rel="noopener">
Contribute
</a>
</div>
</li>
);
};
export default Languages;