import { useState } from 'react' import { useTranslation } from 'next-i18next' import orderBy from 'lodash.orderby' import translators from 'site/prebuild/translators.json' import { I18nIcon } from 'shared/components/icons.mjs' export const ns = ['translation', 'i18n'] const sort = { all: (translators) => { const all = {} let max = 0 for (const language of Object.keys(translators)) { for (const translator in translators[language]) { all[translator] = { ...translators[language][translator], language, translator } if (translators[language][translator].translated > max) { max = translators[language][translator].translated } } } return [orderBy(all, 'translated', 'desc'), max] }, byLanguage: (translators) => { const all = {} const max = {} // First pass for (const language of Object.keys(translators)) { all[language] = {} max[language] = { max: 0, language } for (const translator in translators[language]) { all[language][translator] = { ...translators[language][translator], language, translator } if (translators[language][translator].translated > max[language].max) { max[language].max = translators[language][translator].translated } } } // Second pass for (const language of Object.keys(all)) { all[language] = orderBy(all[language], 'translated', 'desc') } return [all, max] }, } const Score = ({ translated, max }) => (
{translated}
) const Ranking = ({ i }) => i === 0 ? ( 🥇 ) : i === 1 ? ( 🥈 ) : i === 2 ? ( 🥉 ) : ( '#' + (i + 1) ) export const Translators = () => { const { t } = useTranslation(ns) const [groupByLanguage, setGroupByLanguage] = useState(true) const [data, max] = groupByLanguage ? sort.byLanguage(translators) : sort.all(translators) return (

{groupByLanguage ? orderBy(max, 'max', 'desc').map(({ max, language }, i) => [ , ...data[language].map((row, i) => ( )), ]) : data.map((row, i) => ( ))}
# {t('translation:words')} {t('translation:translator')}
{t(`locales:${language}`)}
{row.language} {row.translator}
{row.language} {row.translator}
) }