Browse Source
* Added language selector page * PR nits * Fix typo in variable name * Added language icon. Show search icon in mobile. * Tweaked header alignment * Split languages into 3 categories based on progress: complete, partially translated, and needs contributors * Lower-cased pt-* language codes * Re-added locale sort * Renamed 'Partially Translated' header to 'In Progress'main
Brian Vaughn
6 years ago
committed by
Dan Abramov
5 changed files with 373 additions and 27 deletions
@ -0,0 +1,133 @@ |
|||||
|
# Status enums indicate what percentage of "core" content has been translated: |
||||
|
# 0: Incomplete (0–49%) |
||||
|
# 1: Partially complete (50–94%) |
||||
|
# 2: Complete (95–100%) |
||||
|
|
||||
|
- name: English |
||||
|
translated_name: English |
||||
|
code: en |
||||
|
status: 2 |
||||
|
- name: Arabic |
||||
|
translated_name: العربية |
||||
|
code: ar |
||||
|
status: 0 |
||||
|
- name: Azerbaijani |
||||
|
translated_name: Azərbaycanca |
||||
|
code: az |
||||
|
status: 0 |
||||
|
- name: Bulgarian |
||||
|
translated_name: Български |
||||
|
code: bg |
||||
|
status: 0 |
||||
|
- name: Bengali |
||||
|
translated_name: বাংলা |
||||
|
code: bn |
||||
|
status: 0 |
||||
|
- name: German |
||||
|
translated_name: Deutsch |
||||
|
code: de |
||||
|
status: 0 |
||||
|
- name: Spanish |
||||
|
translated_name: Español |
||||
|
code: es |
||||
|
status: 2 |
||||
|
- name: Persian |
||||
|
translated_name: فارسی |
||||
|
code: fa |
||||
|
status: 0 |
||||
|
- name: French |
||||
|
translated_name: Français |
||||
|
code: fr |
||||
|
status: 0 |
||||
|
- name: Hebrew |
||||
|
translated_name: עברית |
||||
|
code: he |
||||
|
status: 0 |
||||
|
- name: Hindi |
||||
|
translated_name: हिन्दी |
||||
|
code: hi |
||||
|
status: 0 |
||||
|
- name: Armenian |
||||
|
translated_name: Հայերեն |
||||
|
code: hy |
||||
|
status: 0 |
||||
|
- name: Indonesian |
||||
|
translated_name: Bahasa Indonesia |
||||
|
code: id |
||||
|
status: 0 |
||||
|
- name: Italian |
||||
|
translated_name: Italiano |
||||
|
code: it |
||||
|
status: 0 |
||||
|
- name: Japanese |
||||
|
translated_name: 日本語 |
||||
|
code: ja |
||||
|
status: 1 |
||||
|
- name: Korean |
||||
|
translated_name: 한국어 |
||||
|
code: ko |
||||
|
status: 0 |
||||
|
- name: Malayalam |
||||
|
translated_name: മലയാളം |
||||
|
code: ml |
||||
|
status: 0 |
||||
|
- name: Nepali |
||||
|
translated_name: नेपाली |
||||
|
code: ne |
||||
|
status: 0 |
||||
|
- name: Dutch |
||||
|
translated_name: Nederlands |
||||
|
code: nl |
||||
|
status: 0 |
||||
|
- name: Polish |
||||
|
translated_name: Polski |
||||
|
code: pl |
||||
|
status: 0 |
||||
|
- name: Portuguese (Brazil) |
||||
|
translated_name: Português do Brasil |
||||
|
code: pt-br |
||||
|
status: 1 |
||||
|
- name: Portuguese (Portugal) |
||||
|
translated_name: Português europeu |
||||
|
code: pt-pt |
||||
|
status: 0 |
||||
|
- name: Romanian |
||||
|
translated_name: Română |
||||
|
code: ro |
||||
|
status: 0 |
||||
|
- name: Russian |
||||
|
translated_name: Русский |
||||
|
code: ru |
||||
|
status: 0 |
||||
|
- name: Sinhala |
||||
|
translated_name: සිංහල |
||||
|
code: si |
||||
|
status: 0 |
||||
|
- name: Tamil |
||||
|
translated_name: தமிழ் |
||||
|
code: ta |
||||
|
status: 0 |
||||
|
- name: Turkish |
||||
|
translated_name: Türkçe |
||||
|
code: tr |
||||
|
status: 0 |
||||
|
- name: Ukrainian |
||||
|
translated_name: Українська |
||||
|
code: uk |
||||
|
status: 0 |
||||
|
- name: Uzbek |
||||
|
translated_name: Oʻzbekcha |
||||
|
code: uz |
||||
|
status: 0 |
||||
|
- name: Vietnamese |
||||
|
translated_name: Tiếng Việt |
||||
|
code: vi |
||||
|
status: 0 |
||||
|
- name: Simplified Chinese |
||||
|
translated_name: 简体中文 |
||||
|
code: zh-hans |
||||
|
status: 0 |
||||
|
- name: Traditional Chinese |
||||
|
translated_name: 繁體中文 |
||||
|
code: zh-hant |
||||
|
status: 0 |
@ -0,0 +1,159 @@ |
|||||
|
/** |
||||
|
* Copyright (c) 2013-present, Facebook, Inc. |
||||
|
* |
||||
|
* @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 {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 (0–49%)
|
||||
|
// 1: Partially complete (50–94%)
|
||||
|
// 2: Complete (95–100%)
|
||||
|
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 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"> |
||||
|
{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; |
Loading…
Reference in new issue